Skip to content
WeZend

Kjerne-API-er

Sende meldinger

Hvert felt POST /v1/messages/send aksepterer, kanalfallback og hvordan frekvenstak per kategori fungerer.

POST /v1/messages/send er det ene endepunktet for alle kanaler.

Påkrevde felt

to, channel (én av sms, rcs, whatsapp, email, voice) og message er påkrevd — eller send en channels-array i stedet for channel/fallback (se nedenfor).

Kanalfallback

Angi en ordnet fallback-liste, eller den nyere channels-arrayen med primærkanalen først:

{
  "to": "+4512345678",
  "channels": ["whatsapp", "sms"],
  "message": "Bestillingen din er sendt."
}

Hvis WhatsApp-leveringen feiler, prøver plattformen automatisk på nytt via SMS — uten et eget API-kall.

Kanalspesifikke felt

  • E-post: sett subject, og htmlmessage (eller det eldre aliaset html) for HTML-body-en. message er fallback-en i ren tekst.
  • WhatsApp: send et whatsapp-objekt, f.eks. { "template": "order_shipped" }, for malmeldinger utenfor 24-timers sesjonsvinduet.
  • Voice: send et voice-objekt (f.eks. { "voice": "female", "language": "da-DK" }) for TTS-parametere.
  • Avsender-ID: sender må være en avsender-ID godkjent i Innstillinger → Avsender-ID-er for SMS/RCS — med mindre kontoen din har allow_unverified_sender aktivert for systemintegrasjoner.

Reply-To, avsendernavn og egne headere

Tre valgfrie e-postfelt:

  • reply_to — hvor svarene havner. Enten en ren adresse (support@firmaetditt.no) eller formen med visningsnavn (Support <support@firmaetditt.no>); adressedelen valideres som en e-postadresse. Feltet er med vilje ikke domenelåst — Reply-To er ikke envelope-avsenderen, så du kan la svar gå til hvilken som helst innboks du selv kontrollerer.
  • from_name — visningsnavnet i From, satt uavhengig av From-adressen.
  • headers — et objekt med headernavn → verdi, f.eks. { "X-Order-Id": "10432" }. Navn må matche [A-Za-z0-9][A-Za-z0-9-]*.

headers er en safelist, ikke passthrough. Disse navnene er reservert og kan ikke settes: List-Unsubscribe, List-Unsubscribe-Post, From, Sender, Return-Path, Reply-To, DKIM-Signature, Received, og alt som starter med X-WeZend — alle matchet uavhengig av store og små bokstaver. De beskytter etterlevelsen av one-click-avmelding, e-postautentiseringen og envelope-identiteten. Reply-To er reservert fordi det har sitt eget validerte reply_to-felt; en rå header ville omgå den valideringen.

Et reservert navn avvises, det forsvinner ikke i stillhet, og feilen navngir den aktuelle headeren:

{
  "to": "kunde@example.com",
  "channel": "email",
  "subject": "Kvitteringen din",
  "message": "Takk for bestillingen.",
  "headers": { "List-Unsubscribe": "<mailto:opt-out@example.com>" }
}
{ "error": "Header \"List-Unsubscribe\" is reserved and cannot be set" }

Alle tre feltene lagres i meldingens send_options, så de overlever køen.

Planlegging og webhooks per melding

scheduled_at (ISO-tidsstempel) utsetter utsendelsen. webhook_url mottar leveringsstatusoppdateringer for akkurat denne meldingen — se Webhooks.

Frekvenstak for markedsføring

Send med en category (f.eks. "newsletter") for at utsendelsen skal telle mot den kategoriens frekvenstak, som konfigureres på tvers av kontoen i sendepolicyen — uavhengig av det globale kanalovergripende taket og eventuelle tak per kanal.

Transaksjonelle utsendelser

Send transactional: true (boolean-en, eller strengen "true") for å merke en utsendelse som transaksjonell — en tilbakestilling av passord, en kvittering, en opt-in-bekreftelse. Standardverdien er false: en vanlig utsendelse er markedsføring.

Transaksjonell e-post er unntatt markedsføringstaket for båndet ditt. Over taket faktureres den per melding som overage i stedet for å bli avvist med quota_exceeded, slik at en tung kampanjemåned ikke kan stanse passord-e-postene dine helt. Den telles fortsatt, så volumet er synlig i forbruksrapporteringen, og flagget lagres på meldingsraden — det overlever køen og eventuelle nye forsøk.

Det finnes nøyaktig ett kvotetilfelle der transaksjonell e-post fortsatt blokkeres: en free-plan uten kort registrert, der det ikke finnes noen måte å fakturere overage. region_blocked og payment_method_required er ikke kvotebeslutninger, så transactional overstyrer heller ikke dem.

transactional: true unntar i tillegg utsendelsen fra frekvenstak og stilletimer.

Alle fire feltene per utsendelse — transactional, reply_to, from_name og headers — godtas også per element i POST /v1/messages/bulk. Der fører en ugyldig reply_to eller et reservert headernavn til at bare det elementet feiler (det telles i failed) i stedet for at hele batchen avvises.

Respons

{
  "message_id": "3fa1e2c0-...",
  "status": "queued",
  "channel": "sms",
  "to": "+4512345678",
  "cost": 0.045,
  "currency": "EUR",
  "created_at": "2026-07-08T10:00:00.000Z"
}

En 402 betyr utilstrekkelig saldo eller manglende betalingsmetode; 403 betyr at kontoen er suspendert, venter på aktivering, eller at avsender-ID-en ikke er godkjent; 409 betyr at mottakeren har reservert seg mot den kanalen.

Bygg forespørselen

Fyll ut feltene du trenger, og kopiér forespørselen i cURL, Node, Python eller PHP — den bygger koden, den sender ingenting.

På SMS og RCS må dette være en avsender-ID godkjent under Innstillinger → Avsender-ID-er — en ikke-godkjent verdi avvises med 403. La feltet stå tomt for å bruke kontoens standard, som alltid virker.

Tomme felt utelates fra forespørselen. E-postfelt vises når kanalen er e-post.

curl https://api.wezend.com/v1/messages/send \
  -H "X-API-Key: $WEZEND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+4512345678",
    "channel": "sms",
    "message": "Hello from WeZend"
  }'

Én plattform. Hver kundeinteraksjon.

Erstatt lappeteppet av meldings-API-er, CDP og automatiseringsverktøy med én engasjementsplattform bygget for skala.

Ingen kredittkort · EU-datalagring · 99,99 % oppetids-SLA