Create a key to copy examples filled with your team.
Sending
SMTP, HTTP inject, and POST /sends.
SMTP and Kumo HTTP inject stay on the cluster host. POST /emails queues on the team's first sending-ready cluster so the first request does not need a cluster id. POST /sends still targets one cluster. MAIL FROM must be a verified domain. The cluster must be sending_ready. Set unique_args so X-Capsule-Unique-Args lands on the composed mail and comes back on delivery webhooks.
SMTP smtp.postshiba.com:587
AUTH PLAIN after STARTTLS on port 587.
username: Issued on the cluster. Shown as smtp_…password: Shown once when you issue the credentialMAIL FROM: Must be a verified sending domainX-Capsule-Unique-Args: JSON object. Comes back on every delivery webhook. Not added to the sent mail.
POST https://inject.postshiba.com/api/inject/v1
Kumo HTTP inject. HTTP Basic is the SMTP username and password.
envelope_sender: Verified From domaincontent: RFC822 string or {text_body, headers}recipients: [{email}]X-Capsule-Unique-Args: JSON object on content.headers. Stripped before send. Echoed on delivery webhooks.
POST /api/v1/emails
Compose a message and queue it on the team's first sending-ready cluster. Same body as POST /sends. A flat body and {send:} both work. Returns 403 {error: cluster_not_ready, field: cluster} when none is ready.
from: Verified From addressto: Recipient listunique_args: JSON object. Set as X-Capsule-Unique-Args on the composed mail.
POST /api/v1/teams/:team_id/clusters/:cluster_id/sends
Compose a message and queue it on the cluster. sandbox true, "true", or 1 runs the same gates and compose, skips inject, and returns 200 {queued: false, message_id, from, to, subject, unique_args}. Optional Idempotency-Key replays the first 201 for 24 hours. A reused key with a different body is 409 idempotency_conflict. Failures return {error, field, message}. 422 is invalid. 403 is cluster_not_ready, domain_unverified, credential_missing, suppressed, or kyc_required.
from: Verified From addressto: Recipient listunique_args: JSON object. Set as X-Capsule-Unique-Args on the composed mail.sandbox: true, "true", or 1 composes without inject. Success is 200 with queued false. Any other value is a live send.Idempotency-Key: Optional header, 1 to 256 characters. Same key and body returns the first 201 for 24 hours. Same key and a different body is 409.
HEADER X-Capsule-Unique-Args
Tracking fields for delivery webhooks. We strip this header. The keys are flattened onto each SendGrid event and also appear as unique_args. X-SMTPAPI unique_args is accepted the same way.
campaign_id: Your campaign or broadcast idcategory: transactional, newsletter, and the restaccount: Your team or account idsite: Your site or project idtenant_id: On the webhook this stays the PostShiba tenant. Use account or site for your own id.