By using our site, you agree to our use of cookies. Cookie Policy
Transactional Email API

Send the email your customer needs next.

Connect the moment in your app to the message that helps someone move forward. Send through a straightforward API, keep the message ID, and investigate the result.

REST API, SMTP, and SDKs. Your application decides when to send. Attachments, cc/bcc, reply-to, custom headers, and React Email are all supported.

One request. A useful next step.Example request
curl --request POST \
  'https://api.email.utobo.com/functions/v1/send-email' \
  --header 'Authorization: Bearer av_live_...' \
  --header 'Content-Type: application/json' \
  --data '{
    "from": "Northstar <hello@example.com>",
    "to": "alex@example.net",
    "subject": "Your workspace is ready",
    "html": "<p>Sign in to start your first project.</p>"
  }'
Example response{ "id": "3c9b0f4e-7a2d-4f8b-9c1e-5d6a8b3f2e1c",
"message": "Email sent." }

Keep the ID. A successful response does not confirm inbox placement.

Server-side · REST API

Use a sender on your verified domain. The example does not send email from this page.

Help them get back in.

A sign-in link or password reset belongs with the customer action that requests it. Keep the next step clear and easy to find.

Confirm what just happened.

A receipt, account confirmation, or order update gives customers a useful record of the action they took.

Bring the next person in.

Turn a teammate invitation into a welcome that explains the workspace and how to join it.

Follow the message

A message ID gives you somewhere to start.

When someone says an email is missing, start with the request. Keep its response and message ID so you can find the matching status and bring useful context to an investigation.

The documented sent status means the message was handed to the sending provider. The recipient’s mail system still determines how the message is handled.

Explore email activity ↗
Message lookupExample record
Subject
Your workspace is ready
To
alex@example.net
Status
✓ sent
Message ID
3c9b0f4e-7a2d-4f8b-9c1e-5d6a8b3f2e1c
Provider ID
010f018a-2b3c-4d5e-…
Created
2026-06-04T10:30:00Z
Check the same messageGET /functions/v1/send-email/3c9b0f4e-7a2d-4f8b-9c1e-5d6a8b3f2e1c

Selected fields from an illustrative status response. Check the reference for the complete response.

Make errors actionable

Get a clear next check from the response.

Keep error handling in the application that sends the request. Every error returns { error, name, message }, so you can branch on the machine-readable name before retrying.

400

Fix the request.

validation_error — a field is missing or malformed. Correct the input and retry.

401

Check authentication.

unauthorized — the API key is missing or invalid. Send it as Authorization: Bearer av_live_…

422

Check the sender.

domain_not_verified — the from-address is not on a verified domain, or every recipient is suppressed.

429

Respect the retry window.

rate_limit_exceeded — pace requests and retry after the returned Retry-After header.

100 requests/minute/key500 requests/minute/organization50 combined recipients/request

Need help with your sending volume? Talk through your requirements ↗

Example API key
av_live_a1b2••••••••••••••••••••
Send access

Let an integration send email and read its own send status — nothing more.

Full access

Reserve broader access for the tasks that genuinely need it.

The full key is shown once at creation. Store it in your server environment.

Appropriate access

Give the integration what it needs.

Choose the API-key scope for the integration you are building. Keep keys out of browser code, public repositories, and customer-facing examples.

Your application owns the event and message content. utobo provides the sending interface. That separation lets you decide which customer action deserves an email.

Understand roles and API access ↗
Your first app email

A short path from setup to first send.

Have access to your sending domain and a server environment ready. Start with a message to an address you control.

  1. 01

    Choose your plan.

    Select the transactional allowance that fits your application. Use the All-in-one track if your team also needs campaigns.

  2. 02

    Verify your domain.

    Add the records shown in domain setup and check the verification result before using that sender.

  3. 03

    Create a scoped key.

    Keep the key on the server and provide only the access this integration needs.

  4. 04

    Send and inspect.

    Send a controlled test, keep the returned ID, and review the response and available activity.

Open the complete setup guide ↗

Good questions

A few things you might be wondering.

Find the detail you need before your first send.

Talk to the team ↗
Can I keep using SMTP?

Yes. If your application already supports custom SMTP, you can use utobo’s SMTP connection settings. See the host, ports, and setup path.

Do you provide SDKs?

Node.js is the official SDK, with libraries for Python, Ruby, and Go, and a PHP SDK coming soon. Choose your language and follow its package reference.

Does a successful request mean the email reached the inbox?

No. A successful API response and the documented sent status describe processing by the sending service. They do not establish inbox placement or that a person read the email.

Does the API decide when a customer receives a message?

Your application supplies the event, recipient, and content. Connect your own signup, purchase, invitation, or other application logic to the sending request.

Can I use a marketing plan for all my app email?

Transactional email is metered separately from promotional campaigns. Compare the Transactional, Promotional, and All-in-one tracks for the work your team needs.

Make the next customer action a clear one.

Start with one essential message. Connect it, inspect the result, and build from there.