Digital post från verksamhetssystem

API-specifikation för digital post – integration mellan verksamhetssystem och Ekopost

Skicka brev och fakturor direkt från verksamhetssystemet. Ekopost kontrollerar mottagaren, väljer kanal och levererar till digital brevlåda eller fysisk post.

Avsnitt

Översikt


API:et låter kommuner, regioner och andra organisationer skicka digital post direkt från sina verksamhetssystem, med Ekopost som utskickstjänst. Det följer SKR:s gemensamma API-specifikation för digital post från verksamhetssystem (Digital post REST-API, version v1).

Ekopost som utskickstjänst

Verksamhetssystemet skickar meddelandet till Ekopost. Ekopost kontrollerar innehållet, väljer kanal – digital brevlåda eller fysisk post – och levererar försändelsen.

Ekopost-specifika val

Utöver specifikationen kan du skicka REK, skyddad post och hämta adresser från folkbokföringen. Valen anges i metaData.other, se Ekopost-specifika val.

Operationer


Bas-URL: https://api.ekopost.se/gn

OPERATIONER
Operation Anrop Autentisering Beskrivning
hasAvailableMailbox POST /gn/has-available-mailbox mTLS + JWT Kontrollerar om mottagare kan nås digitalt.
sendDigitalMail POST /gn/send-digital-mail mTLS + JWT Skickar ett brev.
sendDigitalInvoice POST /gn/send-digital-invoice mTLS + JWT Skickar en faktura eller påminnelse.
apiInfo GET /gn/api-info mTLS Information om API:et.

Format


  • Anrop och svar är JSON i UTF-8. Ange Content-Type: application/json.
  • Fältnamnen skrivs i camelCase enligt specifikationen. Ekoposts övriga API använder snake_case, så modellerna kan inte delas mellan API:erna.
  • Datum anges som ÅÅÅÅ-MM-DD och tidpunkter enligt ISO 8601 i UTC.
  • Fält utan värde utelämnas i svaren.
  • Fel returneras som application/problem+json, se Felhantering.
Exempel på headers
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json; charset=UTF-8

Flöde


  1. Kontrollera mottagaren (valfritt)
    hasAvailableMailbox visar om mottagaren kan nås digitalt.
  2. Skicka meddelandet
    sendDigitalMail för brev och sendDigitalInvoice för fakturor, med ett unikt messageId.
  3. Ekopost tar emot försändelsen
    Ekopost validerar anropet, väljer kanal och registrerar försändelsen. Svaret innehåller distributionId och timeStamp.
  4. Leverans
    Leveransen till brevlåda, bank eller tryck sker efter svaret. Spara id:na i svaret för uppföljning, se Ekopost-tillägg i svaret.

Kom igång


För att ansluta behöver organisationen:

  • ett Ekopost-konto,
  • ett klientcertifikat (X.509) med organisationsnumret, som Ekopost registrerar på kontot, se Klientcertifikat,
  • för digital leverans: Mina meddelanden eller Kivra som kontots primära kanal, se Avsändare och kanal.

Kontakta hejsan@ekopost.se för att komma igång. Du kan börja testa i sandbox innan certifikatet är på plats, se Testa i sandbox.

Testa i sandbox


I Ekoposts sandbox kan du testa operationerna utan klientcertifikat och organisations-JWT. Sandbox nås via http://api.sandbox.ekopost.se/gn (utan https), och inget som skickas där levereras till mottagarna.

  • Skapa ett sandbox-konto och en API-nyckel, se Sandbox i Ekoposts API-dokumentation.
  • Autentisera med Authorization: api-key <nyckel> i stället för certifikat och JWT.
  • I övrigt fungerar API:et som i produktion. Bland annat ska avsändar-id:t höra till en kanal som är uppsatt på sandbox-kontot, se Avsändare och kanal.
  • API-nyckel godtas bara i sandbox. I produktion krävs alltid klientcertifikat och organisations-JWT, och de kan inte testas i sandbox.
Exempel på anrop i sandbox (RAW)
POST /gn/has-available-mailbox HTTP/1.1
Host: api.sandbox.ekopost.se
Authorization: api-key YiuyotGtRNDXik56lgq6
Content-Type: application/json; charset=UTF-8

{
  "organizationNumber": "5555555555",
  "recipientId": [
    "199912312387"
  ]
}

Avsändare och kanal


