Spring til indhold
Forta Pay

Reference

Konto og kreditorer

Forta Pay API v1

18 operationer

Kontoen bag API-nøglen (tenant), dens miljø og nøglens scopes

GET /account

Svar

200

OK · Account

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

Kreditorer (juridiske enheder der ejer BS-/LS-/indløser-/MobilePay-aftaler)

GET /creditors

Parametre

cursor

query · string · valgfri

limit

query · integer · 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/creditors \
  -H "Authorization: Bearer $FP_KEY"

Opret kreditor (starter onboarding af rør)

POST /creditors

Parametre

Idempotency-Key

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

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

Krop · CreditorCreate

legal_name

string · påkrævet

cvr

string · påkrævet

country

string · valgfri

Må udelades — serveren sætter DK. Altid til stede i svar

external_ref

string · valgfri

Kundens id for kreditoren (fx CRM company_id)

contact_email

string (email) · valgfri

settlement_account

object · valgfri

KREDITORS egen bankkonto (regnr/kontonr) som ordning/indløser afregner til — Forta Pay har ingen konto i kæden

default_dunning_plan_id

string · valgfri

distribution_defaults

object · valgfri

write_off_residual_fees

boolean · valgfri

Afskriv resterende gebyrer og renter når HOVEDSTOLEN er betalt, og stop rykkerne. Standard true — fravalg er en bevidst handling

debtor_paid_notice

boolean · valgfri

Debitors «Jeg har betalt» på betalingssiden: pauser næste rykkertrin HØJST 5 dage, ÉN gang pr. faktura (Andreas 15-09 ②). Standard true — kreditor kan slå den fra

principal_tolerance

Money · valgfri

previous_system

string · valgfri

Kreditorens TIDLIGERE opkrævningssystem (B8). Bæres videre til skyggens claims, skiftet, afstemningen og fremmede kvitteringer. Standard farpay

farpay · regnskabssystem · andet

Svar

201

OK · Creditor

422

Fejl (RFC 9457) · Problem

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

Hent kreditor inkl. rørstatus (BS, LS, kort, MobilePay, FI)

GET /creditors/{creditorId}

Parametre

creditorId

path · string · påkrævet

Svar

200

OK · Creditor

404

Fejl (RFC 9457) · Problem

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

Ret stamdata, distributionskanaler, rykkerplan-tilknytning

PATCH /creditors/{creditorId}

