10 operations. Guide: Receive email on your domain. Requests and responses are JSON with snake_case fields; authenticate with Authorization: Bearer <api key>. The examples assume a client built as in SDKs and the command line.

List inbound routing rules

GET /v1/inbound/routes

Operation listInboundRoutes, SDK minket.inbound.routes.list. Keys: full access. Test keys work on test-mode data.

Response

200 Success: object.

FieldTypeRequiredDescription
object"list"yes
dataarray of objectyes
data[].idstringyesA UUID.
data[].object"route"yes
data[].project_idstringyesA UUID.
data[].domain_idstringyesA UUID.
data[].matchobjectyes
data[].match (shape 1).type"address"yes
data[].match (shape 1).local_partstringyes1 to 64 characters.
data[].match (shape 2).type"plus"yes
data[].match (shape 2).local_partstringyes1 to 64 characters.
data[].match (shape 3).type"catchall"yes
data[].actionobjectyes
data[].action (shape 1).type"webhook"yes
data[].action (shape 1).webhook_idstringyesA UUID.
data[].action (shape 2).type"forward"yes
data[].action (shape 2).toarray of stringyesAt most 5 items.
data[].action (shape 3).type"store"yes
data[].spam_handlingone of "flag", "drop", "quarantine"yes
data[].enabledbooleanyes
data[].created_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
has_morebooleanyes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl https://api.minket.com/v1/inbound/routes \
  -H "Authorization: Bearer $MINKET_API_KEY"

Create an inbound routing rule

POST /v1/inbound/routes

An exact address, a plus-address base (support matches support+anything@) or the catch-all, to a webhook endpoint of the project, confirmed forwarding addresses, or storage only. Mail no rule matches goes to every endpoint subscribed to email.received.

Operation createInboundRoute, SDK minket.inbound.routes.create. Keys: full access. Live keys only: test keys get 403 test_mode_only.

Request body

FieldTypeRequiredDescription
domain_idstringyesA UUID.
matchobjectyes
match (shape 1).type"address"yes
match (shape 1).local_partstringyes1 to 64 characters.
match (shape 2).type"plus"yes
match (shape 2).local_partstringyes1 to 64 characters.
match (shape 3).type"catchall"yes
actionobjectyes
action (shape 1).type"webhook"yes
action (shape 1).webhook_idstringyesA UUID.
action (shape 2).type"forward"yes
action (shape 2).toarray of stringyesAt most 5 items.
action (shape 3).type"store"yes
spam_handlingone of "flag", "drop", "quarantine"noDefault "flag".
enabledbooleannoDefault true.

Response

201 Created: object.

FieldTypeRequiredDescription
idstringyesA UUID.
object"route"yes
project_idstringyesA UUID.
domain_idstringyesA UUID.
matchobjectyes
match (shape 1).type"address"yes
match (shape 1).local_partstringyes1 to 64 characters.
match (shape 2).type"plus"yes
match (shape 2).local_partstringyes1 to 64 characters.
match (shape 3).type"catchall"yes
actionobjectyes
action (shape 1).type"webhook"yes
action (shape 1).webhook_idstringyesA UUID.
action (shape 2).type"forward"yes
action (shape 2).toarray of stringyesAt most 5 items.
action (shape 3).type"store"yes
spam_handlingone of "flag", "drop", "quarantine"yes
enabledbooleanyes
created_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl -X POST https://api.minket.com/v1/inbound/routes \
  -H "Authorization: Bearer $MINKET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain_id":"019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b","match":{"type":"address","local_part":"support"},"action":{"type":"store"}}'

Update an inbound routing rule

PATCH /v1/inbound/routes/{id}

Operation updateInboundRoute, SDK minket.inbound.routes.update. Keys: full access. Live keys only: test keys get 403 test_mode_only.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.

Request body

FieldTypeRequiredDescription
matchobjectno
match (shape 1).type"address"yes
match (shape 1).local_partstringyes1 to 64 characters.
match (shape 2).type"plus"yes
match (shape 2).local_partstringyes1 to 64 characters.
match (shape 3).type"catchall"yes
actionobjectno
action (shape 1).type"webhook"yes
action (shape 1).webhook_idstringyesA UUID.
action (shape 2).type"forward"yes
action (shape 2).toarray of stringyesAt most 5 items.
action (shape 3).type"store"yes
spam_handlingone of "flag", "drop", "quarantine"no
enabledbooleanno

Response

200 Success: object.

