API til jeres eget system
Med API'et kan jeres regnskabs- eller ERP-system sende e-fakturaer gennem Rishah og hente status, PDF og betalingsoplysninger. API'et følger med pakkerne 20, 100 og 250 og med Enterprise. Hver sendt faktura tæller som en almindelig faktura i pakken.
Sådan kommer I i gang
- Lav en API-nøgle under Indstillinger → API til jeres eget system. Den vises kun én gang.
- Læg nøglen i jeres system. Hvert kald sendes som
POSTtil adressen herunder med nøglen i headeren og JSON i indholdet. - Prøv først med
"handling":"test".
POST https://rishah.dk/platform/api/v1.php
Authorization: Bearer rsh_xxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json
{"handling":"test"}
Svaret har altid ok. Går noget galt, står der en fast kode i fejl, som jeres program kan læse, og en forklaring på dansk i besked.
Send en faktura eller kreditnota
Filen skal være en e-faktura i formatet Peppol BIS 3 (faktura eller kreditnota) med jeres virksomhed som afsender. Samme nummer kan kun sendes én gang – faktura og kreditnota har hver deres nummerrække.
{"handling":"send","xml":"<?xml version=\"1.0\" encoding=\"UTF-8\"?><Invoice …>…</Invoice>"}
→ 201 {"ok":true,"id":"5f2c…","type":"faktura","nummer":"1043","status":"leveret"}
I stedet for xml kan filen sendes base64-kodet i xml_base64.
Bilag, fx fakturaen som PDF, kan sendes med i bilag. De lægges ind i e-fakturaen, før den sendes. Peppol tillader PDF, PNG, JPG, CSV og regneark (.xlsx og .ods), højst 5 MB pr. fil og 10 MB i alt.
{"handling":"send","xml":"…","bilag":[{"filnavn":"faktura-1043.pdf","fil_base64":"JVBERi0…"}]}
status er leveret, når modtageren har fået fakturaen, eller afsendt, når netværket har sat den i kø. Bliver den senere afvist, skifter status til afvist eller ugyldig med en forklaring i besked. En faktura, netværket ikke tager imod, tæller ikke i pakken.
Status og liste
{"handling":"status","id":"5f2c…"}
→ {"ok":true,"id":"5f2c…","type":"faktura","nummer":"1043","modtager":{…},"beloeb":2813.13,"valuta":"DKK","status":"leveret","sendt":"2026-11-08T18:20:00+01:00","gensendt":[]}
{"handling":"sendte","max":50,"siden":"2026-11-01T00:00:00+01:00"}
→ {"ok":true,"antal":12,"sendte":[…]}
Hent en faktura med PDF og betalingsoplysninger
{"handling":"hent","id":"5f2c…"}
→ {"ok":true, …, "xml":"…", "pdf_base64":"JVBERi0…",
"betaling":{"kode":"58","konto":"DK5000400440116243","ref":"1043","belob":2813.13,"valuta":"EUR","forfald":"2026-11-16", …},
"betalingskode":{"art":"epc","qr":"BCD\n002\n…","kodelinje":null}}
betaling er oplysningerne, jeres system kan lægge direkte ind som betaling. betalingskode er indholdet af QR-koden eller kodelinjen til bankappen – epc (euro), se (svensk bankgiro/plusgiro), fik (dansk indbetalingskort) eller no (norsk konto og KID).
Modtagne fakturaer
{"handling":"modtagne","max":50,"siden":"2026-11-01T00:00:00+01:00"}
→ {"ok":true,"antal":3,"modtagne":[{"id":"a36c…","type":"faktura","nummer":"461455","afsender":{"navn":"…","land":"DK","nummer":"DK11945317"},"dato":"2026-10-15","beloeb":2632.5,"valuta":"DKK","modtaget":"2026-11-10T20:32:15+01:00","kilde":"netvaerk"}]}
{"handling":"modtaget","id":"a36c…"}
→ {"ok":true, …, "xml":"…", "pdf_base64":"JVBERi0…", "betaling":{…}}
Alle fakturaer, jeres leverandører sender til jer over NemHandel og Peppol, kommer her – og også dem, I selv har lagt ind fra en PDF ("kilde":"pdf").
Svar leverandøren
{"handling":"svar","id":"a36c…","kode":"RE","grund":"PRI","tekst":"Prisen på linje 2 passer ikke med aftalen"}
→ {"ok":true,"status":"leveret"}
Svaret går tilbage til leverandøren i samme format, som fakturaen kom: et Peppol-fakturasvar eller et OIOUBL-applikationssvar i NemHandel (her kan man kun svare AP eller RE, og ved RE skal tekst udfyldes). kode: AB modtaget, IP under behandling, UQ spørgsmål, CA godkendt med forbehold, RE afvist, AP godkendt, PD betalt. Ved UQ, CA og RE skal der være en grund: REF reference, LEG firmaoplysninger, REC ikke til os, QUA kvalitet, DEL levering, PRI priser, QTY antal, ITM varer, PAY betalingsbetingelser, UNR kender den ikke, FIN finansielle betingelser, OTH andet (så skal tekst udfyldes). Kan leverandøren ikke modtage svar elektronisk, siger svaret det.
Svarer jeres kunder på jeres egne fakturaer, står det i svar på status og sendte, og jeres webhook får hændelsen svar.
Ordrer, kontoudtog og andre handelsdokumenter
{"handling":"modtag_ordrer","til":true}
→ {"ok":true,"modtag_ordrer":true}
{"handling":"ordrer","siden":"2026-11-01T00:00:00+01:00"}
→ {"ok":true,"antal":1,"ordrer":[{"id":"7c1e…","type":"Order","retning":"modtaget","nummer":"PO-1043","koeber":"…","saelger":"…","beloeb":12500,"valuta":"DKK"}]}
{"handling":"ordre","id":"7c1e…"}
→ {"ok":true, …, "xml":"…"}
{"handling":"send_dokument","xml":"<Order …"}
→ 201 {"ok":true,"id":"…","type":"Order","nummer":"PO-1043","status":"leveret"}
Slår I modtagelse af ordrer til, bliver jeres numre tilmeldt til også at modtage ordrer i NemHandel og Peppol. Med send_dokument sender jeres system ordrer, ordrebekræftelser, følgesedler, kontoudtog og andre handelsdokumenter i Peppol BIS eller OIOUBL – fakturaer og kreditnotaer sendes med send. Hvert dokument tæller som én faktura i pakken. Jeres webhook får hændelsen ordre, når der kommer en ny.
Læs en PDF, Word- eller Excel-faktura
{"handling":"laes","filnavn":"faktura.pdf","fil_base64":"JVBERi0…"}
→ {"ok":true,"filtype":"pdf","faktura":{…fakturaens oplysninger…},"advarsler":[…]}
Filen læses om til fakturaoplysninger, som jeres system kan vise til kontrol. Intet sendes. Med "rolle":"modtager" læses en faktura, I har fået fra en leverandør.
Besked med det samme (webhook)
{"handling":"webhook","url":"https://jeres-system.dk/rishah"}
→ {"ok":true,"webhook":"https://jeres-system.dk/rishah","hemmelighed":"…"}
Så sender vi en POST med JSON {"haendelse":…,"data":…,"tid":…}, når en faktura er modtaget (modtaget), og når der er nyt om en sendt faktura (levering), og når jeres kunde svarer på en faktura (svar). Tjek headeren X-Rishah-Signatur: sha256=…: HMAC-SHA256 af hele indholdet med hemmeligheden. Send "url":"" for at slå det fra. Listerne ovenfor er altid det sikre sted at hente fra.
Fejlkoder
| fejl | HTTP | Betyder |
|---|---|---|
mangler_noegle | 401 | Der er ingen API-nøgle i headeren. |
ugyldig_noegle | 401 | Nøglen findes ikke. |
tilbagekaldt | 401 | Nøglen er tilbagekaldt under Indstillinger. |
pause | 429 | For mange forkerte forsøg – «sekunder» siger, hvor længe der er pause. |
konto_laast | 403 | Kontoen er låst. |
ingen_api_adgang | 403 | Kontoen har ikke en pakke med API (20, 100, 250 eller Enterprise). |
kun_post | 405 | Kun POST er tilladt. |
ugyldig_json | 400 | Forespørgslen er ikke JSON. |
ukendt_handling | 400 | Handlingen findes ikke. |
mangler_fil | 400 | Der er ingen fil i «xml» eller «xml_base64». |
ugyldig_fil | 422 | Filen er ikke en gyldig e-faktura (Peppol BIS 3). |
forkert_afsender | 403 | Filen har en anden afsender end jeres virksomhed. |
dublet | 409 | Nummeret er sendt før – «id» er den tidligere. |
kan_ikke_sende | 402 | Pakken eller saldoen er brugt, eller der er lukket for afsendelse. |
ikke_fundet | 404 | Der er ingen faktura med det id. |
kan_ikke_levere | 422 | Netværket tog ikke imod fakturaen (fx ugyldig fil) – «besked» siger hvorfor. Den tæller ikke i pakken. |
udloebet | 410 | Fakturaen er ældre end jeres pakkes opbevaring. |
kan_ikke_laese | 422 | Filen kunne ikke læses som en faktura. |
kan_ikke_svare | 422 | Svaret kunne ikke sendes – «besked» siger hvorfor (fx kan leverandøren ikke modtage svar). |
ugyldig_url | 400 | Webhook-adressen skal starte med https:// og kunne nås fra internettet. |
for_stor | 413 | Forespørgslen er over 20 MB. |
intern_fejl | 500 | Fejl hos os – prøv igen om lidt. |
Sikkerhed og grænser
- Kun POST over en krypteret forbindelse (https, når platformen er på serveren).
- Nøglen gemmes ikke hos os – kun et aftryk af den. Mister I den, så tilbagekald den og lav en ny.
- 200 forkerte forsøg på 10 minutter med samme nøgle giver 15 minutters pause.
- Højst 10 aktive nøgler pr. konto. Ny nøgle og tilbagekaldelse giver en mail til jeres login- og virksomheds-e-mail.