H9 (pay-b1-rand 11-10-2026): settlement_account på en LIVE-kreditor skrives ikke straks. Svaret er 202 med en ventende settlement_account_change (og kreditoren, hvor resten af PATCH'en ER skrevet); kontoen ændres først, når en ANDEN konto-bred admin-nøgle godkender. Alle kreditorens aktive administratorer får en mail. Sandbox: straks.

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 · CreditorUpdate

legal_name

string · valgfri

cvr

string · valgfri

country

string · valgfri

external_ref

string · valgfri

contact_email

string (email) · valgfri

settlement_account

object · valgfri

default_dunning_plan_id

string · valgfri

distribution_defaults

object · valgfri

Fletter (JSON Merge Patch, ét niveau): felter der ikke er med, bevares; et felt sat til null fjernes og får standarden; null for hele objektet fjerner kreditorens opsætning

write_off_residual_fees

boolean · valgfri

Afskriv resterende gebyrer og renter når HOVEDSTOLEN er betalt, og stop rykkerne

debtor_paid_notice

boolean · valgfri

Debitors «Jeg har betalt» på betalingssiden (højst 5 dage, én gang pr. faktura)

principal_tolerance

Money · valgfri

previous_system

string · valgfri

Kreditorens TIDLIGERE opkrævningssystem (B8). Bæres videre til skyggens claims, skiftet, afstemningen og fremmede kvitteringer. Standard farpay

farpay · regnskabssystem · andet

debtor_attribute_source

DebtorAttributeSource · valgfri

spor pay-attributforskel (B8). Hvem er sandheden pr. debitorfelt, når en import møder en debitor Pay allerede har. existing = debitoren som den står (for en kreditor med regnskabsforbindelse: regnskabssystemets værdi, som indlæsningen alligevel skriver ved næste kundeopdatering); forskellen bliver en note kilde_eksisterende:<felt>, og rækken er exists_identical. stop = exists_different med diff:<felt>. Importen overskriver ALDRIG en eksisterende debitor. Standard: existing for name/address/type, stop for resten. I PATCH ændres kun medsendte felter. Importens metadata-nøgler er et supplement: kun en nøgle begge sider har med forskellig værdi er diff:metadata.

Svar

200

OK · Creditor

202

Afregningskontoen afventer godkendelse · SettlementAccountChange

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

H9: kreditorens VENTENDE ændring af afregningskontoen (0 eller 1; afgjorte står som creditor.updated) — scope admin

GET /creditors/{creditorId}/settlement-account-changes

Parametre

creditorId

path · string · påkrævet

Svar

200

OK · object

404

Fejl (RFC 9457) · Problem

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

H9: godkendes IKKE med en API-nøgle — svaret er altid 403 approval_requires_person

POST /creditors/{creditorId}/settlement-account-changes/{changeId}/approve

ÆNDRET (pay-sikkerhed2 T6-9, 18-10-2026). To nøgler er ikke to personer: den der havde to konto-brede admin-nøgler, kunne bede med den ene og godkende med den anden. En ny afregningskonto godkendes nu af en ADMINISTRATOR i kreditorfladen (Indstillinger → Kreditor), en navngiven person med andet trin. Databasens værn kræver det samme. Afvisning (…/reject) kan stadig ske med en admin-nøgle.

Parametre

creditorId

path · string · påkrævet

changeId

path · string · påkrævet

Idempotency-Key

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

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

Svar

403

Fejl (RFC 9457) · Problem

curl
curl -X POST https://api.fortapay.dk/v1/creditors/{creditorId}/settlement-account-changes/{changeId}/approve \
  -H "Authorization: Bearer $FP_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

H9: afvis en ventende afregningskonto (enhver admin-nøgle, også den der bad om den)

POST /creditors/{creditorId}/settlement-account-changes/{changeId}/reject

Parametre

creditorId

path · string · påkrævet

changeId

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 · SettlementAccountChange

404

Fejl (RFC 9457) · Problem

409

Fejl (RFC 9457) · Problem

curl
curl -X POST https://api.fortapay.dk/v1/creditors/{creditorId}/settlement-account-changes/{changeId}/reject \
  -H "Authorization: Bearer $FP_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

Status pr. rør — hvilken aftale, hvilket id (PBS-nr, LS-kreditornr, PSP merchant, MSN), hvilken tilstand og hvad der mangler

GET /creditors/{creditorId}/rails

Parametre

creditorId

path · string · påkrævet

Svar

200

OK · liste af RailStatus

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

R-27: de dannede eksporter ved ophør (nyeste først) — beviset, ikke filen

GET /creditors/{creditorId}/termination-exports

TILFØJET af pay-r-eksport 27-09-2026 (R-27, GDPR art. 28, stk. 3, litra g). ZIP'en (alle dokumenter som PDF, kontrolspor og data for kreditoren) dannes af driften med python -m app.services.ophoerseksport og udleveres ikke over API'et. current = ingen hændelse for kreditoren siden eksporten; den kommende ophørssletning kræver en gældende eksport (409 export_required).

Parametre

creditorId

path · string · påkrævet

Svar

200

OK · object

404

Fejl (RFC 9457) · Problem

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

C3: recovery i kroner pr. mekanisme + aldersfordeling og DSO

GET /creditors/{creditorId}/recovery

TILFØJET af pay-recovery 15-10-2026. Hver matchet indbetaling (netto efter refusioner) på en faktura med forfald i [from, to] tæller ÉT sted: til tiden, ellers den første af inkasso, afdrag, SMS, betalingslink, rykker 3/2/1, påmindelse, «efter forfald, før rykker» — vurderet den dag pengene kom. reconciled = summen over mekanismerne er lig alt indbetalt på periodens fakturaer (selvstændig optælling). Uden from/to: forrige måned. Højst 366 dage. Samme tal og samme port som kreditorfladens Nøgletal (409 noegletal_not_enabled).

Parametre

creditorId

path · string · påkrævet

from

query · string (date) · valgfri

to

query · string (date) · valgfri

Svar

200

OK · RecoveryReport

400

Fejl (RFC 9457) · Problem

404

Fejl (RFC 9457) · Problem

409

Fejl (RFC 9457) · Problem

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

C3: undtagelseskøen — fakturaer hvor der intet sker, og hvorfor

GET /creditors/{creditorId}/exceptions

TILFØJET af pay-recovery 15-10-2026. Samme prædikat som kreditorfladens fane «Hvorfor sker der intet?»: åbne fakturaer med en indsigelse, et ukendt PSP-svar, en fejlet udsendelse, et bogføringshold, en afvigelse fra regnskabet, et rykkerværn (reelt betalt) eller en begrænset debitor — og mulige dubletter uanset status. reasons bærer også rykkermotorens port (dunning_gate, med gate). Ældste forfald først.

Parametre

creditorId

path · string · påkrævet

cursor

query · string · valgfri

limit

query · integer · valgfri

Svar

200

OK · object

400

Fejl (RFC 9457) · Problem

404

Fejl (RFC 9457) · Problem

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

Ét rørs status og opsætning (fx BS — PBS-nr. og debitorgruppe)

GET /creditors/{creditorId}/rails/{rail}

TILFØJET af pay-integration 11-09 (fase 2A). agreement_ref er kreditorens EGEN aftale hos ordningen (BS: PBS-nr.); config er ikke-hemmelig opsætning. Status ændres ikke her — den følger onboarding-tjeklisten.

Parametre

creditorId

path · string · påkrævet

rail

path · string · påkrævet

Svar

200

OK · RailConfig

404

Fejl (RFC 9457) · Problem

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

Sæt rørets opsætning (scope admin). `bs` (PBS-nr. + debitorgruppe) og `fi` (FI-kreditornr., PBS-nr., navnerumsciffer, udstedelse); PBS-nr. er entydigt i live (409 pbs_nr_in_use). Et live-rør der er `active` med godkendt opsætning, ændres ikke (409 rail_in_operation) — det tages først ud af drift; de samme værdier igen er ikke en ændring

PATCH /creditors/{creditorId}/rails/{rail}

Parametre

creditorId

path · string · påkrævet

rail

path · string · påkrævet

Idempotency-Key

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

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

Krop · RailConfigUpdate

agreement_ref

string · valgfri

BS: kreditorens PBS-nr. (1-8 cifre; gemmes med 8). FI: kreditorens FI-kreditornr. (præcis 8 cifre)

config

object · valgfri

Tilladte nøgler afhænger af røret — en ukendt nøgle giver 422 (config.<nøgle>, code unsupported)

Svar

200

OK · RailConfig

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}/rails/{rail} \
  -H "Authorization: Bearer $FP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{}
