Overzicht van de TrekMail REST API voor ontwikkelaars

Lees hoe de TrekMail REST API werkt met bearer-tokenauthenticatie, plangebaseerde toegang, snelheidslimieten en antwoordformaten.

Artikeldetails

Type, moeilijkheid, abonnementen en wanneer het laatst is bijgewerkt.

Type
Naslagwerk
Moeilijkheid
Gemiddeld
Abonnementen
Nano · Starter · Pro · Agency
Laatst bijgewerkt
23 aug. 2026

Met de TrekMail API beheer je domeinen, mailboxen, doorsturen, DNS, e-mailmigraties en webmailbewerkingen vanuit een HTTP-client of AI-agent. Dat omvat e-mail lezen en verzenden, concepten, planning, mappen, contactpersonen, agenda's, identiteiten, sjablonen en geblokkeerde afzenders. Geverifieerde verzoeken gebruiken een bearer-token, antwoorden zijn in JSON en API-activiteit wordt gecontroleerd.

Wat je krijgt

  • REST API v1 met een JSON-indeling voor verzoeken en antwoorden.
  • Bearer-tokenauthenticatie: geen cookies of sessies voor geverifieerde API-aanroepen.
  • Idempotentiesleutels bij de schrijfbewerkingen die deze vereisen, zodat opnieuw proberen geen dubbel werk veroorzaakt.
  • Snelheidslimiet per token met Retry-After-headers.
  • Auditlogboek zichtbaar in je dashboard onder AI Agents & API → Audit Log.
  • MCP-server met een catalogus die is gefilterd op de referentie, het transport en de veiligheidsinstellingen van de huidige verbinding. Een beperkte projectverbinding ziet daarom alleen de tools die deze kan gebruiken.
  • Domeinaliassen: koppel adressen die alleen ontvangen op een secundair domein aan dezelfde lokale delen op een primair domein, met opgeslagen tegenover actieve bezorgstatussen en veilige verwijdering. Zie Domeinaliassen via API en MCP.
  • Architectuur met twee tokens: afzonderlijke ops-tokens voor infrastructuur en berichttokens voor volledige e-mailbewerkingen zoals lezen, verzenden, concepten, planning, contactpersonen, agenda's, identiteiten, sjablonen en mappen.
  • Inzicht in uitgaande bezorging en bounces: haal het overzicht van verzonden, bezorgde, hard-bounce- en soft-bounceberichten uit het dashboard op, plus SMTP-codes en antwoorden per ontvanger. Zie Bezorging en bounces.
  • Opslaggebruik van mailboxen: list_mailboxes en get_mailbox retourneren used_mb, quota_mb, allocation_mb en is_pooled, zodat een agent zonder dashboardtoegang mailboxen kan herkennen die hun limiet naderen.
  • White Label-beheer: controleer de configuratie, beheer branding per domein, nodig klanten uit, beheer rollen en domeinen, schort toegang op of herstel deze en bekijk activiteit via API of MCP. Zie de brandinghandleiding en handleiding voor teambeheer.

Drive API en bestandsautomatisering

Drive maakt deel uit van het openbare API-oppervlak. Het omvat Account Drive en Drive-ruimtes van mailboxen, gebruik, bladeren door mappen, uploads, bestands- en mapbeheer, Prullenbak, bulkacties, openbare deellinks, wachtwoordbeheer voor synchronisatieapparaten en alleen-lezenstatus van de Drive Storage Add-on.

Drive gebruikt elf ops-tokenbereiken: drive:account:read, drive:account:write, drive:account:share, drive:account:purge, drive:mailbox:read, drive:mailbox:write, drive:mailbox:share, drive:mailbox:purge, drive:addon:read, drive:devices:read en drive:devices:write. Factureringsacties voor de Drive Add-on, aankoop, formaat wijzigen en annuleren, blijven alleen beschikbaar in het dashboard en worden niet aangeboden als API- of MCP-schrijfbewerkingen.

Begin met het Drive API-overzicht of de Drive API-snelstart.

Architectuur met twee tokens

De API gebruikt twee onafhankelijke tokentypen. Je kunt een of beide gebruiken, afhankelijk van je behoeften:

Tokentype Voorvoegsel Wat het ontgrendelt
Ops-token tm_live_ Account- en infrastructuurtools: White Label, domeinen, DNS, mailboxen, uitnodigingen, Drive, migraties, SMTP, tickets, facturering en Cloudflare
Berichttoken tm_msg_ Webmailbewerkingen: berichten, mappen, bijlagen, concepten, gepland verzenden, spam/ham-rapportage, bulkacties, contactpersonen, contactgroepen, agenda, hulp bij opstellen, identiteiten, sjablonen en geblokkeerde afzenders

Ops-tokens en berichttokens hebben afzonderlijke bereiken en snelheidslimieten. Eén agent kan beide tokens tegelijk gebruiken door ze in de MCP-serveromgeving te configureren.

Berichttokens zijn beschikbaar voor de abonnementen Pro en Agency.

Voordat je begint

  • Alle abonnementen hebben API-toegang:
    • Nano: Email Verifier. Voeg een Drive Storage Add-on toe voor volledige toegang tot de Drive API en MCP.
    • Starter: Volledige Drive, volledige Email Verifier en alleen-lezentoegang tot de overige infrastructuurgebieden. Gebruik het dashboard voor die schrijfacties.
    • Pro / Agency: Volledige toegang tot de basis-API, inclusief berichttokens. White Label-bereiken worden toegevoegd zolang de proefperiode of betaalde add-on actief is.
  • Een AI-agent verbinden? Voeg https://trekmail.net/mcp toe als externe MCP-server in een compatibele client. Als deze browserautorisatie ondersteunt, is geen handmatig token nodig. Zie AI-agenten verbinden (MCP) voor externe, CLI/desktop-, bridge- en zelfgehoste opties.
  • Je eigen integratie bouwen? Maak een tm_live_-token onder AI Agents & API → Tokens → Create token en verzend dit als Authorization: Bearer …. Zie API-tokens maken en beheren.
  • Nieuw met de API? Klik bovenaan de pagina AI Agents & API op Start tour voor een korte rondleiding door verbindingsmethoden, tokenbeheer, verbonden apps en het auditlogboek.

