curl --request POST \
--url https://platform.runonatlas.com/external/customers/upsert \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"externalId": "external-customer-id-123",
"billingAddress1": "123 Main St",
"billingAddress2": "Apt 1",
"billingCity": "Anytown",
"billingCountry": "US",
"billingState": "CA",
"billingZipCode": "12345",
"shippingAddress1": "123 Main St",
"shippingAddress2": "Apt 1",
"shippingCity": "Anytown",
"shippingCountry": "US",
"shippingState": "CA",
"shippingZipCode": "12345",
"email": "john.doe@example.com",
"name": "John Doe",
"quickBooksId": "quickbooks-customer-id-123",
"stripeId": "stripe-customer-id-123",
"xeroId": "xero-customer-id-123"
}
'import requests
url = "https://platform.runonatlas.com/external/customers/upsert"
payload = {
"externalId": "external-customer-id-123",
"billingAddress1": "123 Main St",
"billingAddress2": "Apt 1",
"billingCity": "Anytown",
"billingCountry": "US",
"billingState": "CA",
"billingZipCode": "12345",
"shippingAddress1": "123 Main St",
"shippingAddress2": "Apt 1",
"shippingCity": "Anytown",
"shippingCountry": "US",
"shippingState": "CA",
"shippingZipCode": "12345",
"email": "john.doe@example.com",
"name": "John Doe",
"quickBooksId": "quickbooks-customer-id-123",
"stripeId": "stripe-customer-id-123",
"xeroId": "xero-customer-id-123"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
externalId: 'external-customer-id-123',
billingAddress1: '123 Main St',
billingAddress2: 'Apt 1',
billingCity: 'Anytown',
billingCountry: 'US',
billingState: 'CA',
billingZipCode: '12345',
shippingAddress1: '123 Main St',
shippingAddress2: 'Apt 1',
shippingCity: 'Anytown',
shippingCountry: 'US',
shippingState: 'CA',
shippingZipCode: '12345',
email: 'john.doe@example.com',
name: 'John Doe',
quickBooksId: 'quickbooks-customer-id-123',
stripeId: 'stripe-customer-id-123',
xeroId: 'xero-customer-id-123'
})
};
fetch('https://platform.runonatlas.com/external/customers/upsert', 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://platform.runonatlas.com/external/customers/upsert",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'externalId' => 'external-customer-id-123',
'billingAddress1' => '123 Main St',
'billingAddress2' => 'Apt 1',
'billingCity' => 'Anytown',
'billingCountry' => 'US',
'billingState' => 'CA',
'billingZipCode' => '12345',
'shippingAddress1' => '123 Main St',
'shippingAddress2' => 'Apt 1',
'shippingCity' => 'Anytown',
'shippingCountry' => 'US',
'shippingState' => 'CA',
'shippingZipCode' => '12345',
'email' => 'john.doe@example.com',
'name' => 'John Doe',
'quickBooksId' => 'quickbooks-customer-id-123',
'stripeId' => 'stripe-customer-id-123',
'xeroId' => 'xero-customer-id-123'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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://platform.runonatlas.com/external/customers/upsert"
payload := strings.NewReader("{\n \"externalId\": \"external-customer-id-123\",\n \"billingAddress1\": \"123 Main St\",\n \"billingAddress2\": \"Apt 1\",\n \"billingCity\": \"Anytown\",\n \"billingCountry\": \"US\",\n \"billingState\": \"CA\",\n \"billingZipCode\": \"12345\",\n \"shippingAddress1\": \"123 Main St\",\n \"shippingAddress2\": \"Apt 1\",\n \"shippingCity\": \"Anytown\",\n \"shippingCountry\": \"US\",\n \"shippingState\": \"CA\",\n \"shippingZipCode\": \"12345\",\n \"email\": \"john.doe@example.com\",\n \"name\": \"John Doe\",\n \"quickBooksId\": \"quickbooks-customer-id-123\",\n \"stripeId\": \"stripe-customer-id-123\",\n \"xeroId\": \"xero-customer-id-123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://platform.runonatlas.com/external/customers/upsert")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"externalId\": \"external-customer-id-123\",\n \"billingAddress1\": \"123 Main St\",\n \"billingAddress2\": \"Apt 1\",\n \"billingCity\": \"Anytown\",\n \"billingCountry\": \"US\",\n \"billingState\": \"CA\",\n \"billingZipCode\": \"12345\",\n \"shippingAddress1\": \"123 Main St\",\n \"shippingAddress2\": \"Apt 1\",\n \"shippingCity\": \"Anytown\",\n \"shippingCountry\": \"US\",\n \"shippingState\": \"CA\",\n \"shippingZipCode\": \"12345\",\n \"email\": \"john.doe@example.com\",\n \"name\": \"John Doe\",\n \"quickBooksId\": \"quickbooks-customer-id-123\",\n \"stripeId\": \"stripe-customer-id-123\",\n \"xeroId\": \"xero-customer-id-123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform.runonatlas.com/external/customers/upsert")
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["Content-Type"] = 'application/json'
request.body = "{\n \"externalId\": \"external-customer-id-123\",\n \"billingAddress1\": \"123 Main St\",\n \"billingAddress2\": \"Apt 1\",\n \"billingCity\": \"Anytown\",\n \"billingCountry\": \"US\",\n \"billingState\": \"CA\",\n \"billingZipCode\": \"12345\",\n \"shippingAddress1\": \"123 Main St\",\n \"shippingAddress2\": \"Apt 1\",\n \"shippingCity\": \"Anytown\",\n \"shippingCountry\": \"US\",\n \"shippingState\": \"CA\",\n \"shippingZipCode\": \"12345\",\n \"email\": \"john.doe@example.com\",\n \"name\": \"John Doe\",\n \"quickBooksId\": \"quickbooks-customer-id-123\",\n \"stripeId\": \"stripe-customer-id-123\",\n \"xeroId\": \"xero-customer-id-123\"\n}"
response = http.request(request)
puts response.read_body{
"createdAt": "2021-01-01T00:00:00.000Z",
"id": "atlas-internal-customer-id-123",
"updatedAt": "2021-01-01T00:00:00.000Z",
"merchantId": "atlas-internal-merchant-id-123",
"billingAddress1": "123 Main St",
"billingAddress2": "Apt 1",
"billingCity": "Anytown",
"billingCountry": "US",
"billingState": "CA",
"billingZipCode": "12345",
"shippingAddress1": "123 Main St",
"shippingAddress2": "Apt 1",
"shippingCity": "Anytown",
"shippingCountry": "US",
"shippingState": "CA",
"shippingZipCode": "12345",
"email": "john.doe@example.com",
"externalId": "external-customer-id-123",
"name": "John Doe",
"quickBooksId": "quickbooks-customer-id-123",
"stripeId": "stripe-customer-id-123"
}Upsert customer
Upsert customer by unique external ID (e.g. the customer ID in your system). Does not automatically subscribe the customer to the default plan if eligible.
curl --request POST \
--url https://platform.runonatlas.com/external/customers/upsert \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"externalId": "external-customer-id-123",
"billingAddress1": "123 Main St",
"billingAddress2": "Apt 1",
"billingCity": "Anytown",
"billingCountry": "US",
"billingState": "CA",
"billingZipCode": "12345",
"shippingAddress1": "123 Main St",
"shippingAddress2": "Apt 1",
"shippingCity": "Anytown",
"shippingCountry": "US",
"shippingState": "CA",
"shippingZipCode": "12345",
"email": "john.doe@example.com",
"name": "John Doe",
"quickBooksId": "quickbooks-customer-id-123",
"stripeId": "stripe-customer-id-123",
"xeroId": "xero-customer-id-123"
}
'import requests
url = "https://platform.runonatlas.com/external/customers/upsert"
payload = {
"externalId": "external-customer-id-123",
"billingAddress1": "123 Main St",
"billingAddress2": "Apt 1",
"billingCity": "Anytown",
"billingCountry": "US",
"billingState": "CA",
"billingZipCode": "12345",
"shippingAddress1": "123 Main St",
"shippingAddress2": "Apt 1",
"shippingCity": "Anytown",
"shippingCountry": "US",
"shippingState": "CA",
"shippingZipCode": "12345",
"email": "john.doe@example.com",
"name": "John Doe",
"quickBooksId": "quickbooks-customer-id-123",
"stripeId": "stripe-customer-id-123",
"xeroId": "xero-customer-id-123"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
externalId: 'external-customer-id-123',
billingAddress1: '123 Main St',
billingAddress2: 'Apt 1',
billingCity: 'Anytown',
billingCountry: 'US',
billingState: 'CA',
billingZipCode: '12345',
shippingAddress1: '123 Main St',
shippingAddress2: 'Apt 1',
shippingCity: 'Anytown',
shippingCountry: 'US',
shippingState: 'CA',
shippingZipCode: '12345',
email: 'john.doe@example.com',
name: 'John Doe',
quickBooksId: 'quickbooks-customer-id-123',
stripeId: 'stripe-customer-id-123',
xeroId: 'xero-customer-id-123'
})
};
fetch('https://platform.runonatlas.com/external/customers/upsert', 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://platform.runonatlas.com/external/customers/upsert",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'externalId' => 'external-customer-id-123',
'billingAddress1' => '123 Main St',
'billingAddress2' => 'Apt 1',
'billingCity' => 'Anytown',
'billingCountry' => 'US',
'billingState' => 'CA',
'billingZipCode' => '12345',
'shippingAddress1' => '123 Main St',
'shippingAddress2' => 'Apt 1',
'shippingCity' => 'Anytown',
'shippingCountry' => 'US',
'shippingState' => 'CA',
'shippingZipCode' => '12345',
'email' => 'john.doe@example.com',
'name' => 'John Doe',
'quickBooksId' => 'quickbooks-customer-id-123',
'stripeId' => 'stripe-customer-id-123',
'xeroId' => 'xero-customer-id-123'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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://platform.runonatlas.com/external/customers/upsert"
payload := strings.NewReader("{\n \"externalId\": \"external-customer-id-123\",\n \"billingAddress1\": \"123 Main St\",\n \"billingAddress2\": \"Apt 1\",\n \"billingCity\": \"Anytown\",\n \"billingCountry\": \"US\",\n \"billingState\": \"CA\",\n \"billingZipCode\": \"12345\",\n \"shippingAddress1\": \"123 Main St\",\n \"shippingAddress2\": \"Apt 1\",\n \"shippingCity\": \"Anytown\",\n \"shippingCountry\": \"US\",\n \"shippingState\": \"CA\",\n \"shippingZipCode\": \"12345\",\n \"email\": \"john.doe@example.com\",\n \"name\": \"John Doe\",\n \"quickBooksId\": \"quickbooks-customer-id-123\",\n \"stripeId\": \"stripe-customer-id-123\",\n \"xeroId\": \"xero-customer-id-123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://platform.runonatlas.com/external/customers/upsert")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"externalId\": \"external-customer-id-123\",\n \"billingAddress1\": \"123 Main St\",\n \"billingAddress2\": \"Apt 1\",\n \"billingCity\": \"Anytown\",\n \"billingCountry\": \"US\",\n \"billingState\": \"CA\",\n \"billingZipCode\": \"12345\",\n \"shippingAddress1\": \"123 Main St\",\n \"shippingAddress2\": \"Apt 1\",\n \"shippingCity\": \"Anytown\",\n \"shippingCountry\": \"US\",\n \"shippingState\": \"CA\",\n \"shippingZipCode\": \"12345\",\n \"email\": \"john.doe@example.com\",\n \"name\": \"John Doe\",\n \"quickBooksId\": \"quickbooks-customer-id-123\",\n \"stripeId\": \"stripe-customer-id-123\",\n \"xeroId\": \"xero-customer-id-123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform.runonatlas.com/external/customers/upsert")
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["Content-Type"] = 'application/json'
request.body = "{\n \"externalId\": \"external-customer-id-123\",\n \"billingAddress1\": \"123 Main St\",\n \"billingAddress2\": \"Apt 1\",\n \"billingCity\": \"Anytown\",\n \"billingCountry\": \"US\",\n \"billingState\": \"CA\",\n \"billingZipCode\": \"12345\",\n \"shippingAddress1\": \"123 Main St\",\n \"shippingAddress2\": \"Apt 1\",\n \"shippingCity\": \"Anytown\",\n \"shippingCountry\": \"US\",\n \"shippingState\": \"CA\",\n \"shippingZipCode\": \"12345\",\n \"email\": \"john.doe@example.com\",\n \"name\": \"John Doe\",\n \"quickBooksId\": \"quickbooks-customer-id-123\",\n \"stripeId\": \"stripe-customer-id-123\",\n \"xeroId\": \"xero-customer-id-123\"\n}"
response = http.request(request)
puts response.read_body{
"createdAt": "2021-01-01T00:00:00.000Z",
"id": "atlas-internal-customer-id-123",
"updatedAt": "2021-01-01T00:00:00.000Z",
"merchantId": "atlas-internal-merchant-id-123",
"billingAddress1": "123 Main St",
"billingAddress2": "Apt 1",
"billingCity": "Anytown",
"billingCountry": "US",
"billingState": "CA",
"billingZipCode": "12345",
"shippingAddress1": "123 Main St",
"shippingAddress2": "Apt 1",
"shippingCity": "Anytown",
"shippingCountry": "US",
"shippingState": "CA",
"shippingZipCode": "12345",
"email": "john.doe@example.com",
"externalId": "external-customer-id-123",
"name": "John Doe",
"quickBooksId": "quickbooks-customer-id-123",
"stripeId": "stripe-customer-id-123"
}Authorizations
You can obtain this key from the Atlas dashboard. It must be of type secret
Body
The external ID of the customer (e.g. the customer ID in your system)
1"external-customer-id-123"
Billing address line 1
1"123 Main St"
Billing address line 2
1"Apt 1"
Billing city
1"Anytown"
Billing country
1"US"
Billing state
1"CA"
Billing zip code. Must be 5 digits or 5+4 format.
^\d{5}(-\d{4})?$"12345"
Shipping address line 1
1"123 Main St"
Shipping address line 2
1"Apt 1"
Shipping city
1"Anytown"
Shipping country
1"US"
Shipping state
1"CA"
Shipping zip code. Must be 5 digits or 5+4 format.
^\d{5}(-\d{4})?$"12345"
The email of the customer
1"john.doe@example.com"
The name of the customer
1"John Doe"
The QuickBooks ID of the customer
1"quickbooks-customer-id-123"
The Stripe ID of the customer
1"stripe-customer-id-123"
The Xero ID of the customer
1"xero-customer-id-123"
Response
The customer that has been upserted.
The date and time the customer was created
"2021-01-01T00:00:00.000Z"
The Atlas customer ID
1"atlas-internal-customer-id-123"
The date and time the customer was last updated
"2021-01-01T00:00:00.000Z"
The Atlas merchant ID
1"atlas-internal-merchant-id-123"
Billing address line 1
1"123 Main St"
Billing address line 2
1"Apt 1"
Billing city
1"Anytown"
Billing country
1"US"
Billing state
1"CA"
Billing zip code. Must be 5 digits or 5+4 format.
^\d{5}(-\d{4})?$"12345"
Shipping address line 1
1"123 Main St"
Shipping address line 2
1"Apt 1"
Shipping city
1"Anytown"
Shipping country
1"US"
Shipping state
1"CA"
Shipping zip code. Must be 5 digits or 5+4 format.
^\d{5}(-\d{4})?$"12345"
The email of the customer
1"john.doe@example.com"
The external ID of the customer (e.g. the customer ID in your system)
1"external-customer-id-123"
The name of the customer
1"John Doe"
The QuickBooks ID of the customer
1"quickbooks-customer-id-123"
The Stripe ID of the customer
1"stripe-customer-id-123"