JSON

Onboarding-tjekliste pr. rør (B8, docs/KREDITOR-ONBOARDING.md) — DPA er et blokerende trin for ALLE rør

GET /creditors/{creditorId}/onboarding

TILFØJET af pay-fundament 11-09 (B8). Trin markeres gennemført af Forta Pay (platform-rollen), ikke af kreditors egen nøgle. Et rør kan ikke blive active i live før dets blokerende trin (inkl. dpa_signed) er completed — håndhævet i databasen. I sandbox står trinene som waived_sandbox.

Parametre

creditorId

path · string · påkrævet

Svar

200

OK · OnboardingChecklist

404

Fejl (RFC 9457) · Problem

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

Kreditoren accepterer databehandleraftalen (DPA) i den gældende version — trinet `dpa_signed` bliver `completed`

POST /creditors/{creditorId}/onboarding/dpa-acceptance

TILFØJET af pay-portalonb (PORTAL-ONB, design-api-opus §7.1). Kræver scope admin. Acceptén gemmes med versionen OG sha256 af teksten i den version (GET …/onboarding → dpa), og dpa_signed.evidence_ref peger på den. DPA'en er det ENESTE trin kreditoren selv gør completed — alle andre indsendes (…/steps/{step}/submit) og godkendes af Forta Pay. Et udkast (dpa.final=false) kan kun accepteres i sandbox.

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 · DpaAcceptanceCreate

