Skip to content
Esc
  • OverviewGuidesWhat exists today, and where to start.
  • QuickstartGuidesKey, domain, first send — in that order.
  • AuthenticationGuidesBearer keys, the mandatory User-Agent, and what each refusal means.
  • ErrorsGuidesThe whole vocabulary, with the status each name carries.
  • IdempotencyGuidesRetry a send without sending it twice.
  • PaginationGuidesCursors are item IDs, not page numbers.
  • Rate limitsGuidesTen a second per team, and the headers that tell you where you are.
  • EventsGuidesEvery event a webhook can carry, with one real payload each.
  • DomainsGuidesThe records, where they go at each registrar, and what the page does while you wait.
  • TrackingGuidesOpens and clicks: one record, two toggles, and what an open really means.
  • ReceivingGuidesInbound mail, and the Inbox: a webhook fires, you read it, you answer it.
  • InboxGuidesChannels, personal mailboxes and seats: who sees what, and where a reply goes.
  • Node SDKGuidesThe rasket package: typed from the API's own document, retries only what is safe.
  • Python SDKGuidesThe rasket package on PyPI: the Node client's methods, in snake_case, over httpx.
  • MCP serverGuidesConnect Claude, ChatGPT or any MCP client: your scopes, no key.
  • AI assistGuidesSubject lines, drafts and diagnosis — in the dashboard and over the API, off until you allow it.
  • AgentsGuidesLet an AI agent set Rasket up: the skill, the rules file, MCP, and the recipe they share.
  • OAuthGuidesLet another app act for a team: register, authorize with PKCE, exchange, refresh.
  • Single sign-onGuidesOIDC login for your team, a domain proved by DNS, enforcement and break-glass.
  • IntegrationsGuidesVercel, Netlify and Cloudflare, plus Zapier and n8n for workflows without code.
  • SMTPGuidesSend from anything that speaks SMTP: settings, setup guides, limits and replies.
  • ZapierGuidesSend email, add contacts and react to email events from a Zap, with no code.
  • n8nGuidesThe Rasket node and trigger for n8n workflows: install, connect, every operation.
  • VercelGuidesAdd Rasket on Vercel: a Sending key in each project as RASKET_API_KEY, no copying.
  • EmailsAPI referenceSend, batch, retrieve, list, reschedule, cancel, attachments.
  • DomainsAPI referenceAdd a domain, publish its records, verify it.
  • API keysAPI referenceCreate, list, rename and revoke credentials.
  • WebhooksAPI referencePayloads, signature verification, retries and replay.
  • SuppressionsAPI referenceAddresses we will not send to, and why.
  • LogsAPI referenceEvery request made with this team's credentials.
  • MetricsAPI referenceDelivery, bounce, complaint and engagement counts.
  • TemplatesAPI referenceVersioned email content with typed variables, addressed by ID or alias.
  • ContactsAPI referenceYour audience: contacts, their typed properties, segments and topic choices.
  • SegmentsAPI referenceAudiences defined by a filter, by hand, or both.
  • TopicsAPI referenceWhat contacts subscribe to, and the preference page's list.
  • CampaignsAPI referenceCampaigns, at /broadcasts: one message to a segment, from draft to results.
  • ImportsAPI referenceCSV uploads: column mapping, conflicts and counts.
  • AutomationsAPI referenceWorkflows that run per contact: the graph, its versions, and every run.
  • Custom eventsAPI referenceThe names your product fires, and what starts a workflow.
  • ReceivingAPI referenceMail sent to you: the message, its attachments, its raw source.
  • OAuthAPI referenceClient registration, the token endpoint, and the grants a team has given.
  • TeamAPI referenceThe team a credential belongs to: its plan, sender identity, AI flag and members.
  • BillingAPI referencePlan, usage, invoices and add-ons, and the hosted pages where a customer pays.
  • AI helpersAPI referenceSubject lines, a first draft, and why an email did what it did.

API referenceSuppressions

Suppressions

The addresses this team will not send to, and the reason each one is on the list.

Why the list exists

Sending again to an address that hard-bounced or reported you as spam is the fastest way to lose the ability to send at all. So a suppressed address is skipped before the message is handed to the mail provider: the send is recorded as email.suppressed rather than delivered, and your webhook is told which address and why.

Suppression origins
OriginMeans
bounceA hard bounce. The mailbox does not exist or refused us permanently.
complaintThe recipient marked a message as spam.
manualYou added it, through the API or the dashboard.
unsubscribeThe recipient unsubscribed through the link in a message.

Working with the list

  • Suppressions are per team, not per domain or per key.
  • Retrieving by address — GET /suppressions/{address} — answers "may I send to this person?" without listing anything.
  • Removing a suppression a bounce created will send to an address that already rejected you. Do it when you know the mailbox is back, not to clear a number.