Hoe authenticatie werkt

Elk verzoek moet je token bevatten in de Authorization-header:

Authorization: Bearer tm_live_abc123...

Ops-tokens beginnen met tm_live_ en berichttokens met tm_msg_. Beide worden bij het maken één keer weergegeven en kunnen daarna niet opnieuw worden getoond.

Als het token ontbreekt, ingetrokken of verlopen is, retourneert de API 401 met de foutcode unauthenticated.

Basis-URL en versiebeheer

Alle endpoints bevinden zich onder:

https://trekmail.net/api/v1

De basis-URL staat in je dashboard AI Agents & API onder Quick Reference. De versie staat in het URL-pad. Wanneer een v2 wordt geïntroduceerd, als dat ooit gebeurt, blijft v1 werken.

Antwoordindeling

Geslaagde antwoorden retourneren JSON met een sleutel data voor afzonderlijke resources of een gepagineerde lijst:

{
  "data": [
    { "id": 1, "domain": "example.com", "status": "active" }
  ],
  "links": { "next": "...", "prev": null },
  "meta": { "current_page": 1, "last_page": 1, "total": 1 }
}

Foutantwoorden volgen een consistente structuur:

{
  "error": {
    "code": "unauthenticated",
    "message": "Invalid or expired API token",
    "hint": "Check that your token is correct and has not been revoked.",
    "request_id": "req_abc123",
    "retryable": false
  }
}

Verzoek-ID's

Elk antwoord bevat een X-Request-Id-header. Je kunt ook een eigen waarde meegeven via X-Request-Id in het verzoek. Deze wordt teruggestuurd en vastgelegd in het auditspoor.

Snelheidslimieten

Elk token heeft een snelheidslimiet per minuut. Wanneer je de limiet bereikt, retourneert de API 429 met een Retry-After-header die aangeeft wanneer je het opnieuw kunt proberen.

Destructieve bewerkingen (verwijderintenties) hebben daarnaast een dagelijkse limiet per token en een afkoelperiode tussen opeenvolgende verwijderingen.

Schrijfbewerkingen voor migraties (starten, annuleren, opnieuw proberen) hebben een eigen snelheidslimiet van 10 verzoeken per minuut per token, plus een serverbrede gelijktijdigheidslimiet die 503 retourneert wanneer wereldwijd te veel migraties worden uitgevoerd.

Berichttokens gebruiken afzonderlijke limieten. De standaardwaarden zijn 30 leesverzoeken per minuut per token, 60 verzendverzoeken per minuut per token, 5,000 geslaagde leesbewerkingen per dag per token en 100 API-verzendingen per dag voor één mailbox. Een tweede veiligheidsteller voor verzenden staat standaard op 500 per token per dag; de lagere mailboxlimiet is normaal gesproken als eerste van toepassing. Deze API-beveiligingen vervangen de beheerde SMTP-limieten van je abonnement of de eigen limieten van een externe provider niet.

Idempotentie

Endpoints die de status wijzigen en als idempotent zijn gemarkeerd, vereisen een Idempotency-Key-header. Dit omvat maken, bijwerken, verzenden en verwijderen wanneer een automatische nieuwe poging anders dubbel werk kan veroorzaken. Leesachtige POST-acties, zoals providerdetectie of een verbindingstest, vereisen er geen; controleer de endpointtabel of OpenAPI-specificatie. Als je dezelfde sleutel met dezelfde body verzendt, speelt de API het oorspronkelijke antwoord opnieuw af zonder duplicaten te maken.

Idempotency-Key: create-mailbox-alice-2024

Als je dezelfde sleutel met een andere body verzendt, retourneert de API 409 Conflict.

Toewijzing van mailboxopslag

Elk endpoint dat een mailbox of uitnodiging maakt, POST /api/v1/mailboxes, /api/v1/mailboxes:bulk, /api/v1/mailboxes/invites, /api/v1/mailboxes/invites:bulk, accepteert een optioneel geheel getal storage_allocation_mb.

Waarde Betekenis
Weggelaten (of null) De mailbox gebruikt de gedeelde accountpool (standaard).
Positief geheel getal (MB) De mailbox is toegewezen. Precies die hoeveelheid wordt uit de accountpool gereserveerd voor deze mailbox.

Toewijzingen worden gevalideerd aan de hand van de actuele pool, verminderd met bestaande toegewezen mailboxen en openstaande toegewezen uitnodigingen. Bulk-endpoints valideren daarnaast de som van de toewijzingen in de batch en wijzen de volledige batch af met 422 storage_pool_exceeded als deze te veel zou toewijzen. De pool wordt bijgewerkt wanneer een toegewezen mailbox wordt verwijderd, een uitnodiging wordt ingewisseld (de toewijzing gaat naar de nieuwe mailbox) en een openstaande uitnodiging verloopt.

Voor uitnodigingen wordt de toewijzing bij de toegangscode opgeslagen en bij het inwisselen naar de nieuwe mailbox gekopieerd. Als de pool op dat moment niet meer groot genoeg is voor de gevraagde toewijzing (bijvoorbeeld omdat een andere beheerder intussen een toegewezen hoeveelheid heeft vergroot), wordt de nieuwe mailbox soepel teruggezet naar gedeelde opslag in plaats van dat het inwisselen mislukt; de ontvanger ziet een melding op de succespagina.

Drive-toegang voor mailboxen

Elke mailbox heeft een niveau drive_access dat bepaalt hoeveel van Drive de gebruiker ervan in webmail kan bereiken. Het wordt geretourneerd in de mailboxresource en kan worden ingesteld met PATCH /api/v1/mailboxes/{id} of, voor veel mailboxen tegelijk, met POST /api/v1/mailboxes:drive-access.

Waarde Betekenis
full Alles: het tabblad Drive, uploaden en delen, bestanden zoeken en synchroniseren met een computer. De standaardwaarde.
attachments_only Geen Drive in webmail en geen synchronisatie. Verzenden werkt nog: een bestand boven de bijlagedrempel wordt als downloadlink verzonden en die kopie wordt na de bewaartermijn verwijderd.
disabled Geen Drive en een bestand boven de drempel kan helemaal niet worden bijgevoegd.

