Guide
Provision mailboxes
The Provisioning API lets integration partners white-label mailbox provisioning for their own end customers. You create senders and connect domains; the platform handles Microsoft 365 tenant setup, DNS configuration and mailbox creation.
- Base URL
https://live-api.customers.ac/v1- Key
sac_live_… / sac_test_…Scoped per operation. Sandbox provisions nothing.
The object model
Section titled “The object model”| Object | What it is |
|---|---|
| User | an end customer on your platform |
| Sender | a logical grouping of domains and mailboxes belonging to a user |
| Domain | a domain connected to the platform |
| Mailbox | an individual email account with IMAP/SMTP credentials |
| Operation | every write returns an operation_id you can poll or receive by webhook |
Everything is asynchronous
Section titled “Everything is asynchronous”A POST that triggers infrastructure changes returns immediately with status: "pending"
and an operation_id. It has not happened yet. Poll
GET /operations/{id} to track progress, or
take the webhook.
This is the part most integrations get wrong: treating the 201 as completion. The
mailbox does not exist until the operation says so.
The path through
Section titled “The path through”- Create a user —
POST /users— one per end customer on your platform. - Create a sender —
POST /senders— the grouping that domains and mailboxes hang off. - Connect a domain. The platform assigns nameservers in response.
- Update the registrar with those nameservers, then wait for propagation — up to 48 hours. Nothing you can do shortens this.
- M365 is provisioned automatically once propagation completes. You do not call anything to trigger it.
- Read the mailboxes —
GET /senders/{id}/mailboxes— and their credentials when you need IMAP/SMTP details.
Step 4 is the long pole and it is outside the API. Design your onboarding so a customer can leave and come back rather than watching a spinner.
Pagination
Section titled “Pagination”List endpoints are cursor-based. Pass page[size] (max 100, default 25) and page[after],
an opaque cursor taken from a previous response.
Tearing down
Section titled “Tearing down”Deprovisioning is explicit and separate per level:
Both are writes, so both return an operation_id and complete asynchronously like
everything else.
Sandbox
Section titled “Sandbox”Sandbox keys (sac_test_…) run against https://sandbox-api.customers.ac/v1, where no
real infrastructure is provisioned and operations complete instantly. That makes it the
right place to exercise the async polling flow without waiting on DNS propagation or M365.