Spring til indhold
Forta Pay

Reference

Rykkere

Forta Pay API v1

15 operationer

G76: kreditorens egen rykkerstyring — tændt/slukket og godkendelsestilstand

GET /creditors/{creditorId}/dunning-control

TILFØJET af pay-rykkervaerktoej 15-10-2026 (G76: Forta Pay er kreditorens rykkerværktøj). enabled = rykkerne er tændt for kreditoren. approval = each_reminder (hver rykker sendes først, når kreditor har godkendt den) eller automatic. approval_locked = sand for en kreditor hvor automatic ikke kan vælges, fordi Forta Pays port for automatiske rykkere er slukket. Et § 10-påkrav kræver altid godkendelse i den enkelte sag.

Parametre

creditorId

path · string · påkrævet

Svar

200

OK · DunningControl

404

Fejl (RFC 9457) · Problem

curl
curl -X GET https://api.fortapay.dk/v1/creditors/{creditorId}/dunning-control \
  -H "Authorization: Bearer $FP_KEY"

G76: kreditor tænder/slukker selv rykkerne (med tørkørsel) og vælger godkendelsestilstand

PATCH /creditors/{creditorId}/dunning-control

TILFØJET af pay-rykkervaerktoej 15-10-2026. Kræver en admin-nøgle. Rykkerne tændes af kreditoren selv — Forta Pay tænder dem ikke for en kreditor. dry_run: true ændrer intet og svarer med preview: de rykkere en tænding ville planlægge nu (med each_reminder lander de til godkendelse; intet sendes af tændingen selv). approval: automatic svarer 409 dunning_automation_locked, så længe Forta Pays port for automatiske rykkere er slukket. Et skift af approval kræver reason (422 validation_failed uden).

Parametre

creditorId

path · string · påkrævet

Idempotency-Key

header · string (uuid) · påkrævet

Obligatorisk på alle POST/PATCH/DELETE. Lever 24 timer.

Krop · DunningControlUpdate

enabled

boolean · valgfri

Tænd (true) eller sluk (false) kreditorens rykkere.

approval

string · valgfri

each_reminder · automatic

reason

string · valgfri

Kræves ved et skift af approval; står i hændelsen creditor.updated.

dry_run

boolean · valgfri

Ændrer intet; svaret bærer preview.

Svar

200

OK · DunningControl

403

Fejl (RFC 9457) · Problem

404

Fejl (RFC 9457) · Problem

409

Fejl (RFC 9457) · Problem

422

Fejl (RFC 9457) · Problem

curl
curl -X PATCH https://api.fortapay.dk/v1/creditors/{creditorId}/dunning-control \
  -H "Authorization: Bearer $FP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{}
JSON

Sæt rykkerforløb på pause (indsigelse, aftale) med grund og evt. slutdato

POST /invoices/{invoiceId}/dunning/pause

Parametre

invoiceId

path · string · påkrævet

Idempotency-Key

header · string (uuid) · påkrævet

Obligatorisk på alle POST/PATCH/DELETE. Lever 24 timer.

Krop · object

reason

string · valgfri

until

string (date) · valgfri

Svar

200

OK · Invoice

curl
curl -X POST https://api.fortapay.dk/v1/invoices/{invoiceId}/dunning/pause \
  -H "Authorization: Bearer $FP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{}
JSON

«Næste trin nu» — det næste udestående rykkertrin planlægges i dag (de hårde regler gælder stadig); dry_run er forhåndsvisningen

POST /invoices/{invoiceId}/dunning/advance

Rykker KUN det næste trin frem; de senere beholder deres datoer. 10 dage mellem gebyrbelagte rykkere, § 10-fristen, kontaktvinduet og en afventende opkrævning lægges på efter fremrykningen — giver den intet, svares 409 dunning_advance_no_effect med tidslinjens grund. 409 også ved pause (dunning_paused), slukkede rykkere (dunning_disabled), åben indsigelse, undtaget debitor, aktiv afdragsordning, inkassosag og intet planlagt trin.

Parametre

invoiceId

path · string · påkrævet

Idempotency-Key

header · string (uuid) · påkrævet