Opslag wordt voor het hele account gedeeld, dus hiermee bepaal je hoeveel van die pool één persoon met bestanden kan vullen.

Aanmelden bij mailbox opschorten

Aanmelden bij een mailbox kan worden opgeschort terwijl deze e-mail blijft ontvangen: webmail, IMAP, SMTP en apparaatwachtwoorden worden geweigerd en open sessies eindigen, maar de bezorging blijft onaangetast. Daardoor bouncet niets en wacht alles totdat aanmelden wordt hersteld. Stel dit in met POST /api/v1/mailboxes/{id}:suspend-login (en :resume-login) of voor meerdere mailboxen met POST /api/v1/mailboxes:login-access.

De mailboxresource meldt dit als login_suspended, login_suspended_at en login_suspended_reason. Lees login_suspended om te bepalen of de persoon zich kan aanmelden en status om te bepalen of de mailbox zelf actief is. Een opgeschorte mailbox blijft active, omdat deze nog e-mail accepteert. :pause is iets anders: dit stelt status in op disabled en stopt ook de bezorging.

Zie Aanmelden bij mailbox opschorten via API.

Het bulk-endpoint accepteert precies één selector, mailbox_ids, domain_id of all, en retourneert wat het heeft gedaan:

{ "data": { "drive_access": "attachments_only", "matched": 24, "updated": 21, "skipped_shared": 3 } }

domain_id is de geschikte selector wanneer één domein één klant vertegenwoordigt. Mailboxen die al op het gevraagde niveau staan, tellen als matched maar niet als updated, zodat de aanroep veilig kan worden herhaald.

Gedeelde mailboxen worden bij het afzonderlijke endpoint geweigerd met 422 drive_access_not_applicable en door het bulk-endpoint overgeslagen en meegeteld: ze hebben geen eigen webmailgebruiker, dus leden openen ze met hun eigen niveau en een waarde op de gedeelde rij zou niets veranderen.

De beperking geldt voor zowel de API als de interface. De Drive-ruimte van een beperkte mailbox ontbreekt in GET /api/v1/drive/spaces, de bestanden antwoorden op ID met 404 en er kan geen synchronisatieapparaat voor worden gemaakt.

Doorstuuradressen

GET /api/v1/domains/{id}/forwarding-addresses retourneert meer dan alleen de lijst, omdat twee eigenschappen van een doorstuuradres niet in het adres zelf zichtbaar zijn:

{
  "data": [ { "id": 8, "address": "sales@acme.com", "local_part": "sales",
              "domain_id": 4, "recipients": ["team@example.net"], "is_active": true } ],
  "limits": { "used": 1, "max": 100, "recipients_per_address": 15 },
  "delivery": { "active": true, "requires_plan": "pro",
                "paused_until": null, "paused_reason": null }
}
  • limits.max geldt per domein en is afhankelijk van het abonnement: 100 voor Pro, 300 voor Agency en 25 opgeslagen maar inactief voor Nano of Starter.
  • delivery.active geeft aan of deze regels op dit moment e-mail doorsturen. Het is false bij een abonnement onder requires_plan en false zolang paused_until is ingesteld (het account heeft de verzendsnelheid per uur overschreden; zie Verzendlimieten per abonnement). Een regel kan is_active: true zijn en toch niet bezorgen, dus lees delivery, niet alleen is_active, voordat je meldt dat doorsturen werkt.

Aanmaken met een abonnement dat niet kan bezorgen is toegestaan en retourneert 201: de regel wordt opgeslagen en gaat na een upgrade werken. Dit weerspiegelt het dashboard, dat zulke regels als opgeslagen en inactief toont.

Afwijzingen komen terug als 422 met error.code ingesteld op validation_error of limit_exceeded. Mogelijke oorzaken zijn een adres dat al op het domein wordt gebruikt, een ontvanger op hetzelfde domein (wat een lus zou veroorzaken), een ontvangend domein zonder werkende MX of een vol budget per domein.

POST en DELETE voor deze endpoints vereisen een Idempotency-Key; PATCH niet.

Bezorggeschiedenis

GET /api/v1/domains/{id}/forwarding-addresses/{addressId}/log retourneert wat er werkelijk met recente e-mail is gebeurd, nieuwste eerst:

{
  "data": [
    { "id": 91, "occurred_at": "2026-07-27T09:12:04+00:00", "outcome": "delivered",
      "from": "rfq@northgatesupply.com", "to": "sales@example.net",
      "smtp_code": "2.0.0", "smtp_response": "250 2.0.0 OK" }
  ],
  "address": "sales@acme.com",
  "window": { "retention_days": 30, "max_events": 200 }
}

outcome is delivered, deferred (tijdelijke fout, nog bezig met opnieuw proberen), failed (de server van de ontvanger heeft het bericht geweigerd) of blocked. Dit laatste betekent dat ons spamfilter het bericht voor het doorsturen heeft tegengehouden, zodat het de ontvanger helemaal niet heeft bereikt. blocked als bounce behandelen zou iemand de ontvangende server laten onderzoeken voor een probleem dat op onze server ontstond.

limit (1-200, standaard 100) is de enige parameter. Het venster is de bewaartermijn van het abonnement: 30 dagen bij Agency en elders 7. Er zijn geen oudere gegevens om op te vragen, omdat doorgestuurde gebeurtenissen worden opgeschoond.

Gedeelde mailboxen (team)

Een gedeelde mailbox is een teaminbox zoals support@ of sales@ die leden openen via hun eigen gewone mailboxaccount, in Webmail en, wanneer native toegang is ingeschakeld, als gedelegeerde IMAP-map. Er is geen gedeeld wachtwoord of afzonderlijke aanmelding. Toegang is vlak: elk lid kan lezen en één vlag can_send bepaalt of dat lid als het adres kan antwoorden (true) of alleen-lezentoegang heeft (false). Er zijn geen ledenrollen.

