Sending review API
Submit a project's business and sending use case for approval, read the decision, and edit, withdraw or resubmit it.
View as Markdown ↗Project key. Acts in the project the key belongs to. An all-access key works too — name the project with an X-Project-Id header. How keys and scopes work.
Endpoints
/v1/sending-review/v1/sending-review/v1/sending-reviewEvery project's mail is held until Email Bump approves its business and sending use case: campaigns, flows, the emails API and SMTP alike. Until then a send is refused with a 400 saying sending is held for review. A person reads each submission, so approval is not instant.
Transactional API and SMTP sending is approved separately, in the same review, when the use case is mail customers asked for, such as receipts, password resets or support replies. The response's transactional_enabled says whether it was. Marketing also needs verified permission for each recipient, even once the project is approved.
This is the same review as the one in the dashboard's Settings, so a submission made in either place shows in both.
Read the review
GET /v1/sending-review returns where the project's review stands: what was submitted, and the reviewer's decision once there is one.
curl https://emailbump.com/api/v1/sending-review \
-H "Authorization: Bearer ebk_your_key"{
"project_id": "3f6b2a9e-8c41-4d7a-9e15-2b7c4d9a6f30",
"project_name": "SMTP Ghost",
"business_name": "SMTP Ghost",
"status": "changes_requested",
"transactional_enabled": false,
"submission": {
"website": "https://smtpghost.com",
"acquisition": "Recipients are only people who contacted SMTP Ghost support first ...",
"use_case": "Transactional support replies only. Each email answers a message ...",
"evidence_reference": "Every reply is tied to the inbound message the customer sent ...",
"submitted_at": "2026-11-06T15:04:05Z"
},
"decision": {
"status": "changes_requested",
"message": "Tell us how a chat visitor's address is confirmed before the first reply goes out.",
"decided_at": "2026-11-06T18:20:11Z"
},
"subscribed_contacts": 0,
"verified_contacts": 0
}Response fields
project_idstringoptionalThe project the review belongs to.
project_namestringoptionalThe project's name.
business_namestring | nulloptionalThe business the project sends for. Approval is for this name: changing it puts the project back in review. null until it is set.
statusstringoptionalWhere the review stands. See Statuses.
transactional_enabledbooleanoptionalWhether transactional API and SMTP sending was approved too. Only ever true on an approved review.
submissionobject | nulloptionalWhat was submitted: website, acquisition, use_case, evidence_reference and submitted_at. null when nothing has been submitted, or the submission was withdrawn.
decisionobject | nulloptionalThe reviewer's decision: status (approved, changes_requested or rejected), message (what the reviewer wrote to you, or null) and decided_at. Present only when status is one of those three; null while the review is waiting.
subscribed_contactsintegeroptionalContacts in the project who are subscribed.
verified_contactsintegeroptionalHow many of them have verified marketing permission: a confirmed opt-in through an Email Bump form, or original signup records a reviewer checked. Marketing reaches only these.
The project's owners, and whoever submitted the review, are emailed when a decision is made. If you poll instead, every few minutes is plenty: a person makes the decision.
Statuses
not_submitted: nothing has been submitted, or the submission was withdrawn. Sending is held.in_review: submitted and waiting for a reviewer. Sending is held. You can still edit or withdraw it.changes_requested: the reviewer needs more before deciding.decision.messagesays what. Edit the submission and send it again, or withdraw it.approved: the project may send, within normal limits and checks. Transactional API and SMTP sending also needstransactional_enabled.rejected: not approved.decision.messagesays why. You can change the submission and send it again, but not withdraw it: a rejection stays until a new submission replaces it.
Submit, edit or resubmit
POST /v1/sending-review submits the review. The same call edits a submission that is still in review, and resubmits one after changes_requested or rejected. It always replaces the whole submission and puts it back in review, so send every field each time. Sending the same request again while it is in review changes nothing, so a retry is safe. Staff are emailed when it arrives. The account's email address must be confirmed first.
Renaming the project's business (in Settings, or with PATCH /v1/projects/{project_id}) sends an approved or waiting review back to not_submitted, because it was about the old name. Submit again under the new one. A rejection or a request for changes stays as it is.
Body parameters
websitestringrequiredThe business's website, as an https:// URL. 8 to 500 characters.
acquisitionstringrequiredHow each audience gave permission to be emailed: your signup forms, a checkout opt-in, people who contacted you first. Name every imported audience and where it came from. 30 to 4,000 characters.
use_casestringrequiredThe messages you will send and the customer actions that trigger them. Describe transactional mail here too, such as which action sends a receipt or a reply. 30 to 4,000 characters.
evidence_referencestringrequiredWhere the original permission or trigger records are kept, so a reviewer can check them. Never include passwords or access keys. 10 to 2,000 characters.
no_cold_outreachbooleanrequiredMust be true: you will send only to people who asked for mail from this business, and never to purchased, rented, scraped or third-party lists.
business_namestringoptionalThe business the project sends for. Needed only if the project has no business name yet, in which case it is saved. If the project already has a different name, the request is a 409. See Errors.
Here a support tool asks for approval to send transactional replies only:
curl -X POST https://emailbump.com/api/v1/sending-review \
-H "Authorization: Bearer ebk_your_key" \
-H "Content-Type: application/json" \
-d '{
"website": "https://smtpghost.com",
"acquisition": "Recipients are only people who contacted SMTP Ghost support first: through the support chat on smtpghost.com (they enter their email to get a reply, or are signed-in SMTP Ghost customers) or by emailing our support address. No lists, no imports.",
"use_case": "Transactional support replies only. Each email answers a message the recipient just sent us in the support chat or by email, and goes to that one person with Reply-To set to their conversation address on inbox.smtpghost.com. Also internal new-support-message alerts to our own support@smtpghost.com. No marketing, no campaigns, no bulk sends.",
"evidence_reference": "Every reply is tied to the inbound message the customer sent, stored in the SMTP Ghost support inbox (smtpghost.com/support_inbox).",
"no_cold_outreach": true
}'{
"project_id": "3f6b2a9e-8c41-4d7a-9e15-2b7c4d9a6f30",
"project_name": "SMTP Ghost",
"business_name": "SMTP Ghost",
"status": "in_review",
"transactional_enabled": false,
"submission": {
"website": "https://smtpghost.com",
"acquisition": "Recipients are only people who contacted SMTP Ghost support first ...",
"use_case": "Transactional support replies only. Each email answers a message ...",
"evidence_reference": "Every reply is tied to the inbound message the customer sent ...",
"submitted_at": "2026-11-06T15:04:05Z"
},
"decision": null,
"subscribed_contacts": 0,
"verified_contacts": 0
}An approved review can't be edited here, because editing it would hold the project's mail again until it is reviewed. To change an approved review, email support@emailbump.com.
Withdraw a submission
DELETE /v1/sending-review withdraws the submission. The review goes back to not_submitted and the response is the same object as GET. Withdrawing one that is already withdrawn, or was never submitted, succeeds and changes nothing. An approved or rejected review can't be withdrawn, and the request is a 409. Send a new submission to replace a rejection.
curl -X DELETE https://emailbump.com/api/v1/sending-review \
-H "Authorization: Bearer ebk_your_key"Errors
400: a field is missing or outside its length,websiteisn't anhttps://URL,no_cold_outreachisn'ttrue, the project has no business name and none was sent, or the account's email address isn't confirmed yet.409: the review is approved. Editing or withdrawing it would hold sending again, so contact support to change it.409: withdrawing a rejected review. Submit again instead.409:business_namediffers from the project's name. Renaming the business puts the project back in review and revokes the recipient permission recorded for it, so it is never done as a side effect. Change it in Settings, or withPATCH /v1/projects/{project_id}on the Projects API, then submit.
Each error is { "error": "..." } with a message that says what to fix. See the API overview.