curl --request POST \
--url https://api.atatus.com/v2/projects/{projectId}/sourcemap \
--header 'Content-Type: multipart/form-data' \
--header 'X-API-KEY: <api-key>' \
--form url=http://www.acme.com/js/main.min.js \
--form sourcemap=@example-file \
--form version=1.0.0import requests
url = "https://api.atatus.com/v2/projects/{projectId}/sourcemap"
files = { "sourcemap": ("example-file", open("example-file", "rb")) }
payload = {
"url": "http://www.acme.com/js/main.min.js",
"version": "1.0.0"
}
headers = {"X-API-KEY": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('url', 'http://www.acme.com/js/main.min.js');
form.append('sourcemap', '<string>');
form.append('version', '1.0.0');
const options = {method: 'POST', headers: {'X-API-KEY': '<api-key>'}};
options.body = form;
fetch('https://api.atatus.com/v2/projects/{projectId}/sourcemap', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.atatus.com/v2/projects/{projectId}/sourcemap",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttp://www.acme.com/js/main.min.js\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sourcemap\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\n1.0.0\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.atatus.com/v2/projects/{projectId}/sourcemap"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttp://www.acme.com/js/main.min.js\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sourcemap\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\n1.0.0\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.atatus.com/v2/projects/{projectId}/sourcemap")
.header("X-API-KEY", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttp://www.acme.com/js/main.min.js\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sourcemap\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\n1.0.0\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.atatus.com/v2/projects/{projectId}/sourcemap")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttp://www.acme.com/js/main.min.js\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sourcemap\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\n1.0.0\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"Message": "API key is invalid!"
}{
"Message": "Validation failed"
}{
"Message": "Too many requests"
}{
"Message": "Internal server error"
}Upload a source map
Uploads a source map directly to Atatus so your source code is not exposed on the public web. Run it at the start of your deploy script, before the new code is in production. A source map is stored as project + minified URL + version, so uploading it again overwrites the previous one.
curl --request POST \
--url https://api.atatus.com/v2/projects/{projectId}/sourcemap \
--header 'Content-Type: multipart/form-data' \
--header 'X-API-KEY: <api-key>' \
--form url=http://www.acme.com/js/main.min.js \
--form sourcemap=@example-file \
--form version=1.0.0import requests
url = "https://api.atatus.com/v2/projects/{projectId}/sourcemap"
files = { "sourcemap": ("example-file", open("example-file", "rb")) }
payload = {
"url": "http://www.acme.com/js/main.min.js",
"version": "1.0.0"
}
headers = {"X-API-KEY": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('url', 'http://www.acme.com/js/main.min.js');
form.append('sourcemap', '<string>');
form.append('version', '1.0.0');
const options = {method: 'POST', headers: {'X-API-KEY': '<api-key>'}};
options.body = form;
fetch('https://api.atatus.com/v2/projects/{projectId}/sourcemap', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.atatus.com/v2/projects/{projectId}/sourcemap",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttp://www.acme.com/js/main.min.js\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sourcemap\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\n1.0.0\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.atatus.com/v2/projects/{projectId}/sourcemap"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttp://www.acme.com/js/main.min.js\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sourcemap\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\n1.0.0\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.atatus.com/v2/projects/{projectId}/sourcemap")
.header("X-API-KEY", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttp://www.acme.com/js/main.min.js\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sourcemap\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\n1.0.0\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.atatus.com/v2/projects/{projectId}/sourcemap")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttp://www.acme.com/js/main.min.js\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sourcemap\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"version\"\r\n\r\n1.0.0\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"Message": "API key is invalid!"
}{
"Message": "Validation failed"
}{
"Message": "Too many requests"
}{
"Message": "Internal server error"
}Authorizations
Your Atatus API key. You can also send it as the api_key query parameter or, for POST/PUT requests, in the request body.
Path Parameters
Body
The full URL of the minified file. If the URL starts with http: or https:, it is stripped off.
"http://www.acme.com/js/main.min.js"
The contents of the source map, as a multipart file upload.
A string identifying which version of your code this source map is for. Only needed if the script filename (url) is the same across deployments. If you set a version here, set the same version in your Atatus snippet with atatus.setVersion('version_string_here'), and vice versa.
"1.0.0"
Response
Uploaded successfully