GET /api/v1/mailboxes en GET /api/v1/mailboxes/{id} retourneren nu mailbox_type ("user" of "shared") en een Booleaanse waarde is_shared; gedeelde mailboxen bevatten ook shared_member_count. Gebruik deze velden om een teaminbox van een normale mailbox te onderscheiden voordat je de leden-endpoints aanroept.

Endpoint Methode Vereist bereik Wat het doet
/api/v1/mailboxes/{id}/members GET mailboxes:read Vermeldt leden van een gedeelde mailbox (per lid: member_mailbox_id, email, can_read, can_send)
/api/v1/mailboxes/{id}/members POST mailboxes:write Voegt een lid toe, body {member_mailbox_id, can_send?} (can_send is standaard true)
/api/v1/mailboxes/{id}/members/{member} PATCH mailboxes:write Schakelt antwoordtoegang van een lid om, body {can_send}
/api/v1/mailboxes/{id}/members/{member} DELETE mailboxes:write Verwijdert een lid (een gedeelde mailbox houdt altijd ten minste één lid)
/api/v1/shared-mailboxes POST mailboxes:create Maakt een gedeelde mailbox, body {domain_id, local_part, display_name, member_mailbox_ids[], storage_shared?, storage_mb?}
/api/v1/mailboxes/{id}/convert-to-shared POST mailboxes:write Zet een bestaande mailbox om in een gedeelde mailbox, body {member_mailbox_ids[]} (roteert het oude wachtwoord zodat aanmelden niet meer mogelijk is; retourneert 202 conversion_pending met automatisch opnieuw proberen als backendsynchronisatie nog niet is bevestigd)
/api/v1/mailboxes/{id}/convert-to-regular POST mailboxes:write Zet een gedeelde mailbox terug naar een gewone mailbox, body {password} (verwijdert leden en stelt een nieuw aanmeldwachtwoord in)

De leden-endpoints hergebruiken je bestaande bereiken mailboxes:read / mailboxes:write. Er is geen afzonderlijk bereik voor gedeelde mailboxen.

Roep GET /api/v1/mailboxes/{member_mailbox_id}/client-setup aan voor de gewone mailbox van een lid om native toegang via e-mailapps te ontdekken. Het object shared_mailboxes meldt duurzame native gereedheid, effectieve gereedheid en reden voor Send As, exacte paden voor Inbox/Sent/Archive/Junk en toegestane bewerkingen. can_send is de toegewezen machtiging Can reply, geen bewijs dat SMTP momenteel gereed is. Het endpoint retourneert nooit een wachtwoord. Aanroepen met de ID van de gedeelde mailbox retourneert 422 direct_login_unavailable, omdat het gedeelde adres niet rechtstreeks kan worden geverifieerd.

Als een lid wordt verwijderd, can_send wordt gewijzigd of een gedeelde mailbox in een gewone mailbox wordt omgezet, worden mailservermachtigingen gesynchroniseerd wanneer native toegang is ingeschakeld. Een antwoord 503 native_access_sync_failed kan opnieuw worden geprobeerd en garandeert dat het lidmaatschap, de machtiging of het mailbox-type ongewijzigd is gebleven in plaats van de bewerking gedeeltelijk toe te passen.

Beschikbare endpoints

Drive heeft een eigen naslagwerk en wordt hier niet herhaald; zie het Drive API-overzicht. De SMTP-endpoints op accountniveau die voor achterwaartse compatibiliteit behouden zijn, worden beschreven onder SMTP-routering per domein en niet als actuele endpoints vermeld.