Avsändar-id:t i anropet avgör vilken digital kanal Ekopost använder och skickas vidare som avsändare i den kanalen. Det är messageHeader.sender.senderId i sendDigitalMail och sendDigitalInvoice, och organizationNumber i hasAvailableMailbox.

AVSÄNDAR-ID OCH KANAL
Avsändar-id Känns igen på Kanal Krav på kontot
Organisationsnummer NNNNNN-NNNN, 10 siffror eller 12 siffror som börjar med 16. En juridisk person (tredje siffran är 2 eller högre) med giltig kontrollsiffra. Mina meddelanden Mina meddelanden är kontots primära kanal.
Kivras tenant key 32–64 hexadecimala tecken. Kivra Kivra är kontots primära kanal.

Per operation


  • hasAvailableMailbox: uppslaget görs i kanalen för organizationNumber. Använd samma avsändar-id som i utskicket, så gäller svaret den kanal brevet eller fakturan skickas i.
  • sendDigitalMail: ett organisationsnummer eller en tenant key. Kan avsändar-id:t inte användas digitalt, för att kanalen inte är kontots primära kanal eller för att värdet varken är ett organisationsnummer eller en tenant key, skickas brevet som fysisk post, precis som när mottagaren inte kan nås digitalt. Vid fysisk post spelar avsändar-id:t ingen roll.
  • sendDigitalInvoice: samma som för sendDigitalMail. Kan avsändar-id:t inte användas digitalt skickas fakturan som fysisk post, se Kanalval för fakturor.

Bra att veta


  • Avsändar-id:t jämförs inte med kontots organisationsnummer. Organisationen identifieras av klientcertifikatet och organisations-JWT:n.
  • Ett organisationsnummer skickas vidare till Mina meddelanden med 12 siffror och 16 först, till exempel 165555555555, oavsett om det anges med 10 eller 12 siffror. En tenant key skickas som den är.
  • Är kanalen inte uppsatt på kontot svarar hasAvailableMailbox 400 på fältet. Brev och fakturor skickas i stället som fysisk post.
  • Ett felskrivet organisationsnummer, till exempel med fel kontrollsiffra, känns inte igen: hasAvailableMailbox svarar 400 på fältet, och brev och fakturor skickas som fysisk post. Kontrollera formatet om en försändelse oväntat skickas som fysisk post.

Säkerhet


Varje anrop autentiseras i två lager enligt specifikationen: ett klientcertifikat (mTLS) och en organisations-JWT som den avsändande organisationen signerar. apiInfo kräver bara klientcertifikat.

Ekoposts övriga autentiseringsmetoder (api-key, Basic och OAuth2) gäller inte för /gn. Undantaget är sandbox, där en API-nyckel används för test, se Testa i sandbox.

Klientcertifikat (mTLS)


Certifikatet presenteras i TLS-handskakningen (TLS 1.2 eller senare). Ekopost godkänner anslutningen när certifikatet:

  • är registrerat hos Ekopost på organisationens konto och inte är spärrat,
  • är inom sin giltighetstid,
  • innehåller organisationsnumret i subject, i attributet organizationIdentifier (OID 2.5.4.97, till exempel NTRSE-5555555555) eller serialNumber (OID 2.5.4.5),
  • har samma organisationsnummer som kontot det är registrerat på.

Varje anslutning loggas med certifikatets organisationsnummer, serienummer, tidpunkt och eventuell orsak till att den nekades. Vid nekad anslutning svarar API:et 401 utan att ange orsaken. Kontakta Ekopost om ett certifikat nekas.

Organisations-JWT


POST-operationerna kräver också en JWT i Authorization-headern. Organisationen skapar och signerar token själv med den privata nyckeln till samma klientcertifikat som används för mTLS. Ekopost verifierar signaturen mot certifikatets publika nyckel.

Authorization: Bearer <token>
HEADER
Fält Krav Beskrivning
alg Obligatorisk RS256, RS384 eller RS512 för RSA-nycklar. ES256, ES384 eller ES512 för EC-nycklar, där kurvan ska vara P-256, P-384 respektive P-521. none och HMAC (till exempel HS256) godtas inte.
typ Valfri JWT
CLAIMS
Claim Krav Beskrivning
sub Obligatorisk Organisationens organisationsnummer: NNNNNN-NNNN, 10 siffror eller 12 siffror som börjar med 16, med giltig kontrollsiffra. Måste vara samma organisation som i klientcertifikatet.
exp Obligatorisk Utgångstid i sekunder sedan 1970-01-01 UTC.
nbf Valfri Tidpunkt då token börjar gälla, i sekunder sedan 1970-01-01 UTC.

