Transactional email API
Send email from your own domain with one REST request. Flinkk Mail sends through Amazon SES, signs with DKIM, records every delivery, bounce, complaint, open and click, and gives your team a shared inbox for the replies.
Send an email
POST to https://mail.flinkk.io/api/v1/emails with your API key as a bearer token. Create keys under Developer Settings; each key is tied to one domain and is shown once. The response is the email id.
curl -X POST https://mail.flinkk.io/api/v1/emails \
-H "Authorization: Bearer $FLINKK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme <hello@yourdomain.com>",
"to": ["customer@example.com"],
"subject": "Welcome aboard",
"html": "<p>Glad you are here.</p>"
}'const res = await fetch('https://mail.flinkk.io/api/v1/emails', {
method: 'POST',
headers: { 'Content-Type': 'application/json', Authorization: 'Bearer ' + process.env.FLINKK_API_KEY },
body: JSON.stringify({
from: 'Acme <hello@yourdomain.com>',
to: ['customer@example.com'],
subject: 'Welcome aboard',
html: '<p>Glad you are here.</p>',
}),
});
console.log(await res.json()); // { id: '...' }import os, requests
res = requests.post(
"https://mail.flinkk.io/api/v1/emails",
headers={"Authorization": f"Bearer {os.environ['FLINKK_API_KEY']}"},
json={
"from": "Acme <hello@yourdomain.com>",
"to": ["customer@example.com"],
"subject": "Welcome aboard",
"html": "<p>Glad you are here.</p>",
},
)
print(res.json()) # {"id": "..."}| Field | Meaning |
|---|---|
| from | A verified address on your domain, optionally "Name <address>". |
| to, cc, bcc, reply_to | One address or an array (up to 50). Everyone in "to" is on the same message. |
| subject | Required. |
| html, text | Send either or both. With both, clients show one of them. |
| headers | Optional custom headers. Routing and authentication headers are ignored. |
| attachments | Optional list of { filename, content (base64) } or { filename, path (URL) }. |
POST /api/v1/emails/batch sends up to 100 emails in one request (all are validated first, so a bad item sends nothing), and GET /api/v1/emails/{id} returns the email with its latest delivery status. The full contract is in the OpenAPI 3.1 spec at /openapi-email.json.
Each key is limited to 120 requests a minute, and each workspace has a daily sending limit (100 emails a day by default). Over either limit the API answers 429, with Retry-After for the rate limit, rather than silently dropping mail. The original endpoint, /api/client/email/send with an api-key header, keeps working.
Your own domain, DKIM and custom MAIL FROM
Add your domain in Flinkk Mail and publish the DNS records it shows you. Flinkk Mail creates the sending identity in Amazon SES with DKIM signing and a custom MAIL FROM subdomain, so your mail is authenticated as coming from your domain instead of a shared one. Add as many sending addresses on the domain as you need and choose which team members may use each one.
Delivery tracking and webhooks
Delivered, bounced, complained, opened and clicked events are recorded for every message and shown in Logs. To get them in your own system, add a webhook endpoint under Agents, Webhooks. Flinkk Mail sends email.sent, email.delivered and email.bounced (and email.received for inbound mail) as signed JSON, with retries.
Payloads contain ids and metadata only. Verification code for Node and Python is in the agent API docs.
Receiving mail, and the v1 inbox API
Replies and inbound mail land in a shared, threaded inbox your team can read. The same inbox is available to software through the versioned REST API under /api/v1 (list inboxes and threads, read messages as clean text, search, draft and send replies, label and archive) and through a hosted MCP server, with scopes and human approval for agents.
curl https://mail.flinkk.io/api/v1/inboxes \
-H "Authorization: Bearer $FLINKK_AGENT_KEY"Frequently asked questions
What do I need to start sending?
Sign in, add and verify a domain by publishing the DNS records Flinkk Mail shows you, create an API key for that domain, and call POST /api/v1/emails.
Does it send through Amazon SES?
Yes. Flinkk Mail creates and manages the SES sending identity for each domain you add, with DKIM signing and a custom MAIL FROM subdomain.
Can I send to many recipients?
Yes. Pass an array in "to" for one message to several people, or use the batch endpoint to send up to 100 separate emails in one request. The daily workspace limit applies.
How do I know a message was delivered?
Every message has a recorded status (sent, delivered, bounced or complained), plus open and click events, in Logs and through webhooks.
Is there an SDK?
Not yet. The API is a single JSON POST, so a few lines of fetch or requests are enough. Examples are above.
Give an agent an inbox
Create an agent, grant it one inbox, and keep a person in the loop for everything it sends.