Endpoint Methode Vereist bereik
/api/v1/domains GET domains:read
/api/v1/domains/{id} GET domains:read
/api/v1/domains/{id}/matching-addresses GET domains:read
/api/v1/domains/{id}/matching-addresses PUT domains:write
/api/v1/domains/{id}/matching-addresses DELETE domains:write
/api/v1/domains/{id}/dns-requirements GET domains:dns:read
/api/v1/domains/{id}/dns-recheck POST domains:dns:recheck
/api/v1/domains/{id}/spam-metrics GET domains:read
/api/v1/domains/{id}/spam-metrics/summary GET domains:read
/api/v1/domains/{id}/deliverability GET domains:read
/api/v1/domains/{id}/bounces GET domains:read
/api/v1/domains/{id}/signature GET domains:read
/api/v1/domains/{id}/forwarding-addresses GET domains:read
/api/v1/domains/{id}/forwarding-addresses/{addressId}/log GET domains:read
/api/v1/dns-checks/{id} GET domains:dns:read
/api/v1/mailboxes GET mailboxes:read
/api/v1/mailboxes POST mailboxes:create
/api/v1/mailboxes/{id} PATCH mailboxes:write
/api/v1/mailboxes/invites POST mailboxes:invites:create
/api/v1/mailboxes/invites:bulk POST mailboxes:invites:create
/api/v1/mailboxes:bulk POST mailboxes:create
/api/v1/mailboxes/{id}/forwarding GET mailboxes:forwarding:read
/api/v1/mailboxes/{id}/forwarding PUT mailboxes:forwarding:write
/api/v1/mailboxes/{id}/rules GET mailboxes:rules:read
/api/v1/mailboxes/{id}/rules POST mailboxes:rules:write
/api/v1/mailboxes/{id}/rules/{ruleId} GET mailboxes:rules:read
/api/v1/mailboxes/{id}/rules/{ruleId} PUT mailboxes:rules:write
/api/v1/mailboxes/{id}/rules/{ruleId} DELETE mailboxes:rules:write
/api/v1/mailboxes/{id}/rules/reorder PATCH mailboxes:rules:write
/api/v1/mailboxes/{id}/auto-reply GET mailboxes:auto-reply:read
/api/v1/mailboxes/{id}/auto-reply PUT mailboxes:auto-reply:write
/api/v1/mailboxes/{id}/sieve GET mailboxes:rules:read
/api/v1/mailboxes/{id}/sieve PUT mailboxes:rules:write
/api/v1/mailboxes/{id}:delete-intent POST mailboxes:delete
/api/v1/delete-intents/{id}:confirm POST mailboxes:delete
/api/v1/me GET (elk geldig ops-token)
/api/v1/mailboxes/{id}/message-tokens POST mailboxes:message-tokens:manage
/api/v1/mailboxes/{id}/message-tokens GET mailboxes:message-tokens:manage
/api/v1/message-tokens/{id} DELETE mailboxes:message-tokens:manage
/api/v1/messages GET messages:read (berichttoken)
/api/v1/messages/{uid} GET messages:read (berichttoken)
/api/v1/messages/{uid} PATCH messages:write (berichttoken)
/api/v1/messages/send POST messages:send (berichttoken)
/api/v1/messages/_ping GET messages:read (berichttoken, diagnostisch)
/api/v1/messages/{uid}/attachments/{index} GET messages:read (berichttoken)
/api/v1/messages/{uid}/attachments GET messages:read (berichttoken)
/api/v1/messages/{uid}/raw GET messages:read (berichttoken; retourneert raw_base64, encoding, content_type, size_bytes)
/api/v1/messages/folders POST messages:write (berichttoken)
/api/v1/messages/folders/{path} PATCH messages:write (berichttoken)
/api/v1/messages/folders/{path} DELETE messages:write (berichttoken)
/api/v1/messages/{uid}:spam POST messages:write (berichttoken)
/api/v1/messages/{uid}:ham POST messages:write (berichttoken)
/api/v1/messages/bulk POST messages:write (berichttoken)
/api/v1/messages/folders:empty POST messages:write (berichttoken)
/api/v1/messages/drafts POST messages:write (berichttoken); retourneert uid + uidvalidity
/api/v1/messages/drafts/{uid} PUT messages:write (berichttoken); vereist de uidvalidity van het concept
/api/v1/messages/scheduled POST messages:send (berichttoken)
/api/v1/messages/scheduled GET messages:read (berichttoken)
/api/v1/messages/scheduled/{id} PATCH messages:send (berichttoken)
/api/v1/messages/scheduled/{id} DELETE messages:send (berichttoken)
/api/v1/messages/contacts GET messages:read (berichttoken)
/api/v1/messages/contacts POST messages:write (berichttoken)
/api/v1/messages/contacts/{id} PATCH messages:write (berichttoken)
/api/v1/messages/contacts/{id} DELETE messages:write (berichttoken)
/api/v1/messages/contacts/import POST messages:write (berichttoken)
/api/v1/messages/contacts/export GET messages:read (berichttoken)
/api/v1/messages/contact-groups GET messages:read (berichttoken)
/api/v1/messages/contact-groups/{id}/members GET messages:read (berichttoken)
/api/v1/messages/external-accounts GET messages:read (berichttoken)
/api/v1/messages/external-accounts POST messages:write (berichttoken)
/api/v1/messages/external-accounts/{id} PATCH messages:write (berichttoken)
/api/v1/messages/external-accounts/{id} DELETE messages:write (berichttoken)
/api/v1/messages/external-accounts/detect POST messages:read (berichttoken)
/api/v1/messages/external-accounts/test POST messages:write (berichttoken)
/api/v1/messages/external-accounts/{id}/test POST messages:write (berichttoken)
/api/v1/messages/_me GET elk berichttoken (introspectie)
/api/v1/messages/calendar/events GET messages:read (berichttoken)
/api/v1/messages/calendar/events POST messages:write (berichttoken)
/api/v1/messages/calendar/events/{id} PATCH messages:write (berichttoken)
/api/v1/messages/calendar/events/{id} DELETE messages:write (berichttoken)
/api/v1/messages/{uid}/reply GET messages:read (berichttoken)
/api/v1/messages/{uid}/reply-all GET messages:read (berichttoken)
/api/v1/messages/{uid}/forward GET messages:read (berichttoken)
/api/v1/messages/contact-groups POST messages:write (berichttoken)
/api/v1/messages/contact-groups/{id} PATCH messages:write (berichttoken)
/api/v1/messages/contact-groups/{id} DELETE messages:write (berichttoken)
/api/v1/messages/contact-groups/{id}/members POST messages:write (berichttoken)
/api/v1/messages/contact-groups/{id}/members DELETE messages:write (berichttoken)
/api/v1/messages/identities GET messages:read (berichttoken)
/api/v1/messages/identities POST messages:write (berichttoken)
/api/v1/messages/identities/reply-policy PATCH messages:write (berichttoken)
/api/v1/messages/identities/{id} PATCH messages:write (berichttoken)
/api/v1/messages/identities/{id} DELETE messages:write (berichttoken)
/api/v1/messages/templates GET messages:read (berichttoken)
/api/v1/messages/templates POST messages:write (berichttoken)
/api/v1/messages/templates/{id} PATCH messages:write (berichttoken)
/api/v1/messages/templates/{id} DELETE messages:write (berichttoken)
/api/v1/messages/blocked-senders GET messages:read (berichttoken)
/api/v1/messages/blocked-senders POST messages:write (berichttoken)
/api/v1/messages/blocked-senders/{id} DELETE messages:write (berichttoken)
/api/v1/mailboxes/{id}/enable-imap POST mailboxes:write (ops-token)
/api/v1/migrations/test-connection POST migrations:write
/api/v1/migrations GET migrations:read
/api/v1/migrations/{id} GET migrations:read
/api/v1/migrations POST migrations:write
/api/v1/migrations/{id}:cancel POST migrations:write
/api/v1/migrations/{id}:retry POST migrations:write
/api/v1/migrations/{id} DELETE migrations:write
/api/v1/migrations/bulk/preview POST migrations:write
/api/v1/migrations/bulk POST migrations:write
/api/v1/migrations/bulk GET migrations:read
/api/v1/migrations/bulk/{batch} GET migrations:read
/api/v1/migrations/bulk/{batch}:cancel POST migrations:write
/api/v1/migrations/bulk/{batch}:retry POST migrations:write
/api/v1/migrations/bulk/{batch}:resume POST migrations:write
/api/v1/migrations/bulk/{batch} DELETE migrations:write
/api/v1/migrations/bulk/{batch}/jobs/{job}/password PATCH migrations:write
/api/v1/account GET account:read
/api/v1/billing/status GET billing:read
/api/v1/billing/invoices GET billing:read
/api/v1/domains POST domains:create
/api/v1/domains/{id} DELETE domains:delete
/api/v1/domains/{id}/catch-all PATCH domains:write
/api/v1/domains/{id}/mail-hosting PATCH domains:write
/api/v1/domains/{id}/forwarding-addresses POST domains:write
/api/v1/domains/{id}/forwarding-addresses/{addressId} PATCH domains:write
/api/v1/domains/{id}/forwarding-addresses/{addressId} DELETE domains:write
/api/v1/domains/{id}/dkim:retry POST domains:write
/api/v1/domains/{id}/note PATCH domains:write
/api/v1/domains/{id}/signature PATCH domains:write
/api/v1/domains/{id}/branding GET domains:read
/api/v1/domains/{id}/branding PATCH domains:write
/api/v1/domains/{id}/branding/logo/{slot} PUT domains:write
/api/v1/domains/{id}/branding/logo/{slot} DELETE domains:write
/api/v1/domains/{id}/branding/verify-dns POST domains:write
/api/v1/domains/{id}/branding/preview POST domains:write
/api/v1/domains/{id}/branding DELETE domains:write
/api/v1/domains:bulk-add POST domains:create
/api/v1/mailboxes/{id} GET mailboxes:read
/api/v1/mailboxes/{id}/client-setup GET mailboxes:read
/api/v1/mailboxes/{id}/apple-mail-profile GET mailboxes:read
/api/v1/mailboxes/{id}/bounces GET mailboxes:read
/api/v1/mailboxes/{id}/password POST mailboxes:write
/api/v1/mailboxes/{id}/note PATCH mailboxes:write
/api/v1/mailboxes/{id}:pause POST mailboxes:write
/api/v1/mailboxes/{id}:restore POST mailboxes:delete
/api/v1/mailboxes/{id}:resume POST mailboxes:write
/api/v1/mailboxes/{id}:suspend-login POST mailboxes:write
/api/v1/mailboxes/{id}:resume-login POST mailboxes:write
/api/v1/mailboxes:login-access POST mailboxes:write
/api/v1/mailboxes:drive-access POST mailboxes:write
/api/v1/mailboxes/{id}/members GET mailboxes:read
/api/v1/mailboxes/{id}/members POST mailboxes:write
/api/v1/mailboxes/{id}/members/{member} PATCH mailboxes:write
/api/v1/mailboxes/{id}/members/{member} DELETE mailboxes:write
/api/v1/shared-mailboxes POST mailboxes:create
/api/v1/mailboxes/{id}/convert-to-shared POST mailboxes:write
/api/v1/mailboxes/{id}/convert-to-regular POST mailboxes:write
/api/v1/tickets GET tickets:read
/api/v1/tickets/{id} GET tickets:read
/api/v1/tickets/{id}/messages GET tickets:read
/api/v1/tickets POST tickets:write
/api/v1/tickets/{id}:mark-seen POST tickets:write
/api/v1/tickets/{id}/reply POST tickets:write
/api/v1/tickets/{id}:close POST tickets:write
/api/v1/domains/{id}/smtp GET smtp:read
/api/v1/domains/{id}/smtp PUT smtp:write
/api/v1/domains/{id}/smtp/profiles GET smtp:read
/api/v1/domains/{id}/smtp/profiles POST smtp:write
/api/v1/domains/{id}/smtp/profiles/{connectionId} PUT smtp:write
/api/v1/domains/{id}/smtp/profiles/{connectionId} DELETE smtp:write
/api/v1/domains/{id}/smtp:test POST smtp:write
/api/v1/domains/{id}/smtp:test-status/{jobId} GET smtp:read
/api/v1/smtp/default GET smtp:read
/api/v1/smtp/default PUT smtp:write
/api/v1/smtp (verouderd, achterwaarts compatibel) GET smtp:read
/api/v1/smtp (verouderd, achterwaarts compatibel) PUT smtp:write
/api/v1/smtp/{id} (verouderd, achterwaarts compatibel) DELETE smtp:write
/api/v1/smtp:test (verouderd, achterwaarts compatibel) POST smtp:write
/api/v1/smtp:test-status/{jobId} (verouderd, achterwaarts compatibel) GET smtp:read
/api/v1/messages/{uid} DELETE messages:write (berichttoken)
/api/v1/messages/{uid}:move POST messages:write (berichttoken)
/api/v1/messages/folders GET messages:read (berichttoken)
/api/v1/mailboxes/{id}/aliases GET mailboxes:read
/api/v1/mailboxes/{id}/aliases POST mailboxes:write
/api/v1/mailboxes/{id}/aliases/{aliasId} PATCH mailboxes:write
/api/v1/mailboxes/{id}/aliases/{aliasId} DELETE mailboxes:write
/api/v1/verify POST verify:write
/api/v1/verify/bulk POST verify:write
/api/v1/verify/bulk/{jobId} GET verify:read
/api/v1/verify/bulk/{jobId}/download GET verify:read
/api/v1/verify/credits GET verify:read
/api/v1/verify/bulk GET verify:read
/api/v1/verify/bulk/{jobId}/cancel POST verify:write
/api/v1/verify/bulk/{jobId} DELETE verify:write
/api/v1/cloudflare/validate-token POST cloudflare:read
/api/v1/cloudflare/zones POST cloudflare:read
/api/v1/cloudflare/connect POST cloudflare:write
/api/v1/cloudflare/preview POST cloudflare:read
/api/v1/cloudflare/apply POST cloudflare:write
/api/v1/cloudflare/tokens GET cloudflare:read
/api/v1/cloudflare/tokens/{id} DELETE cloudflare:delete

