Provisioning API
Create a user
const url = 'https://live-api.customers.ac/v1/users';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"email":"jane@acme.com","company":"Acme Corp","name":"Jane Doe","external_id":"cust_8hTk2mN"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://live-api.customers.ac/v1/users \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "email": "jane@acme.com", "company": "Acme Corp", "name": "Jane Doe", "external_id": "cust_8hTk2mN" }'Creates a new end customer. The external_id field is optional and can be used to store your platform’s internal identifier for this customer.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
The user’s email address. Must be unique across your partner account.
The user’s full name.
The user’s company or organization name.
An optional identifier from your system.
Example
{ "email": "jane@acme.com", "company": "Acme Corp", "name": "Jane Doe", "external_id": "cust_8hTk2mN"}Responses
Section titled “Responses”User created.
object
object
Unique identifier for the user.
The user’s email address. Must be unique across your partner account.
The user’s full name.
The user’s company or organization name.
An optional identifier from your system. Useful for correlating sending.ac users with your own customer records.
Number of senders belonging to this user.
When the user was created.
When the user was last updated.
Example
{ "data": { "id": "usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890", "email": "jane@acme.com", "name": "Jane Doe", "company": "Acme Corp", "external_id": "cust_8hTk2mN", "senders_count": 2, "created_at": "2026-03-20T09:00:00Z", "updated_at": "2026-03-20T09:00:00Z" }}The request body failed validation.
object
object
A machine-readable error code.
A human-readable explanation of the error.
A link to the documentation page for this error code.
For validation errors, a list of individual field-level problems.
object
The field that caused the error, in dot notation.
A machine-readable code for this specific validation issue.
A human-readable explanation.
Example
{ "error": { "code": "validation.required_field", "message": "The request body is missing required fields.", "doc_url": "https://docs.sending.ac/errors/validation-required-field", "details": [ { "field": "email", "code": "validation.required_field", "message": "This field is required." } ] }}Authentication failed. The API key is missing or invalid.
object
object
A machine-readable error code.
A human-readable explanation of the error.
A link to the documentation page for this error code.
For validation errors, a list of individual field-level problems.
object
The field that caused the error, in dot notation.
A machine-readable code for this specific validation issue.
A human-readable explanation.
Examples
No API key provided
{ "error": { "code": "auth.missing_key", "message": "No API key was provided. Include your key in the Authorization header: Bearer sac_live_xxxxx.", "doc_url": "https://docs.sending.ac/errors/auth-missing-key" }}Invalid API key
{ "error": { "code": "auth.invalid_key", "message": "The API key provided is invalid or has been revoked.", "doc_url": "https://docs.sending.ac/errors/auth-invalid-key" }}The API key does not have the required scope for this operation.
object
object
A machine-readable error code.
A human-readable explanation of the error.
A link to the documentation page for this error code.
For validation errors, a list of individual field-level problems.
object
The field that caused the error, in dot notation.
A machine-readable code for this specific validation issue.
A human-readable explanation.
Example
{ "error": { "code": "auth.insufficient_scope", "message": "Your API key does not have the 'senders:write' scope required for this operation.", "doc_url": "https://docs.sending.ac/errors/auth-insufficient-scope" }}The resource already exists.
object
object
A machine-readable error code.
A human-readable explanation of the error.
A link to the documentation page for this error code.
For validation errors, a list of individual field-level problems.
object
The field that caused the error, in dot notation.
A machine-readable code for this specific validation issue.
A human-readable explanation.
Example
{ "error": { "code": "resource.already_exists", "message": "A user with email jane@acme.com already exists.", "doc_url": "https://docs.sending.ac/errors/resource-already-exists" }}You have exceeded the rate limit. Wait and retry.
object
object
A machine-readable error code.
A human-readable explanation of the error.
A link to the documentation page for this error code.
For validation errors, a list of individual field-level problems.
object
The field that caused the error, in dot notation.
A machine-readable code for this specific validation issue.
A human-readable explanation.
Example
{ "error": { "code": "rate.quota_exceeded", "message": "Rate limit exceeded. You may make 120 requests per minute. Retry after 30 seconds.", "doc_url": "https://docs.sending.ac/errors/rate-quota-exceeded" }}Headers
Section titled “Headers”Example
30Number of seconds to wait before retrying.
Example
120The maximum number of requests allowed per minute.
Example
0The number of requests remaining in the current window.
Example
1711267260Unix timestamp when the rate limit window resets.