FieldTypeRequiredDescription
idstringyesA UUID.
object"route"yes
project_idstringyesA UUID.
domain_idstringyesA UUID.
matchobjectyes
match (shape 1).type"address"yes
match (shape 1).local_partstringyes1 to 64 characters.
match (shape 2).type"plus"yes
match (shape 2).local_partstringyes1 to 64 characters.
match (shape 3).type"catchall"yes
actionobjectyes
action (shape 1).type"webhook"yes
action (shape 1).webhook_idstringyesA UUID.
action (shape 2).type"forward"yes
action (shape 2).toarray of stringyesAt most 5 items.
action (shape 3).type"store"yes
spam_handlingone of "flag", "drop", "quarantine"yes
enabledbooleanyes
created_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl -X PATCH https://api.minket.com/v1/inbound/routes/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b \
  -H "Authorization: Bearer $MINKET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"enabled":false}'

Delete an inbound routing rule

DELETE /v1/inbound/routes/{id}

Operation deleteInboundRoute, SDK minket.inbound.routes.delete. Keys: full access. Live keys only: test keys get 403 test_mode_only.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.

Response

200 Success: object.

FieldTypeRequiredDescription
idstringyesA UUID.
object"route"yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl -X DELETE https://api.minket.com/v1/inbound/routes/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b \
  -H "Authorization: Bearer $MINKET_API_KEY"

List received messages

GET /v1/inbound

Operation listInbound, SDK minket.inbound.list. Keys: full access, inbound read. Test keys work on test-mode data.

Parameters

NameInTypeRequiredDescription
limitqueryintegerno Default 20.
afterquerystringnoA UUID.
beforequerystringnoA UUID.
domain_idquerystringnoA UUID.
fromquerystringno
toquerystringno
statusqueryone of "received", "routed", "forwarded", "dropped", "quarantined"no
spamquerybooleanno

Response

200 Success: object.

FieldTypeRequiredDescription
object"list"yes
dataarray of objectyes
data[].idstringyesA UUID.
data[].object"inbound"yes
data[].project_idstringyesA UUID.
data[].domain_idstring or nullyesA UUID.
data[].fromstringyes
data[].toarray of stringyes
data[].ccarray of stringyes
data[].bccarray of stringyes
data[].reply_toarray of stringyes
data[].received_forarray of stringyes
data[].subjectstringyes
data[].message_idstringyes
data[].in_reply_tostring or nullyes
data[].attachmentsarray of objectyes
data[].attachments[].idstringyesA UUID.
data[].attachments[].object"attachment"yes
data[].attachments[].filenamestring or nullyes
data[].attachments[].content_typestringyes
data[].attachments[].sizeintegeryes
data[].attachments[].content_idstring or nullyes
data[].attachments[].dispositionone of "attachment", "inline"yes
data[].attachments[].download_urlstringno
data[].attachments[].expires_atstring (date-time)noAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
data[].verdictsobjectyes
data[].verdicts.spfone of "pass", "fail", "softfail", "neutral", "none", "temperror", "permerror"yes
data[].verdicts.dkimone of "pass", "fail", "none", "temperror", "permerror"yes
data[].verdicts.dmarcone of "pass", "fail", "none", "temperror", "permerror"yes
data[].verdicts.spamone of "pass", "fail", "unknown"yes
data[].verdicts.virusone of "pass", "fail", "unknown"yes
data[].spambooleanyes
data[].virusbooleanyes
data[].sizeintegeryes
data[].statusone of "received", "routed", "forwarded", "dropped", "quarantined"yes
data[].routingarray of objectyes
data[].routing[].kindone of "webhook", "forward", "store"yes
data[].routing[].targetstringyes
data[].routing[].statusone of "pending", "done", "failed", "skipped"yes
data[].routing[].errorstringno
data[].routing[].email_idstringnoA UUID.
data[].issuesarray of one of "message_too_large", "malformed", "headers_too_large", "too_many_parts", "too_deep", "nested_messages_kept", "attachments_truncated", "addresses_truncated", "virus", "spam", "forward_loop", "dmarc_refused"yes
data[].created_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
has_morebooleanyes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl https://api.minket.com/v1/inbound \
  -H "Authorization: Bearer $MINKET_API_KEY"

Get a received message with its parsed content and verdicts

GET /v1/inbound/{id}

html carries inline images as data URIs unless html_format=cid. raw.download_url downloads the message as received until raw.expires_at (an hour at most).

Operation getInbound, SDK minket.inbound.get. Keys: full access, inbound read. Test keys work on test-mode data.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.
html_formatqueryone of "data_uri", "cid"no Default "data_uri".

Response

200 Success: Inbound.

