E-maily
Odesílejte e-maily, dohledávejte zprávy a jejich obsah a e-maily plánujte, rušte, odesílejte znovu nebo přeposílejte.
Odeslání e-mailu
Odešle e-mail z ověřené odesílací domény. Každý příjemce dostane samostatnou kopii s vlastním ID e-mailu a každý příjemce stojí jeden kredit.
/emailsFunguje s API klíči s oprávněním sending i full. Odeslání se počítají do limitů odesílání workspace a úspěšná odpověď znamená, že e-mail byl přijat a zařazen do fronty, ne že už byl doručen. Doručení sledujte přes webhooky nebo Načtení e-mailu. Neověřené workspace mohou odesílat jen na e-mailové adresy účtů svých členů.
Hlavičky
Idempotency-KeystringJedinečný klíč, nejvýše 256 písmen, číslic, - a _. Opakovaný požadavek se stejným klíčem do 24 hodin vrátí první odpověď a znovu se neodešle. Viz Idempotence.
Parametry v těle požadavku
fromstringpovinnéOdesílatel ve tvaru hello@acme.com, nebo Acme <hello@acme.com>. Adresa musí být na ověřené odesílací doméně workspace, a pokud je klíč omezený na jednu doménu, tak na doméně klíče.
tostring | string[]povinnéPříjemci jako pole, nebo řetězec oddělený čárkami. Každá položka může být ada@example.com, nebo Ada Lovelace <ada@example.com>. Nejvýše 50.
ccstring | string[]bccstring | string[]reply_tostring | string[]subjectstringtemplate.htmlstringhtml, text, nebo obojí, pokud obsah neposkytne template.textstringhtml i text, příjemci dostanou vícedílnou zprávu (multipart).templatestringŠablona k odeslání. Předejte ID šablony (tem_…), pokud chcete použít právě tuto verzi, nebo alias, pokud chcete použít jeho publikovanou verzi. subject, html a text v požadavku přepíšou hodnoty ze šablony. Viz Šablony.
variablesobjectHodnoty pro proměnné jazyka Temple, například {{first_name}}, které se vykreslí v předmětu, HTML a textu. Funguje se šablonami i s obsahem přímo v požadavku.
attachmentsobject[]headersobjectDalší hlavičky MIME jako dvojice název–hodnota, například {"List-Unsubscribe": "<https://acme.com/unsubscribe>"}. Message-ID nastavuje Emailit sám.
metaobjectVaše vlastní data jako dvojice klíč–hodnota, například {"order_id": "1042"}. Hodnoty musí být řetězce. Uloží se s e-mailem a jsou součástí načtení e-mailu i obsahu webhooků.
scheduled_atstringKdy e-mail odeslat, jako datum a čas podle ISO 8601, například 2026-10-02T09:00:00Z, nebo anglicky, například tomorrow at 9am. U hodnot podle ISO 8601 uveďte časové pásmo. Čas v minulosti nebo hodnota, kterou nelze zpracovat (včetně unixového časového razítka), e-mail odešle hned. Naplánované e-maily mají až do odeslání stav scheduled.
trackingboolean | objectZapne nebo vypne pro tento e-mail měření otevření a prokliků: true, false, nebo {"loads": true, "clicks": false}. Ve výchozím stavu se použije nastavení odesílací domény. Měření funguje, jen když je ověřený CNAME záznam pro měření domény; jinak je vypnuté a odpověď ukazuje false.
Objekt přílohy
filenamestringpovinnécontentstringcontent, nebo url, ne obojí.urlstringVeřejná URL s http nebo https, ze které se soubor stáhne. Emailit ho stáhne při odeslání: stahování musí skončit do 30 sekund, soubor smí mít nejvýše 25 MB a nesmí docházet k přesměrování.
content_typestringapplication/pdf. Povinné s content. S url je výchozí hodnotou typ, který vrátí server.content_idstringUdělá z přílohy vloženou přílohu. Pokud je content_id logo, odkažte na ni v HTML jako <img src="cid:logo">.
encodingstringvýchozí: base64content, například base64 nebo hex.Celá zpráva včetně příloh může mít nejvýše 40 MB. Povolené jsou tyto typy souborů:
| Kategorie | Přípony |
|---|---|
| Text | .txt, .csv, .log, .css, .ics, .xml |
| Obrázky | .jpg, .jpe, .jpeg, .gif, .png, .bmp, .psd, .tif, .tiff, .svg, .indd, .ai, .eps |
| Dokumenty | .doc, .docx, .rtf, .odt, .ott, .pdf, .pub, .pages, .mobi, .epub |
| Zvuk | .mp3, .m4a, .m4v, .wma, .ogg, .flac, .wav, .aif, .aifc, .aiff |
| Video | .mp4, .mov, .avi, .mkv, .mpeg, .mpg, .wmv |
| Tabulky | .xls, .xlsx, .ods, .numbers |
| Prezentace | .odp, .ppt, .pptx, .pps, .key |
| Archivy | .zip, .vcf |
.eml |
|
| Kryptografie | .p7c, .p7m, .p7s, .pgp, .asc, .sig |
Odpověď
Vrací 200 s objektem e-mailu prvního příjemce. Když má zpráva v to, cc a bcc dohromady více než jednoho příjemce, ids přiřazuje každému příjemci ID jeho kopie. Každá kopie vyvolá událost email.accepted, nebo email.scheduled.
objectstringemail.idstringidsobjecttokenstringmessage_idstringMessage-ID prvního e-mailu, například <token@acme.com>.fromstringtostring[]to bez zobrazovaných jmen a duplicit.ccstring[]cc. Uvádí se, jen pokud jste nějaké poslali.bccstring[]bcc. Uvádí se, jen pokud jste nějaké poslali.subjectstringstatusstringaccepted, nebo scheduled při scheduled_at v budoucnosti.scheduled_atstring | nullnull.created_atstringtrackingobjectloads a clicks.curl -X POST https://api.emailit.com/v2/emails \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme <hello@acme.com>",
"to": "ada@example.com",
"template": "welcome",
"variables": {
"first_name": "Ada",
"activation_url": "https://acme.com/activate?token=8f2c1e"
}
}'const email = await emailit.emails.send({
from: 'Acme <hello@acme.com>',
to: 'ada@example.com',
template: 'welcome',
variables: {
first_name: 'Ada',
activation_url: 'https://acme.com/activate?token=8f2c1e',
},
});email = client.emails.send({
"from": "Acme <hello@acme.com>",
"to": "ada@example.com",
"template": "welcome",
"variables": {
"first_name": "Ada",
"activation_url": "https://acme.com/activate?token=8f2c1e"
}
})curl -X POST https://api.emailit.com/v2/emails \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme Billing <billing@acme.com>",
"to": "ada@example.com",
"subject": "Your invoice INV-1042",
"html": "<img src=\"cid:logo\"><p>Your invoice is attached.</p>",
"attachments": [
{
"filename": "INV-1042.pdf",
"content": "JVBERi0xLjQKJcOkw7zDqc...",
"content_type": "application/pdf"
},
{
"filename": "logo.png",
"url": "https://acme.com/assets/logo.png",
"content_id": "logo"
}
]
}'import { readFile } from 'node:fs/promises';
const pdf = await readFile('INV-1042.pdf');
const email = await emailit.emails.send({
from: 'Acme Billing <billing@acme.com>',
to: 'ada@example.com',
subject: 'Your invoice INV-1042',
html: '<img src="cid:logo"><p>Your invoice is attached.</p>',
attachments: [
{
filename: 'INV-1042.pdf',
content: pdf.toString('base64'),
content_type: 'application/pdf',
},
{
filename: 'logo.png',
url: 'https://acme.com/assets/logo.png',
content_id: 'logo',
},
],
});import base64
with open("INV-1042.pdf", "rb") as f:
pdf = base64.b64encode(f.read()).decode()
email = client.emails.send({
"from": "Acme Billing <billing@acme.com>",
"to": "ada@example.com",
"subject": "Your invoice INV-1042",
"html": '<img src="cid:logo"><p>Your invoice is attached.</p>',
"attachments": [
{"filename": "INV-1042.pdf", "content": pdf, "content_type": "application/pdf"},
{"filename": "logo.png", "url": "https://acme.com/assets/logo.png", "content_id": "logo"}
]
})curl -X POST https://api.emailit.com/v2/emails \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: reminder-appt-5531" \
-d '{
"from": "Acme <reminders@acme.com>",
"to": "ada@example.com",
"subject": "Your appointment tomorrow",
"text": "See you tomorrow at 2 PM.",
"scheduled_at": "2026-10-02T09:00:00Z",
"meta": { "appointment_id": "5531" }
}'const email = await emailit.emails.send({
from: 'Acme <reminders@acme.com>',
to: 'ada@example.com',
subject: 'Your appointment tomorrow',
text: 'See you tomorrow at 2 PM.',
scheduled_at: '2026-10-02T09:00:00Z',
meta: { appointment_id: '5531' },
});email = client.emails.send({
"from": "Acme <reminders@acme.com>",
"to": "ada@example.com",
"subject": "Your appointment tomorrow",
"text": "See you tomorrow at 2 PM.",
"scheduled_at": "2026-10-02T09:00:00Z",
"meta": {"appointment_id": "5531"}
}){
"object": "email",
"id": "em_4KYof1ZzXndZE2VPi0DgULiekG8",
"ids": {
"ada@example.com": "em_4KYof1ZzXndZE2VPi0DgULiekG8",
"grace@example.com": "em_4KfIXZSV8v8L1k0Mg2YDR3rytvj"
},
"token": "4KDY1iIpQSSW5pAoiz3JEfqcsO0",
"message_id": "<4KDY1iIpQSSW5pAoiz3JEfqcsO0@acme.com>",
"from": "Acme <hello@acme.com>",
"to": ["ada@example.com", "grace@example.com"],
"subject": "Welcome to Acme",
"status": "accepted",
"scheduled_at": null,
"created_at": "2026-10-01T09:30:12.482913Z",
"tracking": {
"loads": true,
"clicks": true
}
}{
"object": "email",
"id": "em_4K76IA5sFNIsLXW9QC2ro8cDbOj",
"token": "4KWzEED2cnej6UMjF4v508VqQIp",
"message_id": "<4KWzEED2cnej6UMjF4v508VqQIp@acme.com>",
"from": "Acme <reminders@acme.com>",
"to": ["ada@example.com"],
"subject": "Your appointment tomorrow",
"status": "scheduled",
"scheduled_at": "2026-10-02T09:00:00.000Z",
"created_at": "2026-10-01T09:30:12.482913Z",
"tracking": {
"loads": false,
"clicks": false
}
}{
"error": "Validation failed",
"validation_errors": [
"Missing required field: subject",
"Invalid to email address at index 1: grace@example"
]
}{
"error": "Insufficient credits",
"message": "Insufficient credits to send this email. Required: 2, available: 0."
}{
"code": "unverified_workspace_recipient",
"error": "Workspace not verified",
"message": "Unverified workspaces can only send to workspace members' account emails. Blocked recipient: grace@example.com.",
"blocked_recipients": ["grace@example.com"]
}{
"error": "Domain not authorized",
"message": "API key is not authorized to send from this domain"
}{
"error": "Template not found",
"message": "Template 'welcome' not found or not published"
}{
"error": "Message too large",
"message": "Message size (41.27MB) exceeds maximum allowed size of 40MB"
}{
"error": "Domain not verified"
}{
"error": "Rate limit exceeded",
"message": "Too many requests. Maximum 2 messages per second allowed.",
"limit": 2,
"current": 2,
"retry_after": 1
}Výpis e-mailů
Vrátí stránku e-mailů od nejnovějších. Ve výchozím stavu výpis zobrazuje odchozí e-maily za posledních 14 dní.
/emailsVyžaduje API klíč s oprávněním full. Každý příjemce jednoho odeslání je v tomto výpisu samostatný e-mail.
Parametry dotazu
pageintegervýchozí: 1limitintegervýchozí: 25typestringvýchozí: outbounddate_fromstringJen e-maily vytvořené v toto datum nebo později, například 2026-08-01 (od 00:00 UTC). Bez tohoto parametru výpis začíná před 14 dny. Filtry created_at toto období nemění.
date_tostringsearchstringmatchstringvýchozí: allall, nebo or. Jak se kombinují filtry níže.orderstringdirectionstringasc, nebo desc.Filtry
Filtry přidávejte ve tvaru key.condition=value, například status.exact=bounced nebo created_at.after=2026-09-01. Podmínky pro jednotlivé typy najdete na stránce Filtrování.
| Klíč | Typ | Hodnoty a poznámky |
|---|---|---|
to |
string | Adresa příjemce. |
from |
string | Odesílatel tak, jak byl odeslán, včetně případného zobrazovaného jména. |
subject |
string | |
status |
enum | accepted, scheduled, delivered, loaded, clicked, attempted, bounced, failed, rejected, suppressed, received, complained, canceled, held |
tag |
string | Štítek e-mailu. Odesílání přes API nebo SMTP zatím štítek nenastavuje. |
spam_score |
number | |
created_at |
date | |
updated_at |
date | |
api_key_id |
string | ID API klíče, kterým byl e-mail odeslán (key_…). |
sending_domain_id |
string | ID odesílací domény (dom_…). |
Podle každého klíče lze také řadit. Starší parametry dotazu status, rcpt_to, mail_from, subject, api_key_id a sending_domain_id stále fungují: status hledá přesnou shodu, parametry pro adresy a předmět částečnou.
Odpověď
Vrací pole data s objekty e-mailů a pole next_page_url a previous_page_url. Viz Stránkování. URL stránek neobsahují vaše filtry, takže další stránku si vyžádejte s vlastními parametry a page zvýšeným o jedna.
objectstringemail.idstringtypestringoutbound, nebo inbound.fromstringtostringsubjectstringstatusstringsizeintegerscheduled_atstring | nullnull.created_atstringupdated_atstringmetaobject | nullmeta, které jste odeslali.curl -G https://api.emailit.com/v2/emails \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-d status.exact=bounced \
-d status.exact=failed \
-d match=or \
-d date_from=2026-09-01 \
-d order=created_at \
-d direction=desc{
"data": [
{
"object": "email",
"id": "em_4KYof1ZzXndZE2VPi0DgULiekG8",
"type": "outbound",
"from": "Acme <hello@acme.com>",
"to": "ada@example.com",
"subject": "Welcome to Acme",
"status": "delivered",
"size": 4523,
"scheduled_at": null,
"created_at": "2026-10-01T09:30:12.482913Z",
"updated_at": "2026-10-01T09:30:14.118204Z",
"meta": null
},
{
"object": "email",
"id": "em_4KfIXZSV8v8L1k0Mg2YDR3rytvj",
"type": "outbound",
"from": "Acme <hello@acme.com>",
"to": "grace@example.com",
"subject": "Welcome to Acme",
"status": "loaded",
"size": 4527,
"scheduled_at": null,
"created_at": "2026-10-01T09:30:12.482913Z",
"updated_at": "2026-10-01T09:41:03.770521Z",
"meta": null
}
],
"next_page_url": "/app/v2/emails?page=2&limit=25",
"previous_page_url": null
}{
"statusCode": 400,
"error": "Bad Request",
"message": "Validation error",
"details": [
{
"instancePath": "/limit",
"schemaPath": "#/properties/limit/maximum",
"keyword": "maximum",
"params": { "comparison": "<=", "limit": 100 },
"message": "must be <= 100"
}
]
}Načtení e-mailu
Načte e-mail s jeho stavem, zpracovanými hlavičkami, tělem v HTML a textu a přílohami.
/emails/{id}Vyžaduje API klíč s oprávněním full. Obsah zpráv se uchovává po dobu uchovávání obsahu, kterou určuje váš tarif. Poté jsou headers, body a attachments prázdné a zůstane jen stav a metadata. Pokud chcete načíst jen část e-mailu, použijte Načtení těla e-mailu, Načtení metadat, Výpis příloh nebo Načtení surového MIME.
Parametry v cestě
idstringpovinnéem_4KYof1ZzXndZE2VPi0DgULiekG8.Odpověď
Vrací objekt e-mailu.
objectstringemail.idstringtypestringoutbound pro e-maily, které jste odeslali, inbound pro e-maily, které jste přijali.tokenstringmessage_idstringMessage-ID.fromstringAcme <hello@acme.com>.tostringsubjectstringstatusstringAktuální stav: accepted, scheduled, delivered, loaded, clicked, attempted, bounced, failed, rejected, suppressed, received, complained, canceled nebo held. Viz Stavy e-mailů.
sizeintegerscheduled_atstring | nullnull.created_atstringupdated_atstringtrackingobjectloads) a prokliků (clicks).metaobject | nullmeta, které jste odeslali, nebo null.headersobject | nullnull po smazání obsahu.bodyobjecttext a html, každé jako řetězec, nebo null.attachmentsobject[]Přílohy, každá s filename, content_type, size v bajtech, content_id (u vložených souborů), content_disposition (attachment, nebo inline) a content (Base64).
{
"object": "email",
"id": "em_4KYof1ZzXndZE2VPi0DgULiekG8",
"type": "outbound",
"token": "4KDY1iIpQSSW5pAoiz3JEfqcsO0",
"message_id": "<4KDY1iIpQSSW5pAoiz3JEfqcsO0@acme.com>",
"from": "Acme Billing <billing@acme.com>",
"to": "ada@example.com",
"subject": "Your invoice INV-1042",
"status": "delivered",
"size": 48213,
"scheduled_at": null,
"created_at": "2026-10-01T09:30:12.482913Z",
"updated_at": "2026-10-01T09:30:14.118204Z",
"tracking": {
"loads": true,
"clicks": true
},
"meta": {
"invoice_id": "INV-1042"
},
"headers": {
"From": "Acme Billing <billing@acme.com>",
"To": "ada@example.com",
"Subject": "Your invoice INV-1042",
"Message-ID": "<4KDY1iIpQSSW5pAoiz3JEfqcsO0@acme.com>",
"MIME-Version": "1.0",
"Content-Type": "multipart/mixed; boundary=\"--_NmP-4f1c2a9e7b3d0e5f-Part_1\""
},
"body": {
"text": "Your invoice is attached.",
"html": "<p>Your invoice is attached.</p>"
},
"attachments": [
{
"filename": "INV-1042.pdf",
"content_type": "application/pdf",
"size": 40960,
"content_id": null,
"content_disposition": "attachment",
"content": "JVBERi0xLjQKJcOkw7zDqc..."
}
]
}{
"object": "email",
"id": "em_4KbeG9poqTmjvQZeN8pMoJkCVNd",
"type": "inbound",
"token": "4KTnDU5PzzqDqp8UWb9qVhPVFOT",
"message_id": "<CAH7x2k9@mail.example.com>",
"from": "Ada Lovelace <ada@example.com>",
"to": "support@inbound.acme.com",
"subject": "Re: Your invoice INV-1042",
"status": "received",
"size": 8234,
"scheduled_at": null,
"created_at": "2026-10-01T11:02:45.031877Z",
"updated_at": "2026-10-01T11:02:45.031877Z",
"meta": null,
"headers": {
"From": "Ada Lovelace <ada@example.com>",
"To": "support@inbound.acme.com",
"Subject": "Re: Your invoice INV-1042",
"Content-Type": "text/plain; charset=utf-8"
},
"body": {
"text": "Thanks, received.",
"html": null
},
"attachments": []
}{
"error": "Email not found",
"message": "Email with ID 'em_4KYof1ZzXndZE2VPi0DgULiekG8' not found in your workspace"
}Načtení surového MIME
Načte úplný MIME zdroj e-mailu tak, jak ho Emailit uložil, spolu s jeho metadaty.
/emails/{id}/rawVyžaduje API klíč s oprávněním full. Použijte ho k archivaci zprávy, ladění její struktury nebo ke zpracování vlastní knihovnou pro MIME. Po uplynutí doby uchovávání obsahu jsou raw a headers null.
Parametry v cestě
idstringpovinnéOdpověď
Vrací metadata e-mailu jako Načtení metadat, ale bez attachments, a navíc surovou zprávu.
rawstring | nullnull.headersobject | nullOstatní pole (object, id, type, token, message_id, from, to, subject, status, size, scheduled_at, created_at, updated_at, tracking a meta) jsou stejná jako u Načtení e-mailu.
{
"object": "email",
"id": "em_4KYof1ZzXndZE2VPi0DgULiekG8",
"type": "outbound",
"token": "4KDY1iIpQSSW5pAoiz3JEfqcsO0",
"message_id": "<4KDY1iIpQSSW5pAoiz3JEfqcsO0@acme.com>",
"from": "Acme <hello@acme.com>",
"to": "ada@example.com",
"subject": "Welcome to Acme",
"status": "delivered",
"size": 1342,
"scheduled_at": null,
"created_at": "2026-10-01T09:30:12.482913Z",
"updated_at": "2026-10-01T09:30:14.118204Z",
"tracking": {
"loads": false,
"clicks": false
},
"meta": null,
"headers": {
"From": "Acme <hello@acme.com>",
"To": "ada@example.com",
"Subject": "Welcome to Acme",
"Message-ID": "<4KDY1iIpQSSW5pAoiz3JEfqcsO0@acme.com>",
"MIME-Version": "1.0",
"Content-Type": "text/html; charset=utf-8"
},
"raw": "From: Acme <hello@acme.com>\r\nTo: ada@example.com\r\nSubject: Welcome to Acme\r\nMessage-ID: <4KDY1iIpQSSW5pAoiz3JEfqcsO0@acme.com>\r\nMIME-Version: 1.0\r\nContent-Type: text/html; charset=utf-8\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n<h1>Welcome!</h1><p>Thanks for signing up.</p>"
}{
"error": "Email not found",
"message": "Email with ID 'em_4KYof1ZzXndZE2VPi0DgULiekG8' not found in your workspace"
}Výpis příloh
Vrátí přílohy e-mailu včetně jejich obsahu.
/emails/{id}/attachmentsVyžaduje API klíč s oprávněním full. Funguje pro odchozí i příchozí e-maily. Vložené obrázky (části s hlavičkou Content-ID) jsou zahrnuté. Pokud chcete seznam bez obsahu souborů, použijte Načtení metadat. Po uplynutí doby uchovávání obsahu je seznam prázdný.
Parametry v cestě
idstringpovinnéOdpověď
Vrací objekt seznamu se všemi přílohami. Seznam není stránkovaný.
objectstringlist.dataobject[]data[].filenamestringdata[].content_typestringapplication/pdf.data[].sizeintegerdata[].content_idstring | nullContent-ID vložené přílohy, nebo null.data[].content_dispositionstring | nullattachment, nebo inline.data[].contentstring{
"object": "list",
"data": [
{
"filename": "INV-1042.pdf",
"content_type": "application/pdf",
"size": 40960,
"content_id": null,
"content_disposition": "attachment",
"content": "JVBERi0xLjQKJcOkw7zDqc..."
},
{
"filename": "logo.png",
"content_type": "image/png",
"size": 5120,
"content_id": "logo",
"content_disposition": "inline",
"content": "iVBORw0KGgoAAAANSUhEUgAA..."
}
]
}{
"error": "Email not found",
"message": "Email with ID 'em_4KYof1ZzXndZE2VPi0DgULiekG8' not found in your workspace"
}Načtení těla e-mailu
Vrátí tělo e-mailu v HTML a prostém textu, dekódované z jeho částí MIME.
/emails/{id}/bodyVyžaduje API klíč s oprávněním full. Funguje pro odchozí i příchozí e-maily. U odchozích e-mailů je tělo to, co se skutečně odeslalo, tedy po vykreslení šablony a proměnných. Po uplynutí doby uchovávání obsahu jsou obě pole null.
Parametry v cestě
idstringpovinnéOdpověď
textstring | nullnull, pokud ji e-mail nemá.htmlstring | nullnull, pokud ji e-mail nemá.{
"text": "Welcome!\n\nThanks for signing up.",
"html": "<h1>Welcome!</h1><p>Thanks for signing up.</p>"
}{
"error": "Email not found",
"message": "Email with ID 'em_4KYof1ZzXndZE2VPi0DgULiekG8' not found in your workspace"
}Načtení metadat
Načte e-mail bez těla: stav, hlavičky, vaše data meta a seznam příloh bez jejich obsahu.
/emails/{id}/metaVyžaduje API klíč s oprávněním full. Je to nejúspornější způsob, jak přečíst podrobnosti e-mailu, když nepotřebujete obsah.
Parametry v cestě
idstringpovinnéOdpověď
Vrací stejná pole jako Načtení e-mailu, bez body a s popisem attachments, ale bez jejich obsahu:
attachmentsobject[]filename, content_type, size, content_id a content_disposition. Bez content.headersobject | nullnull po smazání obsahu.metaobject | nullmeta, které jste s e-mailem odeslali.{
"object": "email",
"id": "em_4KYof1ZzXndZE2VPi0DgULiekG8",
"type": "outbound",
"token": "4KDY1iIpQSSW5pAoiz3JEfqcsO0",
"message_id": "<4KDY1iIpQSSW5pAoiz3JEfqcsO0@acme.com>",
"from": "Acme Billing <billing@acme.com>",
"to": "ada@example.com",
"subject": "Your invoice INV-1042",
"status": "delivered",
"size": 48213,
"scheduled_at": null,
"created_at": "2026-10-01T09:30:12.482913Z",
"updated_at": "2026-10-01T09:30:14.118204Z",
"tracking": {
"loads": true,
"clicks": true
},
"meta": {
"invoice_id": "INV-1042"
},
"headers": {
"From": "Acme Billing <billing@acme.com>",
"To": "ada@example.com",
"Subject": "Your invoice INV-1042",
"Message-ID": "<4KDY1iIpQSSW5pAoiz3JEfqcsO0@acme.com>",
"MIME-Version": "1.0",
"Content-Type": "multipart/mixed; boundary=\"--_NmP-4f1c2a9e7b3d0e5f-Part_1\""
},
"attachments": [
{
"filename": "INV-1042.pdf",
"content_type": "application/pdf",
"size": 40960,
"content_id": null,
"content_disposition": "attachment"
}
]
}{
"error": "Email not found",
"message": "Email with ID 'em_4KYof1ZzXndZE2VPi0DgULiekG8' not found in your workspace"
}Úprava naplánovaného e-mailu
Přesune naplánovaný e-mail na nový čas odeslání.
/emails/{id}Funguje s API klíči s oprávněním sending i full. Přeplánovat můžete jen e-mail ve stavu scheduled, jehož aktuální čas odeslání je víc než 3 minuty daleko. Změnit lze jen čas odeslání; pokud chcete změnit obsah, e-mail zrušte a odešlete nový.
Naplánované odeslání více příjemcům vytvoří pro každého příjemce jeden e-mail. Přeplánujte každé ID z mapy ids v odpovědi na odeslání.
Parametry v cestě
idstringpovinnéParametry v těle požadavku
scheduled_atstringpovinnéNový čas odeslání jako datum a čas podle ISO 8601, například 2026-10-03T09:00:00Z, nebo anglicky, například tomorrow at 3pm. Musí být víc než 3 minuty v budoucnosti.
Odpověď
objectstringemail.idstringstatusstringscheduled.scheduled_atstringupdated_atstringmessagestringPokud e-mail není naplánovaný, má se odeslat do 3 minut, nebo nový čas nelze zpracovat či je příliš brzy, vrací 422.
curl -X POST https://api.emailit.com/v2/emails/em_4K76IA5sFNIsLXW9QC2ro8cDbOj \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"scheduled_at": "tomorrow at 3pm"}'{
"object": "email",
"id": "em_4K76IA5sFNIsLXW9QC2ro8cDbOj",
"status": "scheduled",
"scheduled_at": "2026-10-03T09:00:00.000Z",
"updated_at": "2026-10-01T10:15:40.207316Z",
"message": "Email schedule has been updated successfully"
}{
"error": "Email not found",
"message": "Email with ID 'em_4K76IA5sFNIsLXW9QC2ro8cDbOj' not found in your workspace"
}{
"error": "Cannot update email",
"message": "Email cannot be updated. Current status: 'delivered'. Only 'scheduled' emails can be updated."
}{
"error": "Cannot update email",
"message": "Scheduled emails can only be updated at least 3 minutes before the scheduled time. This email is scheduled to send in 2 minute(s)."
}{
"error": "Invalid scheduled_at",
"message": "The new scheduled time must be at least 3 minutes in the future."
}Zrušení e-mailu
Odebere e-mail z odesílací fronty a nastaví mu stav canceled.
/emails/{id}/cancelFunguje s API klíči s oprávněním sending i full. Zrušení funguje bez záruky: e-mail vytáhne z fronty, ale pokud už pokus o doručení začal, může se tento pokus ještě dokončit a zastaví se jen zbývající opakování. Který případ nastal, vám odpověď sdělí v poli in_flight. Zrušení vyvolá událost email.canceled a kredit se nevrací. Akce Cancel delivery ve webovém rozhraní dělá totéž.
| Stav | Lze zrušit | Poznámky |
|---|---|---|
scheduled |
Ano | Nejpozději 3 minuty před naplánovaným časem. |
accepted |
Ano | Zařazený do fronty a ještě nedoručený. |
attempted |
Ano | Zastaví zbývající opakování po dočasné chybě. |
| Jakýkoli jiný | Ne | E-mail už byl doručen, selhal, nebo byl zrušen. |
Pokud chcete zrušit odeslání s více příjemci, zrušte každé ID z mapy ids v odpovědi na odeslání.
Parametry v cestě
idstringpovinnéOdpověď
objectstringemail.idstringstatusstringcanceled.in_flightbooleantrue, pokud už pokus o doručení může probíhat a ještě se může dokončit. false, pokud byl e-mail z fronty odebrán před jakýmkoli pokusem.messagestring{
"object": "email",
"id": "em_4K76IA5sFNIsLXW9QC2ro8cDbOj",
"status": "canceled",
"in_flight": false,
"message": "Email has been canceled and removed from the send queue."
}{
"object": "email",
"id": "em_4K76IA5sFNIsLXW9QC2ro8cDbOj",
"status": "canceled",
"in_flight": true,
"message": "Email was canceled. The current delivery attempt may still complete; remaining retries were stopped."
}{
"error": "Email not found",
"message": "Email with ID 'em_4K76IA5sFNIsLXW9QC2ro8cDbOj' not found in your workspace"
}{
"error": "Cannot cancel email",
"message": "Email cannot be canceled. Current status: 'delivered'. Only 'scheduled', 'accepted', or 'attempted' emails can be canceled."
}{
"error": "Cannot cancel email",
"message": "Scheduled emails can only be canceled at least 3 minutes before the scheduled time. This email is scheduled to send in 2 minute(s)."
}Opakované odeslání e-mailu
Zařadí do fronty kopii e-mailu, který neprošel. Kopie je nový e-mail s vlastním ID a původní e-mail si ponechá svůj stav.
/emails/{id}/retryFunguje s API klíči s oprávněním sending i full. Kopie má stejného odesílatele, příjemce, předmět, obsah, hlavičky, meta a nastavení měření, ale novou hlavičku Message-ID. Stojí kredity jako nové odeslání: jeden kredit, u e-mailu z kampaně dva.
E-mail můžete odeslat znovu, pokud:
- Je ve stavu
bounced,failed,suppressedneboheld. - Byl vytvořen v posledních 30 dnech.
- Jeho obsah ještě nebyl smazán po uplynutí vaší doby uchovávání a jeho odesílací doména stále existuje.
Nejdřív odstraňte příčinu. Zablokovaná adresa, která je stále na vašem seznamu blokovaných adres, se zablokuje znovu a zadržený e-mail se znovu zadrží, dokud se nevyřeší důvod zadržení.
Parametry v cestě
idstringpovinnéOdpověď
objectstringemail.idstringoriginal_idstringtokenstringmessage_idstringMessage-ID nového e-mailu.fromstringtostringsubjectstringstatusstringaccepted.created_atstringmessagestring{
"object": "email",
"id": "em_4KbeG9poqTmjvQZeN8pMoJkCVNd",
"original_id": "em_4KKrQ7TzsVtzsS8zG069B2aMtoK",
"token": "4KTnDU5PzzqDqp8UWb9qVhPVFOT",
"message_id": "<4KTnDU5PzzqDqp8UWb9qVhPVFOT@acme.com>",
"from": "Acme <hello@acme.com>",
"to": "ada@example.com",
"subject": "Welcome to Acme",
"status": "accepted",
"created_at": "2026-10-01T12:04:51.330482Z",
"message": "Email has been queued for retry"
}{
"error": "Insufficient credits",
"message": "Insufficient credits to retry this email. Required: 1, available: 0."
}{
"error": "Email not found",
"message": "Email with ID 'em_4KKrQ7TzsVtzsS8zG069B2aMtoK' not found in your workspace"
}{
"error": "Cannot retry email",
"message": "Only bounced, failed, suppressed, or held emails can be retried. Current status: 'delivered'"
}{
"error": "Cannot retry email",
"message": "Emails older than 30 days cannot be retried"
}{
"error": "Cannot retry email",
"message": "Email raw content has been purged and can no longer be retried"
}Přeposlání e-mailu
Odešle obsah odchozího e-mailu novým příjemcům jako nový e-mail. Původní e-mail se nemění.
/emails/{id}/forwardFunguje s API klíči s oprávněním sending i full. Ve výchozím stavu je přeposlání prostým opětovným odesláním původního HTML, textu a příloh. Pokud nastavíte include_headers, přidá se nad původní obsah blok „Forwarded message“ a volitelná poznámka.
Přeposlání je nové odeslání, takže platí pravidla z Odeslání e-mailu: adresa from musí být na ověřené odesílací doméně, každý příjemce stojí kredit a počítá se do limitů odesílání, měření se řídí nastavením domény a hlavička Idempotency-Key je podporovaná. Navíc může workspace přeposlat nejvýše 3 e-maily za hodinu.
Přeposlat lze jen odchozí e-maily, a to jen dokud je jejich obsah v rámci vaší doby uchovávání uložený. Pokud chcete přeposílat přijatou poštu, použijte automatizaci.
Parametry v cestě
idstringpovinnéHlavičky
Idempotency-KeystringParametry v těle požadavku
tostring | string[]povinnéinclude_headersbooleanvýchozí: falsePři true přidá blok „Forwarded message“ s původním odesílatelem, datem, předmětem a příjemcem a nad něj vaši poznámku. Při false odešle původní obsah znovu beze změny.
commentstringinclude_headers. Jako alias se přijímá i body.htmlstringcomment. Použije se jen s include_headers.textstringcomment. Použije se jen s include_headers.fromstringfrom původního e-mailu.subjectstringinclude_headers pak Fwd: a původní předmět.Původní přílohy se přiloží, pokud je jejich typ souboru povolený.
Odpověď
Vrací stejný objekt jako Odeslání e-mailu, se dvěma poli navíc:
original_idstringmessagestringPo překročení limitu přeposílání vrátí API 429 s hlavičkou retry-after.
curl -X POST https://api.emailit.com/v2/emails/em_4KYof1ZzXndZE2VPi0DgULiekG8/forward \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: fwd-inv-1042-grace" \
-d '{
"to": ["grace@example.com"],
"include_headers": true,
"comment": "Grace, here is the invoice Ada asked about."
}'const email = await emailit.emails.forward('em_4KYof1ZzXndZE2VPi0DgULiekG8', {
to: ['grace@example.com'],
include_headers: true,
comment: 'Grace, here is the invoice Ada asked about.',
});email = client.emails.forward("em_4KYof1ZzXndZE2VPi0DgULiekG8", {
"to": ["grace@example.com"],
"include_headers": True,
"comment": "Grace, here is the invoice Ada asked about."
}){
"object": "email",
"id": "em_4K76IA5sFNIsLXW9QC2ro8cDbOj",
"original_id": "em_4KYof1ZzXndZE2VPi0DgULiekG8",
"token": "4KWzEED2cnej6UMjF4v508VqQIp",
"message_id": "<4KWzEED2cnej6UMjF4v508VqQIp@acme.com>",
"from": "Acme Billing <billing@acme.com>",
"to": ["grace@example.com"],
"subject": "Fwd: Your invoice INV-1042",
"status": "accepted",
"scheduled_at": null,
"created_at": "2026-10-01T13:20:07.915203Z",
"tracking": {
"loads": true,
"clicks": true
},
"message": "Email has been queued for forwarding"
}{
"error": "Validation failed",
"validation_errors": ["Invalid to email address at index 0: grace@example"]
}{
"error": "Email not found",
"message": "Email with ID 'em_4KYof1ZzXndZE2VPi0DgULiekG8' not found in your workspace"
}{
"error": "Cannot forward email",
"message": "Only outgoing emails can be forwarded"
}{
"error": "Cannot forward email",
"message": "Email raw content has been purged and can no longer be forwarded"
}{
"error": "too_many_requests",
"message": "Forwarding is limited to 3 emails per hour for this workspace. Try again later.",
"limit": 3,
"current": 4,
"retry_after": 2711
}Načtení jen stavu
Vrátí jen aktuální stav e-mailu.
/email/{id}Vyžaduje API klíč s oprávněním full. Všimněte si jednotného čísla /email v cestě. Odpověď je malá, takže se tento endpoint hodí pro rychlé kontroly stavu. Pokud chcete změny stavu dostávat hned, když nastanou, použijte místo opakovaného dotazování webhooky.
Parametry v cestě
idstringpovinnéOdpověď
statusstringAktuální stav: accepted, scheduled, delivered, loaded, clicked, attempted, bounced, failed, rejected, suppressed, received, complained, canceled nebo held. Viz Stavy e-mailů.
{
"status": "delivered"
}{
"error": "Email not found",
"message": "Email with ID 'em_4KYof1ZzXndZE2VPi0DgULiekG8' not found in your workspace"
}