List add-ons
What can be bought on top of the plan: today, a dedicated sending IP.
Runs any of 3 calls on your workspace.
GET /billing/add-ons
What can be bought on top of the plan: today, a dedicated sending IP.
Example
Needs billing:read. eligibility says whether the workspace qualifies for a dedicated IP. It takes the Business or Enterprise plan and at least 100,000 emails sent in a month, because below that volume a dedicated IP delivers worse than the shared ones. reason names what is missing, plan or volume.
curl "$OE/billing/add-ons" -H "$AUTH"{ "object": "list", "data": [{ "object": "add_on", "addOn": "dedicated-ip", "available": true, "status": null, "priceCents": 3999, "endsAt": null, "eligibility": { "eligible": false, "plan": "business", "monthlySends": 41200, "minimumMonthlySends": 100000, "reason": "volume" }, "ips": []}] }status is null until the workspace has the add-on, then pending while it is set up, warming, active, and releasing once it is being taken down.
Only the owner of the workspace reaches billing: an API key, or an access token the owner connected with every address. A member’s token is a 403 owner_only, and a key or token limited to particular addresses or domains is a 422 capability_unsupported.
Buy it
Needs billing:write. POST /billing/add-ons/checkout returns the link where the person pays. Once it is paid, the IP is set up and warmed up.
curl -X POST "$OE/billing/add-ons/checkout" -H "$AUTH" -H 'content-type: application/json' \ -d '{ "addOn": "dedicated-ip" }'{ "object": "add_on_checkout", "addOn": "dedicated-ip", "url": "https://checkout.example.com/c/9Tn4wRb1xK7pQ2zd" }A workspace that already has it is a 409 add_on_already_active, one that does not qualify is a 409 add_on_not_eligible, and when every IP is taken it is a 409 add_on_sold_out.
Nothing is paid through the API. The link opens the billing provider’s page, where the person pays, changes the card or cancels, as they do from the app.
An OAuth access token needs a verification code for this call. Until the app has verified one in the last 60 minutes, the call answers 403 step_up_required and changes nothing. An API key is never asked. The Authentication page shows how to ask for a code and verify it.
Cancel it
Needs billing:write. DELETE /billing/add-ons/dedicated-ip cancels it at the end of the month already paid for, which endsAt gives. Then the IP is released and mail leaves through the shared IPs again.
curl -X DELETE "$OE/billing/add-ons/dedicated-ip" -H "$AUTH"{ "object": "add_on", "addOn": "dedicated-ip", "status": "active", "endsAt": "2026-11-01T00:00:00.000Z" }A workspace without the add-on is a 409 add_on_not_active.
An OAuth access token needs a verification code for this call. Until the app has verified one in the last 60 minutes, the call answers 403 step_up_required and changes nothing. An API key is never asked. The Authentication page shows how to ask for a code and verify it.