De Cloudflare-endpoints volgen dezelfde stroom als het dashboard: valideer een token, vermeld zones, verbind domeinen, bekijk de DNS-wijzigingen als voorbeeld en pas ze vervolgens toe. Zowel /cloudflare/preview als /cloudflare/apply accepteert twee optionele instellingen per domein:

  • included_records, een toelatingslijst met de records die mogen worden aangepast, met de domein-ID als sleutel: { "123": ["mx_primary", "spf_record"] }. Weggelaten records worden overgeslagen, zodat je alleen MX en SPF kunt toepassen en later voor DKIM kunt terugkomen. Laat het veld weg om alle records toe te passen.
  • confirmed_conflicts: wanneer het voorbeeld een bestaand record met een andere waarde markeert, vermeld je hier de record-ID (in dezelfde vorm { domain_id: [record_ids] }) om vervanging toe te staan.

De record-ID's (mx_primary, spf_record, dkim_primary, dmarc_main, …) komen rechtstreeks uit het voorbeeldantwoord. Een normale agent vraagt dus eerst een voorbeeld op en stuurt daarna de gewenste ID's naar apply:

POST /api/v1/cloudflare/apply
{
  "domain_ids": [123],
  "included_records": { "123": ["mx_primary", "spf_record"] },
  "confirmed_conflicts": { "123": ["dmarc_main"] }
}