Övriga claims, till exempel iat och jti, tas emot men kontrolleras inte. Ekopost tillåter en minuts tidsavvikelse. Ge token kort giltighetstid och skapa en ny när den har gått ut. Diggs REST API-profil rekommenderar högst 5 minuter.

Exempel på innehåll i token
// Header
{
  "alg": "RS256",
  "typ": "JWT"
}

// Payload
{
  "sub": "5555555555",
  "iat": 1791187200,
  "exp": 1791187500
}
Exempel: skapa token (C#)

Exemplen kräver .NET Framework 4.7.2 eller senare, eller .NET 6 eller senare.

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;

public static class OrgJwt
{
    // Signerar en organisations-JWT (RS256) med den privata nyckeln till klientcertifikatet
    public static string Create(X509Certificate2 certificate, string organisationNumber)
    {
        var now = DateTimeOffset.UtcNow.ToUnixTimeSeconds();

        var header = Base64Url(Encoding.UTF8.GetBytes("{\"alg\":\"RS256\",\"typ\":\"JWT\"}"));
        var payload = Base64Url(Encoding.UTF8.GetBytes(
            "{\"sub\":\"" + organisationNumber + "\",\"iat\":" + now + ",\"exp\":" + (now + 300) + "}"));

        using (var rsa = certificate.GetRSAPrivateKey())
        {
            var signature = rsa.SignData(
                Encoding.ASCII.GetBytes(header + "." + payload),
                HashAlgorithmName.SHA256,
                RSASignaturePadding.Pkcs1);

            return header + "." + payload + "." + Base64Url(signature);
        }
    }

    private static string Base64Url(byte[] bytes)
    {
        return Convert.ToBase64String(bytes).TrimEnd('=').Replace('+', '-').Replace('/', '_');
    }
}
Exempel: anropa API:et (C#)
// Certifikatet med privat nyckel används både för mTLS och för att signera token
var certificate = new X509Certificate2("organisation.pfx", "lösenord");

var handler = new HttpClientHandler();
handler.ClientCertificates.Add(certificate);    // mTLS
var client = new HttpClient(handler);           // återanvänd samma klient för alla anrop

var request = new HttpRequestMessage(HttpMethod.Post, "https://api.ekopost.se/gn/has-available-mailbox");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", OrgJwt.Create(certificate, "5555555555"));
request.Content = new StringContent(
    "{\"organizationNumber\":\"5555555555\",\"recipientId\":[\"199912312387\"]}",
    Encoding.UTF8,
    "application/json");

var response = await client.SendAsync(request);

hasAvailableMailbox


Kontrollerar om en eller flera mottagare kan ta emot digital post från avsändaren. Används innan ett meddelande skapas, för att veta om digital leverans är möjlig.

POST/gn/has-available-mailbox
Anrop
BODY
Fält Typ Krav Beskrivning
organizationNumber String Obligatorisk Avsändar-id: ett organisationsnummer (Mina meddelanden) eller Kivras tenant key. Avgör vilken kanal som slås upp, se Avsändare och kanal.
recipientId Array of String Obligatorisk 1–500 mottagare, var och en 12 siffror utan bindestreck: personnummer (ÅÅÅÅMMDDNNNN) eller organisationsnummer med 16 först (16NNNNNNNNNN).
Exempel på anrop (RAW)
POST /gn/has-available-mailbox HTTP/1.1
Host: api.ekopost.se
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json; charset=UTF-8

{
  "organizationNumber": "5555555555",
  "recipientId": [
    "199912312387",
    "191212121212"
  ]
}
Svar
BODY (ARRAY)
Fält Typ Beskrivning
recipientId String Mottagarens id, som i anropet.
reachable Boolean true om mottagaren kan nås digitalt av avsändaren.
Exempel på svar (RAW)
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

[
  {
    "recipientId": "199912312387",
    "reachable": true
  },
  {
    "recipientId": "191212121212",
    "reachable": false
  }
]

Så avgörs reachable


  • Uppslaget görs i den kanal som organizationNumber pekar ut: Mina meddelanden eller Kivra, se Avsändare och kanal. reachable är true om mottagaren kan ta emot post från avsändaren där.
  • Använd samma avsändar-id som i utskicket, så gäller svaret den kanal brevet eller fakturan skickas i.
  • Svaret har en rad per mottagare, i samma ordning som i anropet.
  • Om uppslaget mot kanalerna inte kan genomföras svarar API:et 500. Ett tekniskt fel rapporteras aldrig som reachable: false.

sendDigitalMail


Skickar ett brev med PDF-dokument. Ekopost levererar till mottagarens digitala brevlåda när det går och annars som fysisk post.

POST/gn/send-digital-mail
Anrop
BODY
Fält Typ Krav Beskrivning
messageHeader MessageHeader Obligatorisk Mottagare, avsändare, ärende och adress.
attachments Array of Attachment Obligatorisk Minst en PDF. Den första filen är huvuddokumentet, övriga är bilagor. Specifikationen tillåter brev utan fil, men Ekopost kräver en PDF.
bodyInformation BodyInformation Obligatorisk Meddelandetext som visas i den digitala brevlådan.
Exempel på anrop (RAW)
POST /gn/send-digital-mail HTTP/1.1
Host: api.ekopost.se
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json; charset=UTF-8

{
  "messageHeader": {
    "messageId": "6d4d5bba-9468-4e3e-bb34-0a14c586285a",
    "recipientId": "199912312387",
    "importantMessage": true,
    "sender": {
      "senderId": "5555555555",
      "name": "A kommun"
    },
    "headerSubject": "Beslut om bygglov",
    "postAddress": {
      "name": "Bosse Bula",
      "addressLineOne": "Storgatan 1",
      "addressLineTwo": "Lgh 1101",
      "zipCode": "12345",
      "city": "Borgholm",
      "country": "Sverige"
    },
    "supportInfo": {
      "supportText": "Kontakta oss via e-post eller telefon.",
      "contactInformationUrl": "https://www.example.se/kontakt",
      "contactInformationPhoneNumber": "+46701234567",
      "contactInformationEmail": "info@example.se"
    },
    "metaData": {
      "senderAttention": "Bygg- och miljökontoret",
      "sendingSystem": "System A",
      "costCenter": "BYGG-123"
    }
  },
  "attachments": [
    {
      "contentType": "application/pdf",
      "body": "JVBERi0xLjQKJ...",
      "filename": "beslut.pdf"
    }
  ],
  "bodyInformation": {
    "contentType": "text/plain",
    "body": "Hej! Här kommer beslutet om ditt bygglov."
  }
}
Svar

DistributionIdentity med Ekoposts id för försändelsen, tidpunkten då den registrerades och Ekoposts id:n i metaData.other, se Ekopost-tillägg i svaret.

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
  "distributionId": "3f2c8e9a-1b4d-4c7e-9a2f-6d5e8b1c0a47",
  "timeStamp": "2026-10-05T08:15:42.123Z",
  "metaData": {
    "other": [
      { "tag": "ekopost.campaignId", "value": "9b1e4c2a-0f3d-4e8b-a6c1-2d7f5e9b8a10" },
      { "tag": "ekopost.envelopeId", "value": "3f2c8e9a-1b4d-4c7e-9a2f-6d5e8b1c0a47" }
    ]
  }
}

Kanalval


LEVERANS
Situation Leverans
importantMessage: true och mottagaren kan nås digitalt Digital brevlåda via Mina meddelanden eller Kivra, beroende på sender.senderId, med meddelandetexten och PDF-filerna.
importantMessage: true och mottagaren kan inte nås digitalt, eller sender.senderId kan inte användas digitalt Fysisk post.
importantMessage: false Fysisk post.
ekopost.postalType: rek Rekommenderat brev (REK) som fysisk post, även om mottagaren kan nås digitalt.
ekopost.postalType: protected och mottagaren kan inte nås digitalt Skyddad post.
ekopost.addressLookup: guardian En försändelse till varje vårdnadshavare.

Den digitala kanalen avgörs av messageHeader.sender.senderId, se Avsändare och kanal. Taggarna ekopost.* beskrivs under Ekopost-specifika val. E-post används inte som kanal: emailAddress valideras men används inte för leverans.

Fysisk post


  • Fysisk post kräver postAddress med name, addressLineOne, zipCode och city. Adressen kontrolleras när Ekopost har valt fysisk post. Saknas den svarar API:et 400 med de fält som saknas.
  • Adressen kan i stället hämtas från folkbokföringen med ekopost.addressLookup: navet, se Adress från Navet.
  • Adressen skrivs på ett adressblad som läggs först i brevet, eller på första sidan om kontot är inställt för det.
  • Meddelandetexten i bodyInformation skrivs inte ut. Bara PDF-filerna skickas.

PDF-filer


Gäller både attachments för brev och files för fakturor.

  • contentType ska vara application/pdf och body filen BASE64-kodad.
  • Den första filen är huvuddokumentet. Alla dess sidor ska ha samma format: A4 eller Letter.
  • Övriga filer är bilagor. Sidorna får vara A4 eller A3 (stående eller liggande) eller Letter.
  • Filerna får inte vara skadade eller lösenordsskyddade.

Följ Ekoposts dokumentspecifikation och mall för marginaler för bästa resultat vid fysisk post.

Upprepade anrop (messageId)


messageId (UUID) identifierar meddelandet. Skickar samma organisation samma messageId igen skapas ingen ny försändelse. Svaret innehåller i stället samma distributionId, timeStamp och metaData som första gången. Det gör det säkert att göra om ett anrop efter till exempel en timeout. Innehållet i det upprepade anropet jämförs inte. Kommer två anrop med samma messageId samtidigt väntar det andra tills det första är klart och får sedan samma svar. Är det första anropet inte klart inom en minut svarar det andra 503 Service Unavailable med headern Retry-After. Gör om anropet efter angiven tid.

Använd ett nytt messageId för varje nytt meddelande. Det gäller både brev och fakturor.

sendDigitalInvoice


Skickar en betalningsbar faktura eller påminnelse till Kivra, eller som brev med PDF:en till Mina meddelanden. Kan fakturan inte levereras digitalt skickas den som fysisk post.

POST/gn/send-digital-invoice
Anrop
BODY
Fält Typ Krav Beskrivning
messageHeader MessageHeader Obligatorisk Mottagare, avsändare och ärende.
invoiceBody BodyInvoice Obligatorisk Fakturauppgifter.
files Array of Attachment Obligatorisk Minst en PDF. Den första filen är fakturan, övriga är bilagor, se PDF-filer.
Exempel på anrop (RAW)
POST /gn/send-digital-invoice HTTP/1.1
Host: api.ekopost.se
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json; charset=UTF-8

{
  "messageHeader": {
    "messageId": "0b1c6f2e-5a77-4e0f-9d3b-2f8a4c6e1d90",
    "recipientId": "199912312387",
    "sender": {
      "senderId": "5555555555",
      "name": "A kommun"
    },
    "headerSubject": "Faktura från A kommun",
    "postAddress": {
      "name": "Bosse Bula"
    },
    "supportInfo": {
      "supportText": "Frågor om fakturan? Kontakta oss via e-post.",
      "contactInformationEmail": "faktura@example.se"
    }
  },
  "invoiceBody": {
    "amount": 1234.50,
    "currencyCode": "SEK",
    "dueDate": "2026-11-30",
    "paymentReferenceType": "SE_OCR",
    "paymentReference": "426523791",
    "accountType": "BANKGIRO",
    "accountNumber": "12345",
    "type": "INVOICE",
    "reference": "Faktura 12345",
    "payable": true
  },
  "files": [
    {
      "contentType": "application/pdf",
      "body": "JVBERi0xLjQKJ...",
      "filename": "faktura-12345.pdf"
    }
  ]
}
Svar

DistributionIdentity, på samma sätt som för sendDigitalMail.

Kanalval för fakturor


Fakturor följer samma regler som brev, se Kanalval: digitalt när importantMessage är true och mottagaren kan nås i den kanal som messageHeader.sender.senderId pekar ut, annars fysisk post. Kanalen avgörs av avsändar-id:t, se Avsändare och kanal.

LEVERANS
senderId Leverans
Kivras tenant key Kivra, som betalbar faktura eller påminnelse. Kräver currencyCode: SEK.
Organisationsnummer Mina meddelanden, som ett brev med PDF-filerna. Mina meddelanden har inget fakturaformat, så betalningsuppgifterna finns bara i PDF:en.

Kan fakturan inte levereras digitalt, för att importantMessage är false, avsändar-id:t inte kan användas digitalt eller mottagaren inte kan nås i kanalen, skickas den som fysisk post till postAddress, eller till adressen från Navet med ekopost.addressLookup: navet. Betalningsuppgifterna finns då bara i PDF:en. Saknas adressen svarar API:et 400 och inget skickas. REK, skyddad post och vårdnadshavare finns bara för brev.

Fakturauppgifter


  • paymentReferenceType: SE_OCR för OCR-nummer och TENANT_REF för annan betalningsreferens.
  • reference är fakturanummer eller rubrik.
  • type: REMINDER skickas som påminnelse i Kivra.
  • payable: false visar fakturan i Kivra utan möjlighet att betala. En betalningsbar faktura måste ha ett belopp större än 0, och i Kivra en förfallodag som inte har passerat.

apiInfo


Returnerar information om API:et. Kräver bara klientcertifikat, ingen JWT.

GET/gn/api-info
Svar
BODY
Fält Typ Beskrivning
apiName String API:ets namn.
apiVersion String API-version.
apiReleased Date Datum då versionen publicerades. Utelämnas om det inte är angivet.
apiDocumentation String (URI) Länk till dokumentationen. Utelämnas om den inte är angiven.
apiStatus String API:ets status, till exempel active.
Exempel på svar (RAW)
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
  "apiName": "Digital post REST-API",
  "apiVersion": "v1",
  "apiStatus": "active"
}