Obligatorisk på alle POST/PATCH/DELETE. Lever 24 timer.

Krop · DunningAdvance

dry_run

boolean · valgfri

Forhåndsvisningen: samme tidslinje, intet skrives

Svar

200

Trinnet før og efter · DunningAdvanceResult

409

Fejl (RFC 9457) · Problem

curl
curl -X POST https://api.fortapay.dk/v1/invoices/{invoiceId}/dunning/advance \
  -H "Authorization: Bearer $FP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{}
JSON

Genoptag rykkerforløb

POST /invoices/{invoiceId}/dunning/resume

Parametre

invoiceId

path · string · påkrævet

Idempotency-Key

header · string (uuid) · påkrævet

Obligatorisk på alle POST/PATCH/DELETE. Lever 24 timer.

Svar

200

OK · Invoice

curl
curl -X POST https://api.fortapay.dk/v1/invoices/{invoiceId}/dunning/resume \
  -H "Authorization: Bearer $FP_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

Alle påmindelser/rykkere sendt på fakturaen (niveau, gebyr, kanal, tidspunkt, dokument)

GET /invoices/{invoiceId}/reminders

Parametre

invoiceId

path · string · påkrævet

cursor

query · string · valgfri

limit

query · integer · valgfri

Svar

200

OK · Page

curl
curl -X GET https://api.fortapay.dk/v1/invoices/{invoiceId}/reminders \
  -H "Authorization: Bearer $FP_KEY"

Rykkerplaner pr. kreditor (trin, dage efter forfald, gebyr, kanal, tekst, rente ja/nej, «klar til inkasso» efter trin N)

GET /dunning-plans

Parametre

cursor

query · string · valgfri

limit

query · integer · valgfri

creditor_id

query · string · valgfri

updated_after

query · string (date-time) · valgfri

K5: alle lister har updated_after

Svar

200

OK · Page

curl
curl -X GET https://api.fortapay.dk/v1/dunning-plans \
  -H "Authorization: Bearer $FP_KEY"

Opret rykkerplan — valideres mod rentelovens hårde grænser (422 dunning_rule_violation med `rule` og errors[] pr. brud)

POST /dunning-plans

🔴 KUN I SANDKASSEN. På en live-konto opretter Forta Pay kreditorens rykkerplan, så den altid følger renteloven og inkassoloven (403 dunning_plan_platform_only). Håndhævet i databasen, ikke kun her.

Parametre

Idempotency-Key

header · string (uuid) · påkrævet

Obligatorisk på alle POST/PATCH/DELETE. Lever 24 timer.

Krop · DunningPlanCreate

creditor_id

string · påkrævet

name

string · påkrævet

is_default

boolean · valgfri

Kreditorens standardplan for debtor_type — bruges når en faktura oprettes uden dunning_plan_id

debtor_type

string · valgfri

any · person · business

steps

liste af DunningStep · påkrævet

Valideres mod renteloven § 9 b (≤ 3 gebyrbelagte, ≤ 100 kr., ≥ 10 dage mellem gebyrbelagte) og inkassoloven § 10 (påkrav med ≥ 10 dages frist før ready_for_collection)

interest

object · valgfri

skip_when_charge_pending

boolean · valgfri

Send ingen rykker mens en BS-/LS-opkrævning er indleveret og afventer

respect_bank_days

boolean · valgfri

send_time_local

string · valgfri

HH:MM Europe/Copenhagen, 08:00–20:59 (lørdag sendes kun 08–16; aldrig søn-/helligdag)

auto_handover

boolean · valgfri

Opret inkassosag automatisk ved ready_for_collection (ellers kun markering)

collection_partner

string · valgfri

Partnerkode ved auto_handover (aftales med partneren); manual = operatøren sender pakken

collection_fee

Money · valgfri

Svar

201

Oprettet · DunningPlan

403

Fejl (RFC 9457) · Problem

409

Fejl (RFC 9457) · Problem

422

Fejl (RFC 9457) · Problem

curl
curl -X POST https://api.fortapay.dk/v1/dunning-plans \
  -H "Authorization: Bearer $FP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{
  "creditor_id": "…",
  "name": "…",
  "steps": [
    {
      "kind": "friendly_reminder",
      "days_after_due": 0
    }
  ]
}
JSON

