Skip to content

Provisioning API · Internal testing only

Connect mailboxes to a sequencer

POST
/inboxes/upload
curl --request POST \
--url https://api.builders.ac/api/provisioning/v1alpha1/inboxes/upload \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example' \
--data '{ "workspace_id": "wsp_01k5n2rf8bd3xa9e7m4jt6vq5h", "domain_ids": [ "dom_01k5nb3wz7q2hj8vd4rt6ye9ma" ], "strategy": { "mailboxes_per_domain": 50, "warmup_days": 10, "outreach_per_day": 2 } }'

Connects every created Inbox on the named Domains that is not yet connected to the sequencer those Domains are bound to (PUT /domains/{dom}/sequencer). All Domains must belong to the Workspace and share one sequencer account and workspace; the Inbox set is fixed when the request is accepted and is the Operation’s target. Available only to accounts entitled to Mailbox Upload (422 mailbox_upload_unavailable otherwise). A succeeded Operation connected every Inbox. When only some were connected the Operation fails with inbox_upload_partial (retryable; a retry skips the Inboxes already connected), and with inbox_upload_failed when none were; uploaded and failed say how many, and each Inbox’s own sequencer.state says which.

Idempotency-Key
required
string
>= 1 characters <= 255 characters /^[\x20-\x7E]+$/

A client-generated key containing 1–255 printable ASCII characters (0x20 through 0x7E). Reuse it only for exact retries of one logical request.

Media typeapplication/json
object
workspace_id
required
string
>= 30 characters <= 30 characters /^[wW][sS][pP]_[0-7][0-9a-hjkmnp-tv-zA-HJKMNP-TV-Z]{25}$/
domain_ids
required

Domains in the Workspace whose Inboxes to connect. Every one must be bound to the same sequencer account and workspace.

Array<string>
>= 1 items <= 50 items unique items
strategy

Sending strategy to apply to the Workspace before the upload runs. Omit it to keep the current values; supply only the keys you want changed. Refused with 422 when the Domains belong to a Sender managed outside this API.

object
>= 1 properties
mailboxes_per_domain

Mailboxes each Domain is sized for. Default 50.

integer
Allowed values: 50 75 150
warmup_days

Days of warmup before full sending volume. Default 15.

integer
Allowed values: 10 15 20
outreach_per_day

Outreach emails per Inbox per day once warm. Default 2.

integer
Allowed values: 2 3 4

Inbox upload accepted.

Media typeapplication/json
object
id
required

Canonical lowercase TypeID.

string
>= 29 characters <= 29 characters /^op_[0-7][0-9a-hjkmnp-tv-z]{25}$/
object
required
Allowed value: operation
workspace_id
required

Canonical lowercase TypeID.

string
>= 30 characters <= 30 characters /^wsp_[0-7][0-9a-hjkmnp-tv-z]{25}$/
parent_operation_id

Nearest ancestor public Operation which caused this child Operation. Omitted on root Operations.

string
>= 29 characters <= 29 characters /^op_[0-7][0-9a-hjkmnp-tv-z]{25}$/
type
required
Allowed value: inbox.upload
state
required
string
Allowed value: pending
done
required
target
required
object
object
required
Allowed value: inbox_collection
ids
required
Array<string>
>= 1 items <= 2500 items unique items
metadata
required

uploaded counts target Inboxes the sequencer has confirmed. failed is the remainder once the Operation is done; a succeeded Operation may still report uploaded below requested when the sequencer skipped some Inboxes.

object
provider
required
string
Allowed values: smartlead instantly plusvibe bison other
sequencer_workspace
required
string
>= 1 characters <= 255 characters
requested
required
integer
>= 1 <= 2500
uploaded
required
integer
<= 2500
failed
required
integer
<= 2500
created_at
required
string format: date-time
started_at
string format: date-time
finished_at
string format: date-time
cancel_requested_at

Cancellation was requested. It is honoured only at a safe boundary, so keep polling state and done to learn whether it took effect.

string format: date-time
update_by_date
required

Next date by which meaningful progress should be visible.

string format: date-time
completion_by_date
required

Public completion SLA for this Operation.

string format: date-time
Example
{
"id": "op_01k5nd7v2qe9ma4bt3rz8hy6xw",
"object": "operation",
"workspace_id": "wsp_01k5n2rf8bd3xa9e7m4jt6vq5h",
"parent_operation_id": "op_01k5nf4b8yt3qd7vm2ae9rz6hx",
"type": "inbox.upload",
"state": "pending",
"done": false,
"target": {
"object": "inbox_collection",
"ids": [
"inb_01k5nc9te4vr7bd2hq8ym3xz6a"
]
},
"metadata": {
"provider": "smartlead",
"sequencer_workspace": "Northwind Outbound",
"requested": 3,
"uploaded": 3,
"failed": 0
},
"created_at": "2026-04-15T09:15:04Z",
"update_by_date": "2026-04-15T09:45:04Z",
"completion_by_date": "2026-04-15T10:15:04Z"
}
Location
string