FieldTypeRequiredDescription
idstringyesA UUID.
object"inbound"yes
project_idstringyesA UUID.
domain_idstring or nullyesA UUID.
fromstringyes
toarray of stringyes
ccarray of stringyes
bccarray of stringyes
reply_toarray of stringyes
received_forarray of stringyes
subjectstringyes
message_idstringyes
in_reply_tostring or nullyes
headersmap of stringno
htmlstring or nullno
textstring or nullno
attachmentsarray of objectyes
attachments[].idstringyesA UUID.
attachments[].object"attachment"yes
attachments[].filenamestring or nullyes
attachments[].content_typestringyes
attachments[].sizeintegeryes
attachments[].content_idstring or nullyes
attachments[].dispositionone of "attachment", "inline"yes
attachments[].download_urlstringno
attachments[].expires_atstring (date-time)noAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
verdictsobjectyes
verdicts.spfone of "pass", "fail", "softfail", "neutral", "none", "temperror", "permerror"yes
verdicts.dkimone of "pass", "fail", "none", "temperror", "permerror"yes
verdicts.dmarcone of "pass", "fail", "none", "temperror", "permerror"yes
verdicts.spamone of "pass", "fail", "unknown"yes
verdicts.virusone of "pass", "fail", "unknown"yes
spambooleanyes
virusbooleanyes
sizeintegeryes
statusone of "received", "routed", "forwarded", "dropped", "quarantined"yes
routingarray of objectyes
routing[].kindone of "webhook", "forward", "store"yes
routing[].targetstringyes
routing[].statusone of "pending", "done", "failed", "skipped"yes
routing[].errorstringno
routing[].email_idstringnoA UUID.
issuesarray of one of "message_too_large", "malformed", "headers_too_large", "too_many_parts", "too_deep", "nested_messages_kept", "attachments_truncated", "addresses_truncated", "virus", "spam", "forward_loop", "dmarc_refused"yes
rawobject or nullno
raw.download_urlstringyes
raw.expires_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
created_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl https://api.minket.com/v1/inbound/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b \
  -H "Authorization: Bearer $MINKET_API_KEY"

List a received message's attachments with download URLs

GET /v1/inbound/{id}/attachments

Operation listInboundAttachments, SDK minket.inbound.attachments. Keys: full access, inbound read. Test keys work on test-mode data.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.

Response

200 Success: object.

FieldTypeRequiredDescription
object"list"yes
dataarray of objectyes
data[].idstringyesA UUID.
data[].object"attachment"yes
data[].filenamestring or nullyes
data[].content_typestringyes
data[].sizeintegeryes
data[].content_idstring or nullyes
data[].dispositionone of "attachment", "inline"yes
data[].download_urlstringyes
data[].expires_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
has_morebooleanyes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl https://api.minket.com/v1/inbound/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b/attachments \
  -H "Authorization: Bearer $MINKET_API_KEY"

Get one attachment with a download URL

GET /v1/inbound/{id}/attachments/{attachmentId}

Operation getInboundAttachment, SDK minket.inbound.attachment. Keys: full access, inbound read. Test keys work on test-mode data.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.
attachmentIdpathstringyesA UUID.

Response

200 Success: object.

FieldTypeRequiredDescription
idstringyesA UUID.
object"attachment"yes
filenamestring or nullyes
content_typestringyes
sizeintegeryes
content_idstring or nullyes
dispositionone of "attachment", "inline"yes
download_urlstringyes
expires_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl https://api.minket.com/v1/inbound/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b/attachments/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b \
  -H "Authorization: Bearer $MINKET_API_KEY"

Forward a received message

POST /v1/inbound/{id}/forward

Only mail SES scanned as spam pass (and not a virus), only to addresses confirmed in the console, and never past three platform forwards. From becomes the receiving address and Reply-To the sender. Send Idempotency-Key to make retries safe.

Operation forwardInbound, SDK minket.inbound.forward. Keys: full access. Live keys only: test keys get 403 test_mode_only.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.

Request body

FieldTypeRequiredDescription
toarray of stringyesAt most 5 items.
fromstringnoAn email address, optionally with a display name as Name <address>. 3 to 998 characters.
passthroughbooleannoDefault true.
textstringnoAt most 1048576 characters.
htmlstringnoAt most 1048576 characters.

Response

200 Success: object.

FieldTypeRequiredDescription
idstringyesA UUID.
object"email"yes
statusone of "queued", "scheduled", "sent", "delivered", "delivery_delayed", "opened", "clicked", "bounced", "complained", "failed", "canceled", "suppressed"yes
scheduled_atstring (date-time) or nullyesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
idempotent_replaybooleanyes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl -X POST https://api.minket.com/v1/inbound/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b/forward \
  -H "Authorization: Bearer $MINKET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":["jane@example.com"]}'

Share a received message

POST /v1/inbound/{id}/share

A link on links. that shows the email's headers and content to whoever has it, until expires_at (expires_in: up to and by default 48 hours). The content opens in a sandboxed frame: no scripts or forms. The link cannot be revoked; it only expires.

Operation shareInbound, SDK minket.inbound.share. Keys: full access. Test keys work on test-mode data.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.

Request body

FieldTypeRequiredDescription
expires_instringnoAt most 40 characters.

Response

201 Created: object.

FieldTypeRequiredDescription
objectone of "email", "inbound"yes
idstringyesA UUID.
urlstringyes
expires_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl -X POST https://api.minket.com/v1/inbound/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b/share \
  -H "Authorization: Bearer $MINKET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Updated