Ekopost-specifika val


Specifikationen tillåter fria nyckel/värde-par i messageHeader.metaData.other. Ekopost använder två taggar för val som specifikationen saknar. I sendDigitalMail gäller alla värden. I sendDigitalInvoice gäller bara ekopost.addressLookup: navet; rek, protected och guardian ger 400 för fakturor.

TAGGAR
Tagg Värden Beskrivning
ekopost.postalType standard (förval), rek, protected Typ av post: vanligt brev, rekommenderat brev eller skyddad post.
ekopost.addressLookup navet, guardian Hämtar adresser från folkbokföringen (Navet).

Taggar och värden är skiftlägesokänsliga och varje tagg får förekomma en gång. Okända taggar ignoreras, så other kan även innehålla annan metadata. Ett ogiltigt värde ger 400.

Exempel
"metaData": {
  "costCenter": "BYGG-123",
  "other": [
    { "tag": "ekopost.postalType", "value": "rek" },
    { "tag": "ekopost.addressLookup", "value": "navet" }
  ]
}

REK


  • ekopost.postalType: rek skickar brevet som rekommenderat brev (REK), alltid som fysisk post, även om mottagaren kan nås digitalt.
  • Adressen anges i postAddress eller hämtas med ekopost.addressLookup: navet. Uppfyller den inte kraven för REK svarar API:et 400.
  • supportInfo.contactInformationEmail används som avsändarens kontaktadress för försändelsen. Saknas den används kontots kontaktuppgifter.
  • REK är inte tillgängligt för konton med produktion i Norge.

