Start here
The whole onboarding fits in one call with your partner key: the project, its sending domain with the complete DNS pack, and its sender. You don’t need the customer’s API key to configure them.Compatibility: if you already integrated the previous flow, you don’t need to change anything.
POST /v1/partner/projects with just { "name": "..." } is still valid and returns the same response as always; domain and sender are new, optional fields. The /domains/* endpoints called with the customer’s API key didn’t change either.1
Create the whole customer
With your partner key (Store the
sk_partner_..., issued by RQE when your partner account is enabled):api_key securely: it’s returned only once. The external_key makes the call idempotent — retrying it returns the same project instead of duplicating it.domain and sender go together. SES won’t register a domain without a From address, so sending one without the other returns 400 before anything is created. Every DNS record carries an fqdn, the ready-to-publish name; that’s the one the customer copies.Full reference in Partner / Provisioning.2
Forward the verification link
domain.verification_url is a public page with the customer’s DNS records, copy buttons and a verify button. Your end customer opens it without an RQE account: it’s the only thing you have to send them.If their DNS provider supports Domain Connect, publishing is one click from that same page.This is the step where most integrations stall: the end customer has to touch their DNS. The public link is what helps most — don’t ask them to copy records out of an email from you.
3
Wait for verification
When the customer publishes DNS, you get the
domain.verified webhook — no polling needed. See Webhooks.To force the check when they tell you “it’s configured”:4
Send and measure
With the customer’s And
api_key, send transactional or bulk. To see how each one is doing:GET /v1/partner/projects lists your whole portfolio.Configure a customer that already exists
Everything the full onboarding does can be done later, piece by piece, always with the partner key:
Domain registration never overwrites what already works. If the domain was already registered, the call is idempotent and touches nothing else about the customer. And even for a new domain, it won’t register reply if the customer already has a verified one, nor tracking if one is already configured: registering a reply domain rewrites its status to
pending, which would switch off branded replies for a customer already running them.
Whatever was skipped comes back in the response’s skipped[] array, with its step and reason_code. See Skipped steps.
If your customer doesn’t control their DNS
There is a way out: verify just the mailbox, by email (magic link). You have to ask for it explicitly:422 DOMAIN_NOT_VERIFIED. That’s on purpose.
That requirement belongs only to the new endpoint POST /v1/partner/projects/{id}/senders. If you verify senders today with POST /domains/verify-email and the customer’s API key, that path keeps working the same, with no flag and no such error.
Check your customers’ health
GET /domains/health returns, for every domain in a project: whether it can send, how its authentication looks, how much it sent, how it bounces, and what’s missing — in text you can forward straight to your customer.
GET /v1/partner/projects/{id} returns a health block with status, can_send, hard_bounce_rate and issues. It’s the call you build your customer panel on.
Alternative — several customers in one project
If you’d rather manage a single credential and your customers will never need their own limits or access, you can keep them all inside one project.
In that model registering domains and reply domains works the same, just with your own key. A project can hold several reply domains: each send resolves the one matching the sender’s domain.
To debug a specific customer:
GET /v1/domain-stats — see Activity. GET /domains/health works here too, and returns one entry per customer domain.
With an AI agent (MCP)
Reference
- Domains — registration, verification, health, reply domain and tracking domain.
- Activity —
?sender_domain=and/v1/domain-stats. - Public API — sending.
- Webhooks —
domain.verifiedand email events. - Partner / Provisioning — full reference for
/v1/partner/*: onboarding, domains, senders, API key and error codes.