Canonical URL of the Operation.

Idempotency-Replayed
string
Allowed value: true

Present with value true only for a stored exact replay.

x-correlation-id
string

The id of this request, echoed on every response and repeated in the correlation_id member of a problem body. Quote it in support requests.

Idempotency key required. The example shows idempotency_key_required.

Media typeapplication/problem+json
object
type
required
string format: uri-reference
title
required
string
status
required
integer
detail
required
string
code
required

Extensible enum. Branch on this, never on title. New codes may appear at any time, so treat an unrecognised one as its HTTP status; GET /problems lists every code this version can answer with, and GET /problems/{code} resolves one.

string
retryable
required
boolean
retry_after
string format: date-time
correlation_id
required
string
errors
object
key
additional properties
Array<string>
Example
{
"type": "https://api.builders.ac/api/provisioning/v1alpha1/problems/idempotency_key_required",
"title": "Idempotency key required",
"status": 400,
"detail": "This request requires a valid Idempotency-Key header.",
"code": "idempotency_key_required",
"retryable": false,
"correlation_id": "9f1c2b7a-3d5e-4c81-9a77-2f6b0e4d51c3"
}
x-correlation-id
string

The id of this request, echoed on every response and repeated in the correlation_id member of a problem body. Quote it in support requests.

Authentication required. The example shows authentication_required; this status is also answered with invalid_api_key. Branch on code, not on the status.

Media typeapplication/problem+json
object
type
required
string format: uri-reference
title
required
string
status
required
integer
detail
required
string
code
required

Extensible enum. Branch on this, never on title. New codes may appear at any time, so treat an unrecognised one as its HTTP status; GET /problems lists every code this version can answer with, and GET /problems/{code} resolves one.

string
retryable
required
boolean
retry_after
string format: date-time
correlation_id
required
string
errors
object
key
additional properties
Array<string>
Example
{
"type": "https://api.builders.ac/api/provisioning/v1alpha1/problems/authentication_required",
"title": "Authentication required",
"status": 401,
"detail": "Provide an active Provisioning API Key as a Bearer token.",
"code": "authentication_required",
"retryable": false,
"correlation_id": "9f1c2b7a-3d5e-4c81-9a77-2f6b0e4d51c3"
}
x-correlation-id
string

The id of this request, echoed on every response and repeated in the correlation_id member of a problem body. Quote it in support requests.

Account inactive. The example shows account_inactive; this status is also answered with insufficient_proof. Branch on code, not on the status.

Media typeapplication/problem+json
object
type
required
string format: uri-reference
title
required
string
status
required
integer
detail
required
string
code
required

Extensible enum. Branch on this, never on title. New codes may appear at any time, so treat an unrecognised one as its HTTP status; GET /problems lists every code this version can answer with, and GET /problems/{code} resolves one.

string
retryable
required
boolean
retry_after
string format: date-time
correlation_id
required
string
errors
object
key
additional properties
Array<string>
Example
{
"type": "https://api.builders.ac/api/provisioning/v1alpha1/problems/account_inactive",
"title": "Account inactive",
"status": 403,
"detail": "This account is inactive.",
"code": "account_inactive",
"retryable": false,
"correlation_id": "9f1c2b7a-3d5e-4c81-9a77-2f6b0e4d51c3"
}
x-correlation-id
string

The id of this request, echoed on every response and repeated in the correlation_id member of a problem body. Quote it in support requests.

Not found. The example shows not_found.

Media typeapplication/problem+json
object
type
required
string format: uri-reference
title
required
string
status
required
integer
detail
required
string
code
required

Extensible enum. Branch on this, never on title. New codes may appear at any time, so treat an unrecognised one as its HTTP status; GET /problems lists every code this version can answer with, and GET /problems/{code} resolves one.

string
retryable
required
boolean
retry_after
string format: date-time
correlation_id
required
string
errors
object
key
additional properties
Array<string>
Example
{
"type": "https://api.builders.ac/api/provisioning/v1alpha1/problems/not_found",
"title": "Not found",
"status": 404,
"detail": "The requested resource was not found.",
"code": "not_found",
"retryable": false,
"correlation_id": "9f1c2b7a-3d5e-4c81-9a77-2f6b0e4d51c3"
}
x-correlation-id
string

The id of this request, echoed on every response and repeated in the correlation_id member of a problem body. Quote it in support requests.

Inbox upload was refused atomically. The problem code identifies the eligibility, overlapping-operation, workspace, or idempotency boundary.

Media typeapplication/problem+json
One of:
object
type
required
string format: uri-reference
title
required
string
status
required
integer
detail
required
string
code
required

Extensible enum. Branch on this, never on title. New codes may appear at any time, so treat an unrecognised one as its HTTP status; GET /problems lists every code this version can answer with, and GET /problems/{code} resolves one.