Skyddad post


  • Med ekopost.postalType: protected levereras brevet digitalt som vanligt om mottagaren kan nås digitalt.
  • Annars skickas det som skyddad post: ingen postadress används, och mottagarens personnummer skrivs i adressfältet.
  • Kontot måste vara aktiverat för skyddad post, annars svarar API:et 400.

Adress från Navet


  • Med ekopost.addressLookup: navet hämtas mottagarens folkbokföringsadress när brevet eller fakturan ska skickas som fysisk post. Den används i stället för postAddress.
  • Uppslaget görs bara när fysisk post används.
  • Hittas ingen fullständig adress svarar API:et 404 och inget skickas.

Vårdnadshavare


  • Med ekopost.addressLookup: guardian hämtas mottagarens vårdnadshavare från Navet, och varje vårdnadshavare får en egen försändelse.
  • Varje vårdnadshavare får brevet digitalt om det går, annars som fysisk post till sin folkbokföringsadress.
  • Vårdnadshavarens namn och adress skrivs på dokumentet, även när brevet levereras digitalt. Adressen hamnar på ett adressblad som läggs först, eller på första sidan om kontot är inställt för det.
  • Hittas inga vårdnadshavare, eller saknar någon av dem adress, svarar API:et 404 och inget skickas.
  • distributionId är den första försändelsen. Svaret innehåller en ekopost.envelopeId per vårdnadshavare, se Ekopost-tillägg i svaret.