Hent rykkerplan

GET /dunning-plans/{planId}

Parametre

planId

path · string · påkrævet

Svar

200

OK · DunningPlan

curl
curl -X GET https://api.fortapay.dk/v1/dunning-plans/{planId} \
  -H "Authorization: Bearer $FP_KEY"

Ret rykkerplan — hele den resulterende plan valideres igen; planlagte rykkere på berørte fakturaer genberegnes (§3.3 «plan ændret»)

PATCH /dunning-plans/{planId}

🔴 På en live-konto kan kun name rettes. Trin, dage, frister, gebyrer, rente, inkassogebyr, debitortype og standard ændres af Forta Pay (403 dunning_plan_platform_only med allowed_fields). Uændrede felter i kroppen tæller ikke som en ændring. Sandkassen kan rette alt inden for lovens grænser.

Parametre

planId

path · string · påkrævet

Idempotency-Key

header · string (uuid) · påkrævet

Obligatorisk på alle POST/PATCH/DELETE. Lever 24 timer.

Krop · DunningPlanUpdate

name

string · valgfri

is_default

boolean · valgfri

debtor_type

string · valgfri

any · person · business

steps

liste af DunningStep · valgfri

interest

object | null · valgfri

skip_when_charge_pending

boolean · valgfri

respect_bank_days

boolean · valgfri

send_time_local

string | null · valgfri

auto_handover

boolean · valgfri

collection_partner

string | null · valgfri

collection_fee

Money · valgfri

Svar

200

OK · DunningPlan

403

Fejl (RFC 9457) · Problem

422

Fejl (RFC 9457) · Problem

curl
curl -X PATCH https://api.fortapay.dk/v1/dunning-plans/{planId} \
  -H "Authorization: Bearer $FP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{}
JSON

Forhåndsvis hele forløbet for en given faktura (datoer, gebyrer, renter, bankdage) uden at sende noget

POST /dunning-plans/{planId}/preview

Parametre

planId

path · string · påkrævet

Idempotency-Key

header · string (uuid) · påkrævet

Obligatorisk på alle POST/PATCH/DELETE. Lever 24 timer.

Krop · object

invoice_id

string · påkrævet

as_of

string (date) · valgfri

Svar

200

Forløb · liste af ReminderPlanStep

curl
curl -X POST https://api.fortapay.dk/v1/dunning-plans/{planId}/preview \
  -H "Authorization: Bearer $FP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{
  "invoice_id": "…"
}
JSON

Alle rykkere på tværs af fakturaer (filtre: level, kind, status, creditor_id, invoice_id, planned_before/after, sent_after)

GET /reminders

status=scheduled&planned_before=… er «I nat sender vi»-listen (design §11 nr. 1): de rykkere motoren VIL sende inden et tidspunkt, på tværs af fakturaer. Sammendraget GET /dunning-runs/next tæller PRÆCIS denne forespørgsel — tallet og listen er samme prædikat, ikke to der ligner hinanden. ⚠️ debtor_id findes ikke her: reminders har ingen debitor-kolonne. Vejen er GET /invoices?debtor_id=… og derefter invoice_id=.

Parametre

cursor

query · string · valgfri

limit

query · integer · valgfri

level

query · integer · valgfri

status

query · string · valgfri

kind

query · string · valgfri

creditor_id

query · string · valgfri

invoice_id

query · string · valgfri

planned_before

query · string (date-time) · valgfri

Kun rykkere med et planlagt tidspunkt til og med dette

planned_after

query · string (date-time) · valgfri

sent_after

query · string (date-time) · valgfri

updated_after

query · string (date-time) · valgfri

K5: alle lister har updated_after

Svar

200

OK · Page

curl
curl -X GET https://api.fortapay.dk/v1/reminders \
  -H "Authorization: Bearer $FP_KEY"

Det udsendte rykkerdokument (PDF) — præcis de bytes der blev sendt (sha256 i overdragelsespakken) — sikker GET

GET /reminders/{reminderId}/document

Parametre

reminderId

path · string · påkrævet

Svar

200

PDF · string (binary)