string
retryable
required
boolean
retry_after
string format: date-time
correlation_id
required
string
errors
object
key
additional properties
Array<string>
type
required
title
required
Allowed value: No inboxes to upload
status
required
Allowed value: 409
code
required
Allowed value: no_inboxes_to_upload
retryable
required
detail
required
Allowed value: Every created inbox on these domains is already connected to the sequencer. Create more inboxes, or wait for pending ones to finish provisioning, then retry with a new Idempotency-Key.
Examples

No inboxes to upload

{
"type": "https://api.builders.ac/api/provisioning/v1alpha1/problems/no_inboxes_to_upload",
"title": "No inboxes to upload",
"status": 409,
"detail": "Every created inbox on these domains is already connected to the sequencer. Create more inboxes, or wait for pending ones to finish provisioning, then retry with a new Idempotency-Key.",
"code": "no_inboxes_to_upload",
"retryable": false,
"correlation_id": "9f1c2b7a-3d5e-4c81-9a77-2f6b0e4d51c3"
}
x-correlation-id
string

The id of this request, echoed on every response and repeated in the correlation_id member of a problem body. Quote it in support requests.

The request is well-formed but cannot be acted on: the account is not entitled to Mailbox Upload, some Domains have no sequencer binding (domain_ids lists them), the Domains are bound to different targets, or a field is invalid.

Media typeapplication/problem+json
One of:
object
type
required
string format: uri-reference
title
required
string
status
required
integer
detail
required
string
code
required

Extensible enum. Branch on this, never on title. New codes may appear at any time, so treat an unrecognised one as its HTTP status; GET /problems lists every code this version can answer with, and GET /problems/{code} resolves one.

string
retryable
required
boolean
retry_after
string format: date-time
correlation_id
required
string
errors
object
key
additional properties
Array<string>
type
required
title
required
Allowed value: Mailbox Upload unavailable
status
required
Allowed value: 422
code
required
Allowed value: mailbox_upload_unavailable
retryable
required
detail
required
Allowed value: Mailbox Upload is not available for this product. Contact your deliverability advisor to discuss.
Examples

Mailbox Upload unavailable

{
"type": "https://api.builders.ac/api/provisioning/v1alpha1/problems/mailbox_upload_unavailable",
"title": "Mailbox Upload unavailable",
"status": 422,
"detail": "Mailbox Upload is not available for this product. Contact your deliverability advisor to discuss.",
"code": "mailbox_upload_unavailable",
"retryable": false,
"correlation_id": "9f1c2b7a-3d5e-4c81-9a77-2f6b0e4d51c3"
}
x-correlation-id
string

The id of this request, echoed on every response and repeated in the correlation_id member of a problem body. Quote it in support requests.

Rate limit exceeded. The example shows rate_limit_exceeded.

Media typeapplication/problem+json
object
type
required
string format: uri-reference
title
required
string
status
required
integer
detail
required
string
code
required

Extensible enum. Branch on this, never on title. New codes may appear at any time, so treat an unrecognised one as its HTTP status; GET /problems lists every code this version can answer with, and GET /problems/{code} resolves one.

string
retryable
required
boolean
retry_after
string format: date-time
correlation_id
required
string
errors
object
key
additional properties
Array<string>
Example
{
"type": "https://api.builders.ac/api/provisioning/v1alpha1/problems/rate_limit_exceeded",
"title": "Rate limit exceeded",
"status": 429,
"detail": "Too many requests were made for this policy.",
"code": "rate_limit_exceeded",
"retryable": true,
"correlation_id": "9f1c2b7a-3d5e-4c81-9a77-2f6b0e4d51c3",
"retry_after": "2026-04-15T09:16:04Z"
}
x-correlation-id
string

The id of this request, echoed on every response and repeated in the correlation_id member of a problem body. Quote it in support requests.

Service unavailable. The example shows service_unavailable; this status is also answered with encryption_keys_unavailable, provider_unreachable. Branch on code, not on the status.

Media typeapplication/problem+json
object
type
required
string format: uri-reference
title
required
string
status
required
integer
detail
required
string
code
required

Extensible enum. Branch on this, never on title. New codes may appear at any time, so treat an unrecognised one as its HTTP status; GET /problems lists every code this version can answer with, and GET /problems/{code} resolves one.

string
retryable
required
boolean
retry_after
string format: date-time
correlation_id
required
string
errors
object
key
additional properties
Array<string>
Example
{
"type": "https://api.builders.ac/api/provisioning/v1alpha1/problems/service_unavailable",
"title": "Service unavailable",
"status": 503,
"detail": "Retry the request later; the service is temporarily unavailable.",
"code": "service_unavailable",
"retryable": true,
"correlation_id": "9f1c2b7a-3d5e-4c81-9a77-2f6b0e4d51c3"
}
x-correlation-id
string

The id of this request, echoed on every response and repeated in the correlation_id member of a problem body. Quote it in support requests.