Kombinationer


TILLÅTNA KOMBINATIONER
ekopost.postalType ingen adresstagg navet guardian
standard Ja Ja Ja
rek Ja Ja Nej
protected Ja Nej Nej

En kombination som inte är tillåten ger 400.

Ekopost-tillägg i svaret


Svaret från sendDigitalMail och sendDigitalInvoice innehåller, utöver specifikationens distributionId och timeStamp, id:na för det som skapades i Ekopost. De anges som taggar i metaData.other, på samma sätt som valen i anropet. Fältet finns inte i specifikationens svar, och klienter som inte känner till det kan ignorera det.

TAGGAR I SVARET
Tagg Antal Värde
ekopost.campaignId En Id för utskicket (campaign) i Ekopost.
ekopost.envelopeId En per försändelse Id för en försändelse som anropet skapade: en normalt, en per vårdnadshavare med ekopost.addressLookup: guardian. Taggarna kommer i den ordning försändelserna skapades, och den första är samma som distributionId.

Med id:na kan du följa varje försändelse i Ekoposts ordinarie API, till exempel med Get envelope (GET /campaigns/{campaign_id}/envelopes/{envelope_id}). Det ordinarie API:et autentiseras med api-key, Basic eller OAuth2.

Objekt


Objekten följer specifikationen. Kolumnen Krav anger vad Ekopost kräver.