Endpoints

Suppress an address

POST /suppressions

Stop sending to one address.

Body

  • emailstringRequired

    The address to suppress.

Request

curl -X POST "https://api.rasket.com/suppressions" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "ronald.williams@example.com"
}'

Response 201

{
  "object": "suppression",
  "id": "2c9a7f10-b4e8-4d61-8a3c-5f7b9e1d2a06"
}
  • A suppression added this way has origin: manual. Hard bounces and complaints add their own with origin: bounce or complaint.
  • Suppressions are per team. A send to a suppressed address is recorded as email.suppressed rather than delivered.

List suppressions

GET /suppressions

Every suppressed address, newest first.

Query parameters

  • originstring

    Filter by bounce, complaint, manual or unsubscribe.

  • searchstring

    Case-insensitive substring of the address. % and _ match literally. 1–200 characters.

  • start_datestring

    ISO 8601, inclusive. Suppressions added before this are excluded.

  • end_datestring

    ISO 8601, inclusive. Suppressions added after this are excluded.

  • limitinteger

    How many items to return, 1–100. Defaults to 20.

  • afterstring

    Return the page that follows this item ID. Mutually exclusive with before.

  • beforestring

    Return the page that precedes this item ID. Mutually exclusive with after.

Request

curl -X GET "https://api.rasket.com/suppressions?origin=bounce&limit=20" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0"

Response 200

{
  "object": "list",
  "has_more": false,
  "data": [
    {
      "id": "2c9a7f10-b4e8-4d61-8a3c-5f7b9e1d2a06",
      "email": "ronald.williams@example.com",
      "origin": "bounce",
      "source_id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c",
      "created_at": "2026-09-09T10:16:44.902Z"
    }
  ]
}
  • source_id names the email that caused the suppression, when one did.

Retrieve a suppression

GET /suppressions/{suppression}

Look one up by ID or by address.

Path parameters

  • suppressionstringRequired

    Either the suppression's ID or the suppressed email address.

Request

curl -X GET "https://api.rasket.com/suppressions/ronald.williams@example.com" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0"

Response 200

{
  "object": "suppression",
  "id": "2c9a7f10-b4e8-4d61-8a3c-5f7b9e1d2a06",
  "email": "ronald.williams@example.com",
  "origin": "bounce",
  "source_id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c",
  "created_at": "2026-09-09T10:16:44.902Z"
}
  • Passing an address is the useful form: it answers "may I send to this person?" without listing anything.

Remove a suppression

DELETE /suppressions/{suppression}

Allow sending to the address again.

Path parameters

  • suppressionstringRequired

    Either the suppression's ID or the suppressed email address.

Request

curl -X DELETE "https://api.rasket.com/suppressions/ronald.williams@example.com" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0"

Response 200

{
  "object": "suppression",
  "id": "2c9a7f10-b4e8-4d61-8a3c-5f7b9e1d2a06",
  "deleted": true
}
  • Removing a suppression a hard bounce created will send to an address that already rejected you once. Do it only when you know the mailbox is back.

Add suppressions in bulk

POST /suppressions/batch/add

Up to 100 addresses in one request.

Body

  • emailsstring[]Required

    The addresses to suppress, 100 at most.

Request

curl -X POST "https://api.rasket.com/suppressions/batch/add" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0" \
  -H "Content-Type: application/json" \
  -d '{
  "emails": ["ronald.williams@example.com", "ada@example.com"]
}'

Response 201

{
  "data": [
    {
      "object": "suppression",
      "id": "2c9a7f10-b4e8-4d61-8a3c-5f7b9e1d2a06"
    },
    {
      "object": "suppression",
      "id": "71f0c4b2-ad3e-4f18-9c07-5b2e8d1a6f94"
    }
  ]
}
  • An address already suppressed is left as it is rather than duplicated or refused.

Remove suppressions in bulk

POST /suppressions/batch/remove

Up to 100 at once, by address or by ID.

Body

  • emailsstring[]

    Addresses to unsuppress. Send this or ids, never both.

  • idsstring[]

    Suppression IDs to remove. Send this or emails, never both.

Request

curl -X POST "https://api.rasket.com/suppressions/batch/remove" \
  -H "Authorization: Bearer $RASKET_API_KEY" \
  -H "User-Agent: acme-billing/1.0" \
  -H "Content-Type: application/json" \
  -d '{
  "emails": ["ronald.williams@example.com"]
}'

Response 200

{
  "data": [
    {
      "object": "suppression",
      "id": "2c9a7f10-b4e8-4d61-8a3c-5f7b9e1d2a06",
      "deleted": true
    }
  ]
}
  • Send emails or ids — sending both, or neither, is 422 invalid_parameter.
  • An address that is not currently suppressed is skipped rather than refused.