404

Fejl (RFC 9457) · Problem

curl
curl -X GET https://api.fortapay.dk/v1/reminders/{reminderId}/document \
  -H "Authorization: Bearer $FP_KEY"

Morarentetabellen (renteloven § 5) med gyldighedsperiode og kilde pr. række — grundlaget for enhver rente Forta Pay beregner

GET /interest-rates

Svar

200

OK · Page

curl
curl -X GET https://api.fortapay.dk/v1/interest-rates \
  -H "Authorization: Bearer $FP_KEY"

«I nat sender vi» — hvad rykkermotoren VIL gøre, før den gør det

GET /dunning-runs/next

Se hvad rykkermotoren vil gøre, før den kører. Motoren kender allerede sine egne frister — reminders med status = 'scheduled' ER planen; det der manglede, var at kunne spørge den FØR den kører.

🔴 Svaret er ikke kun det lykkelige tilfælde. En liste der kun viser de fordringer hvor alt gik godt, ser fuldstændig ud og er det ikke. Derfor tre dele:

- totals / by_kind / next_run_at — det motoren VIL sende. 🔴 En scheduled rykker er ikke det samme som «vi sender den». §3.3 lader rykkerpausen FRYSE forløbet: den planlagte række bliver stående og springes over på sin dag. totals.documents tæller derfor kun de rækker motoren faktisk vil sende, og list_includes_blocked siger hvor mange af list_url's rækker der er frosne — så de to tal kan regnes sammen i stedet for at modsige hinanden. - not_planned — fordringerne i rykkerforløb hvor motoren IKKE gør noget, med GRUND pr. fordring (import_hold — fakturaen er importeret og afventer skiftets aktivering (SKIFT-1), og står FØRST ligesom i motoren — no_plan, paid_elsewhere — fakturaen er reelt betalt (FarPay-betalt i skiftets import, lukket ved skiftet, eller penge modtaget som fremmed kvittering) og rykkes ikke, uanset regnskabets restsaldo — in_collection, installment_plan, debtor_excluded, dunning_paused, no_more_steps, og i live creditor_dunning_off — kreditorens rykkere er ikke tændt, standarden — samt delivery_uncertain — et afsendelsesforsøg hvis udfald er ukendt; planlæggeren rører ikke fordringen før et menneske frigiver den). DIST-1: er næste trin BLOKERET af udsendelsen, står den egentlige grund i stedet for no_more_steps: no_document_channel (trinnet kræver en skrivelse, og debitoren har hverken e-mail, e-Boks eller adresse — en SMS kan ikke bære en rykker eller et § 10-påkrav), no_proven_document (to forsøg uden en leveret skrivelse), s10_proof_missing og s10_deadline_too_short (§ 10-påkravets bevis mangler, eller fristen er under 10 dage fra den afsendelse der beviser det). Uden dem kan et tomt «i nat sender vi» ikke skelnes fra en standset motor. Hver fordring i rykkerforløb står enten i totals eller her — aldrig begge, aldrig ingen af delene. - warnings — det der vil gå galt hvis det sendes som planlagt: no_channel (debitoren har ingen adresse på den planlagte kanal — udsendelsen bliver en failed-række, og fordringen står urykket uden at nogen ser det) og overdue (det planlagte tidspunkt er allerede passeret — planlæggeren er bagud).

Hvad sker der når kaldet udebliver? Ingenting: kaldet er en ren læsning og ændrer intet. Motoren kører uændret. Det er DET der er faren, og derfor findes kaldet.

engine.dunning_allowed er rykkerlicensens afgørelse, med grunden. ⚠️ Kun når kaldet er skopet til ÉN kreditor (creditor_id=) — licensen afgøres pr. kreditor, og et samlet ja/nej på tværs ville være et gæt forklædt som et svar.

Parametre

creditor_id

query · string · valgfri

before

query · string (date-time) · valgfri

Tæl til og med dette tidspunkt. Udeladt: til og med DØGNET for næste kørsel

Svar

200

OK · DunningRunPreview

curl
curl -X GET https://api.fortapay.dk/v1/dunning-runs/next \
  -H "Authorization: Bearer $FP_KEY"