MessageHeader


FÄLT
Fält Typ Krav Beskrivning
messageId String (UUID) Obligatorisk Unikt id för meddelandet, se Upprepade anrop.
recipientId String Obligatorisk Mottagaren, 12 siffror utan bindestreck: personnummer (ÅÅÅÅMMDDNNNN) eller organisationsnummer med 16 först (16NNNNNNNNNN).
importantMessage Boolean Valfri, förval true true: digital brevlåda om det går, annars fysisk post. false: fysisk post. Gäller både brev och fakturor.
sender Sender Obligatorisk Avsändaren.
headerSubject String Obligatorisk Meddelandets ärende, högst 200 tecken. Används även som namn på utskicket i Ekopost.
postAddress PostAddress Villkorad Krävs vid fysisk post, om adressen inte hämtas från Navet.
emailAddress EmailAddress Valfri Valideras men används inte för leverans.
supportInfo SupportInfo Obligatorisk Var mottagaren kan vända sig med frågor.
metaData MetaData Valfri Metadata och Ekopost-specifika val.

Sender


FÄLT
Fält Typ Krav Beskrivning
senderId String Obligatorisk Avsändar-id i kanalen: ett organisationsnummer (Mina meddelanden) eller Kivras tenant key. Avgör kanalen, se Avsändare och kanal.
name String Obligatorisk Avsändarens namn.

PostAddress


FÄLT
Fält Typ Krav Beskrivning
name String Villkorad Mottagarens namn, högst 250 tecken. Krävs vid fysisk post.
addressLineOne String Villkorad Adressrad 1. Krävs vid fysisk post. Adressrad 1 och 2 får vara högst 249 tecken tillsammans.
addressLineTwo String Valfri Adressrad 2. Adressrad 1 och 2 får vara högst 249 tecken tillsammans.
zipCode String Villkorad Postnummer, högst 250 tecken. Krävs vid fysisk post.
city String Villkorad Ort, högst 250 tecken. Krävs vid fysisk post.
country String Valfri Land, högst 250 tecken.

Fält som skickas får inte vara tomma.

EmailAddress


FÄLT
Fält Typ Krav Beskrivning
email String Obligatorisk om objektet skickas Giltig e-postadress.

SupportInfo


FÄLT
Fält Typ Krav Beskrivning
supportText String Obligatorisk Hur mottagaren kan kontakta avsändaren.
contactInformationUrl String (URI) Valfri Absolut URL med mer information.
contactInformationPhoneNumber String Valfri Telefonnummer.
contactInformationEmail String Valfri Giltig e-postadress, högst 255 tecken. Används som avsändarens kontaktadress vid REK.

MetaData


FÄLT
Fält Typ Krav Beskrivning
senderAttention String Valfri Enhet hos avsändaren, till exempel en förvaltning. Används inte i dagsläget.
sendingSystem String Valfri Avsändande system, högst 100 tecken. Sparas på försändelserna och syns i Ekoposts statistik per system.
costCenter String Valfri Kostnadsställe, högst 100 tecken. Sätts på utskicket i Ekopost.
campaignId String Valfri Id som binder ihop flera utskick. Används inte i dagsläget.
other Array of MetaDataOther Valfri Fria nyckel/värde-par. I anropet anges Ekopost-specifika val här, och i svaret Ekoposts id:n, se Ekopost-tillägg i svaret.

MetaDataOther


FÄLT
Fält Typ Krav Beskrivning
tag String Valfri Nyckel.
value String Valfri Värde.

Attachment