dpa_version

string · påkrævet

Skal være den gældende (OnboardingChecklist.dpa.version)

signer_name

string · påkrævet

signer_title

string · påkrævet

retention_months

object | null · valgfri

TILFØJET af pay-r-dpa (R-21, Bilag C.4): kreditorens valg af opbevaringsperiode i hele måneder pr. kategori (bilag, kontrolspor, kontakt, betalingsaftaler, debitor_uden_bilag). En udeladt kategori får forslaget. Ukendt kategori eller et tal uden for rammen → 422 med feltet opbevaring.<kategori>.

Svar

201

OK · DpaAcceptance

404

Fejl (RFC 9457) · Problem

409

`dpa_version_mismatch` (ikke den gældende; `current_version` i svaret) · `dpa_version_not_final` (udkast i live) · `dpa_already_accepted` · Problem

422

Fejl (RFC 9457) · Problem

curl
curl -X POST https://api.fortapay.dk/v1/creditors/{creditorId}/onboarding/dpa-acceptance \
  -H "Authorization: Bearer $FP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{
  "dpa_version": "…",
  "signer_name": "…",
  "signer_title": "…"
}
JSON

Indsend bevis for et onboarding-trin til Forta Pays godkendelse — trinet bliver `requested`, ALDRIG `completed`

POST /creditors/{creditorId}/onboarding/steps/{step}/submit

TILFØJET af pay-portalonb (PORTAL-ONB). Kræver scope admin. Kun trin med owner = creditor eller bank (ikke dpa_signed). Forta Pay godkender (completed) eller afviser (tilbage til missing med decision_reason). Håndhævet i databasen: kreditorens egen nøgle kan ikke gøre et trin completed.

Parametre

creditorId

path · string · påkrævet

step

path · string · påkrævet

Idempotency-Key

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

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

Krop · OnboardingStepSubmit

evidence

string · påkrævet

Fri tekst: hvad beviset er og hvor det står (fx «MPS' kvittering 3/10, sag 55123»). Forta Pay henter ingen URL

Svar

200

OK · OnboardingStep

404

Fejl (RFC 9457) · Problem

409

`step_not_submittable` — DPA-trinet, et trin Forta Pay selv registrerer (`scheme`/`forta_pay`), eller et trin der allerede er `completed`/`waived_sandbox` · Problem

422

Fejl (RFC 9457) · Problem

curl
curl -X POST https://api.fortapay.dk/v1/creditors/{creditorId}/onboarding/steps/{step}/submit \
  -H "Authorization: Bearer $FP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{
  "evidence": "…"
}
JSON

Fire øjne: hent en anmodning (fra et 202 på refund, credit, cancel eller collection-cases)

GET /approval-requests/{approvalRequestId}

status: pending → venter på en anden persons godkendelse i kreditorfladen. approved → handlingen er udført, og result_id er reversalen, inkassosagen eller fakturaen. rejected → intet er udført; decision_note er grunden. withdrawn → trukket tilbage (fx fordi fire øjne blev slået fra). Handlingen udføres højst én gang. Hvert endeligt udfald — approved, rejected og withdrawn (også når fire øjne slås fra med åbne anmodninger) — meldes som hændelsen approval_request.decided (webhook og /events), præcis én gang pr. anmodning, med anmodningen i data.object (samme form som her) — så kalderen ikke behøver at polle. Selve OPRETTELSEN (fra API'et som her, og fra kreditorfladen) meldes som approval_request.created, præcis én gang pr. anmodning.

Parametre

approvalRequestId

path · string · påkrævet

Svar

200

Fire øjne: anmodningen (202 = oprettet, intet udført endnu) · ApprovalRequest

404

Fejl (RFC 9457) · Problem

curl
curl -X GET https://api.fortapay.dk/v1/approval-requests/{approvalRequestId} \
  -H "Authorization: Bearer $FP_KEY"