SMTP-routering per domein en accountstandaard

SMTP wordt per domein geconfigureerd. Elk domein kiest een van drie routes: beheerd verzenden via het platform, een opgeslagen SMTP-profiel (je eigen provider, herbruikbaar voor meerdere domeinen) of "niet geconfigureerd". Eén standaardinstelling voor het hele account bepaalt met welke route nieuwe domeinen beginnen.

Endpoints per domein (smtp:read / smtp:write):

Endpoint Methode Wat het doet
/api/v1/domains/{id}/smtp GET Huidige route: smtp_mode, effective_smtp_mode, profile, effective_profile
/api/v1/domains/{id}/smtp PUT Stelt de route in, body {smtp_mode: platform|profile|not_configured|inherit, smtp_connection_id?, set_account_default?, apply_to_all?}
/api/v1/domains/{id}/smtp/profiles GET Vermeldt de opgeslagen SMTP-profielen van het account
/api/v1/domains/{id}/smtp/profiles/{connectionId}/usage GET Vermeldt de exacte domeinen en Send As-adressen die een profiel gebruiken (geen referenties)
/api/v1/domains/{id}/smtp/profiles POST Maakt een profiel en gebruikt het voor dit domein
/api/v1/domains/{id}/smtp/profiles/{connectionId} PUT Werkt een profiel bij (heeft invloed op elk domein dat het gebruikt)
/api/v1/domains/{id}/smtp/profiles/{connectionId} DELETE Verwijdert een profiel (domeinen die het gebruiken worden toegewezen aan de accountstandaard)
/api/v1/domains/{id}/smtp:test POST Test een route, retourneert {job_id, poll_url}
/api/v1/domains/{id}/smtp:test-status/{jobId} GET Vraagt de status van een testtaak op

Enkele opmerkingen over de body van de route:

  • smtp_mode=platform selecteert beheerd verzenden; smtp_mode=profile vereist smtp_connection_id; not_configured wist de route.
  • Met smtp_mode=inherit volgt het domein live de accountstandaard: wanneer de standaard verandert, verandert dit domein mee. De webinterface schrijft altijd concrete routes, maar de backend ondersteunt nog steeds inherit. Daarom retourneert GET de waarde effective_smtp_mode, die laat zien waarnaar inherit op dit moment wordt omgezet.
  • set_account_default: true is het API-equivalent van de schakelaar Make this the account default in het dashboard (nieuwe domeinen beginnen met deze route). apply_to_all: true is de knop Apply to all domains (een eenmalige omschakeling van elk domein naar deze route).

Endpoints voor de accountbrede standaard (smtp:read / smtp:write):

Endpoint Methode Wat het doet
/api/v1/smtp/default GET Retourneert default_smtp_mode (null totdat je er een instelt), effective_default_smtp_mode (de basiswaarde van het abonnement wanneer niets is ingesteld), default_smtp_connection_id en profile
/api/v1/smtp/default PUT Stelt de standaard in, body {smtp_mode: platform|profile|not_configured, smtp_connection_id?, apply_to_all?}

Als je een profiel verwijdert dat de accountstandaard was, wordt de standaard teruggezet naar de basiswaarde van het abonnement.

Verouderde endpoints. De GET/PUT /api/v1/smtp-endpoints op accountniveau (en DELETE /api/v1/smtp/{id}, POST /api/v1/smtp:test, GET /api/v1/smtp:test-status/{jobId}) blijven beschikbaar voor achterwaartse compatibiliteit, maar beheren niet langer routering per domein: gebruik de bovenstaande endpoints per domein en /smtp/default. De verouderde MCP-tools get_smtp_config / update_smtp_config zijn om dezelfde reden afgeschaft.

White Label-branding, klanten en teamtoegang

Branding wordt per domein geconfigureerd met branding:read / branding:write. Een domein gebruikt zijn eigen merk (mode=custom), neemt de accountstandaard over (mode=inherit) of is uitgeschakeld. Een actieve White Label-proefperiode of betaalde add-on is vereist. Na annulering behoudt de eigenaar tijdens het weergegeven respijtvenster alleen-lezentoegang voor herstel. Lees de dns_records van het domein en publiceer precies die geretourneerde records. Leid geen hostnamen of CNAME-doelen af uit een voorbeeld.

Endpoint Methode Wat het doet
/api/v1/domains/{id}/branding GET Leest branding: mode, white_label_addon_active, brand, hosts, de te maken dns_records, cname_target en mail_zone
/api/v1/domains/{id}/branding PATCH Gedeeltelijke samenvoegupdate: mode, name, primary_color/accent_color, dashboard_enabled/dashboard_label, webmail_enabled/webmail_label, mail_zone_enabled, support_email, support_url, sender_email, scope
/api/v1/domains/{id}/branding/logo/{slot} PUT Uploadt een base64-logo (slot = light|dark|favicon; PNG/JPG, ICO voor favicon, ≤1 MB, geen SVG). De standaard scope=domain vereist de modus custom; expliciete scope=account_default op een inherit-domein vereist een onbeperkt token.
/api/v1/domains/{id}/branding/logo/{slot} DELETE Verwijdert een logoslot. Gebruikt dezelfde bereikregels voor domein/accountstandaard; DELETE ontvangt scope als queryparameter.
/api/v1/domains/{id}/branding/verify-dns POST Zet DNS-verificatie voor de merkhosts en de e-mailzone van het merk in de wachtrij
/api/v1/domains/{id}/branding/preview POST Maakt een kortstondige voorbeeld-URL (422 no_brand als branding niet is ingesteld)
/api/v1/domains/{id}/branding?scope=domain|all DELETE Wist branding voor dit domein of het hele account