FÄLT
Fält Typ Krav Beskrivning
contentType String Obligatorisk application/pdf, den enda tillåtna typen.
body String Obligatorisk Filen BASE64-kodad. Se PDF-filer.
filename String Obligatorisk Filnamn, högst 100 tecken.

BodyInformation


FÄLT
Fält Typ Krav Beskrivning
contentType String Obligatorisk text/plain eller text/html.
body String Valfri Meddelandetext. Visas i den digitala brevlådan men skrivs inte ut vid fysisk post.

BodyInvoice


FÄLT
Fält Typ Krav Beskrivning
amount Number Obligatorisk Belopp att betala. Får inte vara negativt, och måste vara större än 0 om payable är true.
currencyCode String Obligatorisk Valuta enligt ISO 4217, till exempel SEK. Kivra tar bara emot SEK.
dueDate Date Obligatorisk Förfallodag, ÅÅÅÅ-MM-DD. En betalningsbar faktura som skickas till Kivra måste ha dagens datum eller senare.
paymentReferenceType String Obligatorisk SE_OCR eller TENANT_REF.
paymentReference String Obligatorisk Betalningsreferens, 1–25 tecken.
accountType String Obligatorisk BANKGIRO eller PLUSGIRO.
accountNumber String Obligatorisk Bankgiro- eller plusgironummer som betalningen ska gå till, högst 250 tecken.
type String Valfri, förval INVOICE INVOICE eller REMINDER.
reference String Valfri Fakturanummer eller rubrik, högst 150 tecken.
payable Boolean Valfri, förval true Om fakturan kan betalas.

Se Fakturauppgifter för hur fälten används.

DistributionIdentity


FÄLT
Fält Typ Beskrivning
distributionId String Ekoposts id för försändelsen. Vid flera försändelser (vårdnadshavare) den första.
timeStamp DateTime Tidpunkt då Ekopost registrerade försändelsen, i UTC (ISO 8601).
metaData MetaData Ekopost-tillägg: other innehåller taggarna ekopost.campaignId och ekopost.envelopeId, se Ekopost-tillägg i svaret.

Problem


FÄLT
Fält Typ Beskrivning
instance String Sökvägen som anropades.
type String Alltid about:blank.
status Object statusCode (HTTP-status) och reasonPhrase.
title String HTTP-statusens text, till exempel Bad Request.
detail String Beskrivning av felet.
violations Array of Object Bara vid 400: ett objekt per fel, med field (sökväg i JSON, till exempel attachments[0].body) och message.

Felhantering


Fel returneras med Content-Type: application/problem+json och objektet Problem. Texterna i detail och violations är på engelska.

STATUSKODER
Status Betydelse
400 Bad Request Anropet bryter mot specifikationen eller Ekoposts regler. Exempel: saknade eller ogiltiga fält, felaktig JSON, ett avsändar-id vars kanal inte är uppsatt för kontot (vid uppslag och fakturor), ogiltiga Ekopost-taggar, en PDF som inte kan läsas eller saknad adress vid fysisk post. violations listar varje fel.
401 Unauthorized Klientcertifikatet saknas eller godkänns inte, eller organisations-JWT saknas eller är ogiltig. Vid fel i JWT anger detail orsaken. I sandbox: API-nyckeln saknas eller är ogiltig.
404 Not Found Adress eller vårdnadshavare saknas i Navet.
500 Internal Server Error Oväntat fel, till exempel att uppslaget mot brevlådorna inte gick att genomföra. Anropet kan göras om med samma messageId.
503 Service Unavailable Ett tidigare anrop med samma messageId håller fortfarande på. Gör om anropet efter tiden i Retry-After (sekunder) så får du samma svar som det första anropet.
Exempel: 400 Bad Request
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json; charset=utf-8

{
  "instance": "/gn/send-digital-mail",
  "type": "about:blank",
  "status": {
    "reasonPhrase": "Bad Request",
    "statusCode": 400
  },
  "title": "Bad Request",
  "detail": "The request is invalid. See violations for details.",
  "violations": [
    {
      "field": "attachments[0].contentType",
      "message": "Only application/pdf is allowed."
    }
  ]
}
Exempel: 401 Unauthorized (JWT)
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer
Content-Type: application/problem+json; charset=utf-8

{
  "instance": "/gn/send-digital-invoice",
  "type": "about:blank",
  "status": {
    "reasonPhrase": "Unauthorized",
    "statusCode": 401
  },
  "title": "Unauthorized",
  "detail": "The organisation JWT has expired."
}