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
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>"
  }'
Node
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: '...' }
Python
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": "..."}
FieldMeaning
fromA verified address on your domain, optionally "Name <address>".
to, cc, bcc, reply_toOne address or an array (up to 50). Everyone in "to" is on the same message.
subjectRequired.
html, textSend either or both. With both, clients show one of them.
headersOptional custom headers. Routing and authentication headers are ignored.
attachmentsOptional 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.