PATCH is een gedeeltelijke samenvoeging, dus weggelaten velden blijven behouden. Als branding momenteel uitgeschakeld is, geef je mode mee om deze opnieuw in te schakelen. Een aangepaste sender_email moet op een domein met een geverifieerde DKIM-sleutel staan. mail_zone_enabled biedt e-mailapps en DAV-synchronisatie onder het eigen domein van het merk. Het hoort bij het merk en niet bij één domein, dus het vereist mode=custom of scope=account_default; een inherit-domein retourneert 422 inherited_brand. Lees mail_zone.dns_status, mail_zone.client_hosts_status, mail_zone.records, mail_zone.dav_url en mail_zone.dav_ready om inrichting te volgen en gebruik alleen een gereed DAV-adres. Zie de White Label Branding API- en MCP-handleiding voor de volledige agentworkflow.

Het White Label-oppervlak op accountniveau voegt 13 routes toe onder /api/v1/white-label: status en configuratievoortgang, een live toegangscatalogus, ledenlijst en levenscyclusacties, accountactiviteit en actie- en aanmeldgeschiedenis per lid. Het gebruikt members:read, members:write en activity:read. Toegang is altijd het snijpunt van het accountrecht, het huidige lidmaatschap van de persoon, de verlening aan de referentie en eventuele domeinbeperking. Zie White Label-teams beheren met API en MCP voor de routetabel en statusovergangen.

De OpenAPI-specificatie is beschikbaar op /api/openapi.json voor import in Postman, Insomnia of codegeneratoren.

Snelle oplossingen

  • 401 "unauthenticated": controleer of de header Authorization: Bearer <token> aanwezig is en of het token niet is ingetrokken of verlopen.
  • 403 "plan_api_disabled": het gevraagde bereik valt niet onder je abonnement. Nano omvat Email Verifier (en Drive als je de Drive Storage Add-on hebt gekocht). Upgrade naar Starter of hoger voor de rest van de API.
  • 403 "token_scope_blocked_by_plan": je token heeft bereiken die niet beschikbaar zijn in je huidige abonnement. Trek het token in en maak een nieuw token met toegestane bereiken.
  • 403 "scope_blocked_by_entitlement": een opgeslagen White Label-verlening is niet beschikbaar omdat de add-on inactief is of omdat tijdens de respijtperiode wordt geschreven. Activeer White Label opnieuw en geef de referentie daarna opnieuw uit of autoriseer deze opnieuw.
  • 403 "scope_blocked_by_membership": de huidige ledenrol is beperkter dan de gevraagde actie. Vraag de eigenaar om deze te wijzigen; opnieuw autoriseren kan het lidmaatschap op zichzelf niet verruimen.
  • 422 "missing_idempotency_key": voeg een Idempotency-Key-header toe aan de schrijfbewerking die in de endpointdocumentatie wordt genoemd.
  • 403 "mailbox_sending_paused": verzenden vanuit die mailbox is gestopt omdat de uitgaande e-mail niet meer van de eigenaar leek te zijn, meestal door een wachtwoord in verkeerde handen. Lezen, vermelden en alle andere endpoints blijven werken; alleen verzenden wordt geweigerd en opnieuw proberen heft de blokkering niet op. Het mailboxwachtwoord moet worden gewijzigd, waarna ondersteuning verzenden weer inschakelt. Zie Waarom kan ik geen e-mail verzenden?.
  • 429 snelheidslimiet: wacht gedurende de tijd in de Retry-After-header voordat je het opnieuw probeert.

E-mail verzenden: body, headers en bezorging

POST /api/v1/messages/send accepteert de verzoekvorm {to, subject, body: {text, html}, attachments, reply_to_message_id, headers}.

  • body.text en body.html zijn beide optioneel, maar ten minste één is vereist. Als je alleen body.text opgeeft, genereren we automatisch een HTML-alternatief met <p>-alinea's (lege regels scheiden alinea's; enkele nieuwe regels worden <br>), zodat het bericht in elke moderne client als gewone e-mail wordt weergegeven. Als je monospace nodig hebt, verzend je de letterlijke waarde <pre>...</pre> in body.html.
  • headers is een optioneel object met door de gebruiker opgegeven uitgaande headers. De toelatingslijst bestaat uit List-Unsubscribe, List-Unsubscribe-Post, Reply-To en elke aangepaste trackingheader X-*. Andere namen (From, Subject, Message-Id, Authentication-Results enzovoort) worden door het platform beheerd en met 422 geweigerd. Waarden met CR/LF worden ook geweigerd (bescherming tegen headerinjectie). Waarden zijn volgens RFC 2822 beperkt tot 998 tekens.
  • Zie voor bulk- en automatiseringstoepassingen de sectie Bezorgheaders voor bulkafzenders voor het instellen van List-Unsubscribe en de accountbrede schakelaar auto_list_unsubscribe.

Gerelateerde artikelen

Spring naar nabije gidsen die de workflow voortzetten.

We gebruiken noodzakelijke technologieën om TrekMail te laten werken en te beveiligen. Door te bevestigen staat u ook beperkte analyses en advertentiemeting toe zoals beschreven in ons Cookiebeleid.

Inloggen bij TrekMail

Toegang tot je dashboard, mailboxen en DNS.

of

12 tekens wachtwoorden komen overeen

of

Herstelmail verzonden

Als er een account bestaat voor dit e-mailadres, hebben we instructies gestuurd om je wachtwoord opnieuw in te stellen.

Door verder te gaan ga je akkoord met de TrekMail- Voorwaarden en het Privacybeleid.