Advanta / Banken en financiers / Ontwikkelaars

API van Advanta voor financiers

Uw eigen systeem leest de financieringsaanvragen die Advanta naar u doorstuurt, stuurt uw beslissingen, legt vast wat u eist voordat u financiert, beheert uw limieten, stuurt uw bankafschrift voor afstemming, nodigt uw eigen klanten en leveranciers uit en ontvangt ondertekende webhooks wanneer er iets gebeurt. Elke schrijfactie heeft hetzelfde effect als dezelfde actie in het financiersportaal. En het neemt al uw gegevens mee, wanneer u wilt: uw exitrecht.

  • OpenAPI 3.1
  • Versie 2026-09-23
  • JSON over HTTPS

Snel aan de slag

Eén basis-URL bedient live- en sandboxsleutels op dezelfde manier: de sleutel bepaalt wat u ziet.

Basis-URL
https://bzsengbmlzzhztjfvcag.supabase.co/functions/v1/funder-api
Authenticatie
Authorization: Bearer adv_fk_… bij elke aanroep: adv_fk_ gevolgd door 64 hexadecimale tekens.
Formaat
JSON heen en terug. Een bankafschrift kan ook als het oorspronkelijke XML- of CSV-bestand worden gestuurd.

Begin met GET /v1/me: het zegt bij welke financier de sleutel hoort, in welke omgeving hij zit en welke scopes hij heeft. Vraag daarna de aanvragen op die naar u zijn doorgestuurd.

curl
export ADVANTA_KEY="adv_fk_…"   # your key, shown once when it was issued
export BASE="https://bzsengbmlzzhztjfvcag.supabase.co/functions/v1/funder-api"

# 1. Who am I: funder, environment, scopes
curl -s "$BASE/v1/me" \
  -H "Authorization: Bearer $ADVANTA_KEY"

# 2. The requests routed to me that are still open
curl -s "$BASE/v1/requests?status=open&limit=20" \
  -H "Authorization: Bearer $ADVANTA_KEY"
JavaScript
// Node.js 18 or later, as an ES module (fetch and top-level await are built in)
const BASE = 'https://bzsengbmlzzhztjfvcag.supabase.co/functions/v1/funder-api';
const headers = { Authorization: `Bearer ${process.env.ADVANTA_KEY}` };

async function call(path) {
  const res = await fetch(BASE + path, { headers });
  const body = await res.json();
  if (!res.ok) throw new Error(`${res.status} ${body.error.code}: ${body.error.message}`);
  return body;
}

const me = await call('/v1/me');
console.log(me.environment, me.funder.name, me.key.scopes);

const { count, requests } = await call('/v1/requests?status=open&limit=20');
console.log(`${count} open request(s)`);
for (const r of requests) {
  console.log(r.request_ref, r.status, r.total_amount, r.my_offer?.status ?? 'no offer yet');
}

GET /v1/me antwoordt zo:

Antwoord · GET /v1/me
{
  "api_version": "2026-09-23",
  "environment": "sandbox",
  "funder": {
    "bank_id": "6d164c92-02cc-4f9a-ae8d-3f7f5ef043d3",
    "name": "Compartment Demo (LU)"
  },
  "key": {
    "id": "0b3c6a52-5d0e-4b53-9d0e-1c2b3a4d5e6f",
    "name": "sandbox · Example prospect",
    "prefix": "adv_fk_1a2b3",
    "scopes": ["requests:read", "limits:read", "webhooks:write"],
    "created_at": "2026-09-23T18:00:00Z",
    "expires_at": "2026-10-07T18:00:00Z",
    "prospect": "Example prospect"
  }
}

Omgevingen en sandbox

Er is één basis-URL. De sleutel bepaalt de omgeving, en GET /v1/me geeft die terug in environment.

environmentDe financierWat de sleutel ziet
liveDoor Advanta ingedeeld als echt of pilot.Alleen echte klanten.
sandboxEen demonstratiefinancier.Alleen fictieve bedrijven, op het demonstratievlak.
unclassifiedNog niet door Advanta ingedeeld.Geen enkele aanvraag.

Een aanvraag van het andere vlak is nooit zichtbaar, welke sleutel u ook gebruikt.

Sandboxsleutels

  • Advanta geeft een sandboxsleutel uit aan een bij naam genoemde prospect (key.prospect in GET /v1/me). Zoals elke sleutel wordt hij één keer getoond en wordt alleen de SHA-256 ervan bewaard.
  • Hij verloopt 1 tot 90 dagen na uitgifte (key.expires_at); daarna antwoordt elke aanroep met 401 key_expired. Advanta kan hem ook op elk moment intrekken.
  • Hij ziet alleen fictieve bedrijven, op het demonstratievlak. Die gegevens worden gedeeld met andere demonstraties en opnieuw opgebouwd wanneer het scenario wordt gereset; reken er dus op dat ze veranderen.
  • Hij leest aanvragen, instellingen, limieten, het betaalprofiel en uw klanten (aanbrengers, links, uitnodigingen en het rapport), en beheert zijn eigen webhook-endpoints en onboardinglinks: hij ziet alleen wat hij zelf heeft aangemaakt. Een leverancier die met een sandboxsleutel is uitgenodigd, wordt als testbedrijf op het demonstratievlak vastgelegd.
  • Hij kan alleen beslissingen nemen (aanbieden, afwijzen, financieren, ontvangst boeken), aanbrengers toevoegen en links uitgeven als Advanta dat op de sleutel heeft ingeschakeld; daarmee komt de scope decisions:write erbij. De aanbrengers en links van de demonstratiefinancier worden door alle demonstraties gedeeld.

U kunt vandaag een sandboxsleutel hebben: uw eigen systeem tegen onze demonstratiegegevens, vóór enig contract. Schrijf naar diogo@advanta.pt. De live sleutel wordt uitgegeven op de dag dat u wilt koppelen.

Authenticatie en scopes

Elke aanroep bevat Authorization: Bearer adv_fk_<64 hex>. Sleutels worden uitgegeven door het operationele team van Advanta en horen bij één financier. Een sleutel wordt één keer getoond, alleen de SHA-256 ervan wordt bewaard, en hij kan verlopen.

Elke sleutel heeft scopes. Een aanroep waarvoor de sleutel geen scope heeft, antwoordt met 403 forbidden.

ScopeWat hij toestaat
requests:readAanvragen lezen (GET /v1/requests, GET /v1/requests/{id} en de documenten ervan). Hij leest ook uw instellingen en vereiste documenten, de limietboeken, het betaalprofiel, uw klanten (aanbrengers, links, uitnodigingen en het rapport), uw onboardinglinks, uw webhook-endpoints en hun afleverlogboeken. Hij leest ook uw programmavoorwaarden (GET /v1/programme), de regresvorderingen (GET /v1/recourse), uw bankgegevens (GET /v1/bank-data), en de cessiemeldingen van een aanvraag en de kasstroom die de verkoper ervan met u deelt.
limits:readDe limietboeken lezen (GET /v1/credit-limits, GET /v1/seller-limits) en het betaalprofiel.
limits:writeLimieten instellen, herzien of weigeren (PUT /v1/credit-limits, PUT /v1/seller-limits).
decisions:writeAanbieden, afwijzen, financieren en ontvangsten boeken (POST /v1/requests/{id}/decision), en verhogen wat de debiteuren van een aanvraag moeten ondertekenen (POST /v1/requests/{id}/consent-level). Hij staat ook elke schrijfactie op instellingen, limieten, afschriften, klanten, onboardinglinks en webhook-endpoints toe, en het lezen van webhook-endpoints, klanten en onboardinglinks. Hij staat ook toe al uw gegevens te exporteren. Hij maakt ook een stille aanvraag openbaar (POST /v1/requests/{id}/announce), sluit een regresvordering (POST /v1/recourse/{id}/close) en wijzigt uw programmavoorwaarden.
settings:writeWijzigen wat uw debiteuren moeten ondertekenen voordat u financiert (PUT /v1/settings) en welke documenten u van verkopers vraagt (PUT /v1/required-documents). Ook uw programmavoorwaarden (PUT /v1/programme).
statements:writeEen bankafschrift sturen (POST /v1/statements).
clients:writeUw klanten beheren: aanbrengers toevoegen en uitschakelen (POST /v1/prescribers, POST /v1/prescribers/{id}/disable), links uitgeven, vervangen en uitschakelen (POST /v1/client-links, POST /v1/client-links/{id}/disable), en ze lezen, samen met de uitnodigingen en het rapport.
webhooks:writeWebhook-endpoints beheren: aanmaken, stoppen, het secret roteren, een test sturen, en de lijst en de afleverlogboeken lezen.
onboarding:writeOnboardinglinks voor uw leveranciers aanmaken (POST /v1/onboarding-links) en lezen.
exports:writeAl uw gegevens exporteren (POST /v1/exports, GET /v1/exports, GET /v1/exports/{id} en zijn documenten). Alleen productiesleutels.

Endpoints

Paden zijn relatief ten opzichte van de basis-URL. Elke aanroep kan 401 antwoorden (unauthorized of key_expired), een aanroep die een scope nodig heeft kan 403 forbidden antwoorden (de sleutel mist de scope, of de financier is niet actief), en 500 betekent: later opnieuw proberen. Die worden hieronder niet herhaald; Fouten somt elke code op.

Uw sleutel

Bij welke financier een sleutel hoort, zijn omgeving en zijn scopes. Begin hier.

GET/v1/health

Of de API werkt. Openbaar: geen sleutel, geen gegevens, geen databasetoegang.

Scope
Geen: openbaar, zonder sleutel
Antwoord
200{ status, api_version, time }
Fouten
Geen

Advanta vraagt deze route elke 5 minuten op; de resultaten staan op de openbare statuspagina.

curl
curl -s "$BASE/v1/health"

GET/v1/me

Wie er aanroept: de sleutel, zijn financier, zijn omgeving en zijn scopes.

Scope
Elke geldige sleutel
Antwoord
200{ api_version, environment, funder, key }
Fouten
405method_not_allowed

key.prefix zijn de eerste 12 tekens van de sleutel. key.expires_at is null voor een sleutel die niet verloopt; key.prospect noemt aan wie een sandboxsleutel is uitgegeven.

curl
curl -s "$BASE/v1/me" \
  -H "Authorization: Bearer $ADVANTA_KEY"
Antwoord · 200
{
  "api_version": "2026-09-23",
  "environment": "sandbox",
  "funder": {
    "bank_id": "6d164c92-02cc-4f9a-ae8d-3f7f5ef043d3",
    "name": "Compartment Demo (LU)"
  },
  "key": {
    "id": "0b3c6a52-5d0e-4b53-9d0e-1c2b3a4d5e6f",
    "name": "sandbox · Example prospect",
    "prefix": "adv_fk_1a2b3",
    "scopes": ["requests:read", "limits:read", "webhooks:write"],
    "created_at": "2026-09-23T18:00:00Z",
    "expires_at": "2026-10-07T18:00:00Z",
    "prospect": "Example prospect"
  }
}

Aanvragen en beslissingen

Lees de aanvragen die Advanta naar u heeft doorgestuurd en bied dan aan, wijs af, financier of boek een ontvangst; en vraag meer van de debiteuren van een aanvraag wanneer dat nodig is.

GET/v1/requests

De aanvragen die naar u zijn doorgestuurd (u kunt erop handelen) en die waarop u al hebt gehandeld (alleen lezen, ook na een herverdeling), nieuwste eerst, elk met uw eigen aanbod in my_offer als u er een hebt gedaan.

NaamWaarBeschrijving
statusqueryopen (standaard: pending, submitted, under_review, terms_sent, accepted, approved), all, of één status.
limitquery1 tot 200, standaard 50.
Scope
requests:read
Antwoord
200{ funder, count, requests[] }
Fouten
Alleen de algemene (401, 403, 500).

Een aanvraag bevat id, request_ref, type (factoring of confirming), status, total_amount, advance_amount, de verkoper in company_name en company_nif, invoice_count, assigned_bank_id, consent_level_required (wat elke debiteur moet ondertekenen voordat ze gefinancierd kan worden, vastgelegd bij het doorsturen), haar tijdstempels en, per debiteur, debtor_consent. De specificatie noemt elk veld.

curl
curl -s "$BASE/v1/requests?status=all&limit=50" \
  -H "Authorization: Bearer $ADVANTA_KEY"
JavaScript
const BASE = 'https://bzsengbmlzzhztjfvcag.supabase.co/functions/v1/funder-api';
const headers = { Authorization: `Bearer ${process.env.ADVANTA_KEY}` };

const res = await fetch(`${BASE}/v1/requests?status=open&limit=200`, { headers });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const { funder, requests } = await res.json();

// Routed to you (you can act on them) and not priced by you yet
const toPrice = requests.filter((r) => r.assigned_bank_id === funder.bank_id && !r.my_offer);
for (const r of toPrice) console.log(r.request_ref, r.type, r.total_amount, r.company_name);
Antwoord, ingekort · 200
{
  "funder": {
    "bank_id": "6d164c92-02cc-4f9a-ae8d-3f7f5ef043d3",
    "name": "Compartment Demo (LU)"
  },
  "count": 1,
  "requests": [
    {
      "id": "4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87",
      "request_ref": "FR-2026-0042",
      "type": "factoring",
      "status": "terms_sent",
      "total_amount": 18450.00,
      "company_name": "Example Seller, S.L.",
      "invoice_count": 3,
      "assigned_bank_id": "6d164c92-02cc-4f9a-ae8d-3f7f5ef043d3",
      "consent_level_required": "acknowledgment",
      "created_at": "2026-09-22T09:12:00Z",
      "my_offer": {
        "funding_request_id": "4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87",
        "rate": 2.4,
        "advance_pct": 90,
        "days": 60,
        "status": "pending",
        "submitted_at": "2026-09-23T10:30:00Z",
        "accepted_at": null
      },
      "debtor_consent": [
        {
          "debtor_name": "Example Buyer, S.A.",
          "debtor_tax_id": "A00000000",
          "status": "pending",
          "level_required": "acknowledgment",
          "level_achieved": null,
          "meets_requirement": false
        }
      ]
    }
  ]
}

GET/v1/requests/{id}

Het beoordelingsdossier van één aanvraag: de aanvraag, haar vorderingen, de meest recente Advanta Score van de verkoper, uw eigen aanbod en risk, de fraudesignalen en geschillen van de aanvraag, zoals uw portaal ze toont.

NaamWaarBeschrijving
id verplichtpathHet id van de aanvraag.
Scope
requests:read
Antwoord
200{ request, debtor_consent[], receivables[], score, my_offer, risk }
Fouten
404not_found

score loopt van 300 tot 850, met een klasse van A tot E en de onderliggende dimensies. Hij wordt ter plekke berekend als de verkoper er nog geen heeft, en is null als dat mislukt. Elke vordering heeft invoice_no, invoice_amount, invoice_date, invoice_due_date en de debiteur in customer_name. debtor_consent geeft per debiteur de status van de melding, het vereiste en het ondertekende niveau (level_achieved), meets_requirement, het kanaal, de ondertekende verklaringstekst en wie heeft ondertekend.

risk.signals somt de fraudesignalen op die nog open of bevestigd zijn, elk met een stabiele code (bijvoorbeeld amount_above_history) en een severity. Een hard signaal (bijvoorbeeld een bedrag dat veranderde terwijl de factuur in een aanvraag zit, een creditnota erop of een open geschil) houdt doorsturen en financieren tegen tot het operationele team van Advanta het beoordeelt; de andere markeren alleen. risk.disputes somt elk geschil op dat tegen de aanvraag is vastgelegd.

curl
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87" \
  -H "Authorization: Bearer $ADVANTA_KEY"

POST/v1/requests/{id}/decision

Voorwaarden aanbieden, afwijzen, financieren of een ontvangst boeken. De aanvraag moet naar u zijn doorgestuurd, anders 409 not_routed_to_you.

NaamWaarBeschrijving
id verplichtpathHet id van de aanvraag.

De body heeft een van vier vormen, gekozen via decision:

decisionVeldenEffect
offerrate (procent, boven 0 en tot 100) en advance_pct (zelfde bereik), beide verplicht; days, notes, valid_days (1 tot 90).Stuurt uw voorwaarden en zet een aanvraag met status pending, submitted of under-review op terms_sent. Het aanbod verloopt na valid_days, anders na uw ingestelde geldigheid (standaard 7 dagen). Geweigerd met 409 credit_limit als een van uw limieten het niet kan dragen, met 409 debtor_not_eligible_for_funder als u alleen afnemers van uw lijst accepteert en een debiteur er niet op staat, en met 409 documents_missing_for_funder als een document dat u van de verkoper vraagt ontbreekt, niet gecontroleerd is of verlopen is.
declinereason of notes, minstens een van beide; notes is het bericht dat de verkoper leest. internal_note optioneel: alleen voor uw team, nooit aan de verkoper getoond.Sluit de aanvraag. reason is een van payer_credit, invoice_ineligible, documentation, concentration, amount_out_of_range, sector_excluded, no_funder_capacity, withdrawn_by_client of other; vrije tekst wordt bewaard als notitie met reden other.
fundvalue_date (JJJJ-MM-DD, de valutadatum van uw overschrijving aan de verkoper, hoogstens 7 dagen vooruit) en reference (de referentie van de overschrijving, 3 tot 140 tekens); amount optioneel, getoetst aan het aanvaarde voorschot.Pas nadat de verkoper uw voorwaarden heeft aanvaard (status approved). Bij factoring moet eerst de melding van elke debiteur bevestigd zijn (anders 409 funding_gate_failed), en de documenten die u van de verkoper vraagt moeten op de financieringsdatum geldig zijn (anders 409 documents_missing_for_funder).
settleamount (verplicht); received_at (standaard nu, hoogstens één dag vooruit); reference (tot 140 tekens); note (tot 1.000); final.Boekt ontvangen geld op een gefinancierde aanvraag. Deelbetalingen tellen op; de aanvraag wordt settled wanneer het totaal het bedrag van de aanvraag bereikt of final true is.
Scope
decisions:write
Antwoord
201{ decision, request_id, offer_id, expires_at, status } (offer)
200{ decision, request_id, status } (decline)
200{ decision, request_id, status, funded_at } (fund)
200{ decision, request_id, settlement_id, status, received_total, request_total, outstanding } (settle)
Fouten
400reason_required
403not_your_request (alleen bij settle: u bent niet de financier van de aanvraag)
404not_found
409not_routed_to_you, invalid_state, credit_limit, funding_gate_failed, funding_amount_mismatch, debtor_not_eligible_for_funder, documents_missing_for_funder
422invalid_terms, invalid_amount, invalid_received_at, invalid_funding_details, step_back_message_required, invalid_decision
curl
curl -s -X POST "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/decision" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"decision":"offer","rate":2.4,"advance_pct":90,"days":60,"valid_days":7,"notes":"Subject to the notice being acknowledged"}'
JavaScript
async function offer(requestId, terms) {
  const res = await fetch(`${BASE}/v1/requests/${requestId}/decision`, {
    method: 'POST',
    headers: { ...headers, 'Content-Type': 'application/json' },
    body: JSON.stringify({ decision: 'offer', ...terms }),
  });
  const body = await res.json();
  if (res.status === 201) return body; // { decision, request_id, offer_id, expires_at, status }
  const { code, message, debtors } = body.error;
  if (code === 'debtor_not_eligible_for_funder') {
    for (const d of debtors) console.warn(d.name ?? d.debtor_key, d.reason, d.invoices);
  }
  throw new Error(`${res.status} ${code}: ${message}`);
}

await offer('4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87', { rate: 2.4, advance_pct: 90, days: 60, valid_days: 7 });
Antwoord · 201
{
  "decision": "offer",
  "request_id": "4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87",
  "offer_id": "7a9e3c1b-2d4f-4e6a-8b0c-5d1e2f3a4b5c",
  "expires_at": "2026-09-30T10:30:00Z",
  "status": "terms_sent"
}
Bodies voor afwijzen, financieren en ontvangst boeken
{ "decision": "decline", "reason": "concentration", "notes": "We cannot fund this buyer this quarter", "internal_note": "Group exposure above our internal limit" }

{ "decision": "fund", "value_date": "2026-10-01", "reference": "TRF-2026-1001-07" }

{ "decision": "settle", "amount": 12500.00, "received_at": "2026-10-30T10:00:00Z", "reference": "ADV-A1F51301-1000" }

Documenten en regels

Wat in orde moet zijn voordat u financiert: de documenten die u van verkopers vraagt, per land van de verkoper, en wat elke debiteur moet ondertekenen. Elke aanvraag bewaart de versies die aan uw eisen voldeden.

GET/v1/requests/{id}/documents

Het documentendossier van één aanvraag. Toen de aanvraag naar u werd doorgestuurd, en opnieuw toen ze werd gefinancierd, legde Advanta vast welke versie van elk door u vereist document aan uw eisen voldeed: bestandsnaam, SHA-256, datum van uitgifte en geldigheid, en wanneer en hoe Advanta het heeft gecontroleerd. Die vastlegging verandert nooit, ook niet als de verkoper nieuwere versies uploadt; elke regel zegt ook hoe het document er vandaag voor staat, en current somt de huidige documenten van de verkoper op.

NaamWaarBeschrijving
id verplichtpathHet id van de aanvraag.
Scope
requests:read
Antwoord
200{ request_id, seller_country, today, required_now, snapshots[], current[] }
Fouten
404not_found

Elke regel met een bestand heeft een download_url die twee minuten geldig is (url_expires_in), en elke uitgegeven URL wordt gelogd. Vergelijk de SHA-256 van wat u downloadt met de vastgelegde.

curl
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/documents" \
  -H "Authorization: Bearer $ADVANTA_KEY"

GET/v1/required-documents

De documenten die u van verkopers vraagt, per land van de verkoper, en de catalogus waaruit ze gekozen worden: de code van elk document, de naam in zeven talen, de uitgever, de gebruikelijke geldigheid en de gevoeligheid. De gebruikelijke geldigheid vult alleen vooraf in: de datum die op het document staat telt, en die legt de verkoper vast en controleert Advanta.

Scope
requests:read
Antwoord
200{ funder, required, catalogue[] }
Fouten
Alleen de algemene (401, 403, 500).

Een aanvraag wordt alleen naar u doorgestuurd, uw aanbod alleen vastgelegd en de aanvraag alleen gefinancierd zolang elk document op uw lijst voor het land van de verkoper door Advanta is gecontroleerd en op die datum geldig is; anders 409 documents_missing_for_funder.

curl
curl -s "$BASE/v1/required-documents" \
  -H "Authorization: Bearer $ADVANTA_KEY"

PUT/v1/required-documents

Uw lijst voor één land van verkopers vervangen; een lege lijst wist haar. De codes komen uit de catalogus, en de wijziging wordt met note vastgelegd in de bewijsketen van Advanta. Aanvragen die al bij u liggen, blijven bij u; uw volgende aanbod of financiering op een ervan wacht tot de verkoper aan de nieuwe lijst voldoet (open_requests_not_meeting telt ze).

NaamWaarBeschrijving
country verplichtbodyHet land van de verkoper, twee letters.
codes verplichtbodyDocumentcodes uit de catalogus.
notebodyTot 500 tekens.
Scope
settings:write of decisions:write
Antwoord
200{ …required documents, changed, country, codes, open_requests_not_meeting }
Fouten
422body_required, country_invalid, codes_invalid, note_invalid, country_without_catalogue, document_code_unknown
curl
curl -s -X PUT "$BASE/v1/required-documents" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"country":"PT","codes":["cert_hacienda","cert_seguridad_social","cirbe"],"note":"Credit committee of 23 September"}'

GET/v1/settings

Wat uw debiteuren moeten ondertekenen voordat u financiert: het niveau dat elke debiteur moet ondertekenen voordat een naar u doorgestuurde factoringaanvraag gefinancierd kan worden (receipt, dan acknowledgment, dan acceptance), of alleen door een advocaat goedgekeurde verklaringsteksten tellen, uw open aanvragen per niveau, en voor welke niveaus elk toepasselijk recht een verklaringstekst heeft, in welke talen.

Scope
requests:read
Antwoord
200{ funder, debtor_consent_level, require_counsel_approved_texts, open_requests_by_level, levels, levels_by_law, texts_counsel_approved }
Fouten
Alleen de algemene (401, 403, 500).
curl
curl -s "$BASE/v1/settings" \
  -H "Authorization: Bearer $ADVANTA_KEY"

PUT/v1/settings

Wijzigen wat uw debiteuren moeten ondertekenen. De wijziging geldt voor aanvragen die vanaf dan naar u worden doorgestuurd; een al doorgestuurde aanvraag houdt het niveau waarmee ze werd doorgestuurd. reason wordt vastgelegd in de bewijsketen van Advanta.

NaamWaarBeschrijving
debtor_consent_levelbodyreceipt, acknowledgment of acceptance.
require_counsel_approved_textsbodytrue om alleen door een advocaat goedgekeurde verklaringsteksten te laten tellen.
reason verplichtbodyWaarom, minstens 8 tekens.
Scope
settings:write of decisions:write
Antwoord
200{ …settings, changed, open_requests_keep_their_level }
Fouten
422level_invalid, invalid_flag, reason_required
curl
curl -s -X PUT "$BASE/v1/settings" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"debtor_consent_level":"acknowledgment","reason":"Credit committee decision of 22 September"}'

Programmavoorwaarden en regres

Kies, als standaard en per bedrijf, of elke debiteur vóór uw financiering de cessiemelding krijgt (openbaar) of dat de melding wordt voorbereid en klaar gehouden (stil), met of zonder regres, en of u de bankgegevens van de verkoper vraagt. Maak daarna een stille aanvraag openbaar, lees de cessiemeldingen en de kasstroom die de verkoper met u deelt, en volg uw regresvorderingen.

GET/v1/programme

Uw programmavoorwaarden: uw standaard, de voorwaarden die u voor bepaalde bedrijven vastlegde, de bedrijven waarvoor u voorwaarden kunt vastleggen (met een aanvraag die naar u is doorgestuurd, en uw eigen klanten) en uw factoringaanvragen geteld naar hun voorwaarden. Een aanvraag krijgt de voorwaarden die gelden wanneer ze naar u wordt doorgestuurd en houdt ze.

Scope
requests:read
Antwoord
200{ funder, bank_id, default, companies[], sellers[], requests }
Fouten
Alleen de algemene (401, 403, 500).

disclosure: announced (standaard): elke debiteur krijgt de melding en bevestigt de cessie voordat u financiert. confidential: wanneer de aanvraag naar u wordt doorgestuurd, wordt de melding aan elke debiteur voorbereid, met haar vingerafdruk (SHA-256), en verzendklaar bewaard, en de financiering wacht niet op de debiteur. Vóór de financiering moeten alle blokkerende factuurcontroles geslaagd zijn, moeten de facturen uit de eigen boekhouding van de verkoper komen (ERP, e-factuur of SAF-T), moet elke debiteur een actuele voorbereide melding hebben die u noemt en een adres waar ze naartoe gaat, en moet de verificatie van de verkoper goedgekeurd zijn. De meldingen worden verstuurd wanneer u de aanvraag openbaar maakt, en automatisch bij een gefinancierde aanvraag wanneer een trigger die u aanzette zich voordoet: announce_overdue_days, announce_on_dispute, announce_on_kyc_lapse.

recourse: with (met regres) of without (zonder regres). recourse_days: dagen na de vervaldatum van een factuur voordat een gefinancierde, nog niet afgewikkelde aanvraag een vordering opent (null: geen). bank_data: off, requested (de verkoper wordt gevraagd zijn zakelijke rekening voor u te koppelen, alleen-lezen en met zijn toestemming) of required (de financiering wacht ook tot de rekening waarop u betaalt bevestigd is als die van de verkoper zelf).

curl
curl -s "$BASE/v1/programme" \
  -H "Authorization: Bearer $ADVANTA_KEY"
Antwoord, ingekort · 200
{
  "funder": { "bank_id": "6d164c92-02cc-4f9a-ae8d-3f7f5ef043d3", "name": "Example Funder" },
  "default": {
    "disclosure": "announced",
    "recourse": "with",
    "recourse_days": 30,
    "announce_overdue_days": null,
    "announce_on_dispute": false,
    "announce_on_kyc_lapse": false,
    "bank_data": "requested",
    "source": "funder_default",
    "updated_at": "2026-09-28T10:00:00Z"
  },
  "companies": [
    {
      "seller_id": "2f6d8a4e-1b3c-4d5e-9f70-8a1b2c3d4e5f",
      "company_name": "Example Seller, S.L.",
      "tax_id": "B00000000",
      "terms": { "disclosure": "confidential", "recourse": "with", "recourse_days": 30, "announce_overdue_days": 15, "announce_on_dispute": true, "announce_on_kyc_lapse": true, "bank_data": "required", "source": "seller" },
      "reason": "Credit committee of 28 September"
    }
  ],
  "requests": { "announced:with:open": 4, "confidential:with:funded": 1 }
}

PUT/v1/programme

Uw standaard (zonder seller_id) of de voorwaarden van één bedrijf wijzigen. Alleen de sleutels die u stuurt veranderen; {"reset": true} met een seller_id zet dat bedrijf terug op uw standaard. De wijziging geldt voor aanvragen die vanaf dan naar u worden doorgestuurd; al doorgestuurde aanvragen houden hun voorwaarden. reason wordt vastgelegd in de bewijsketen van Advanta.

NaamWaarBeschrijving
seller_idbodyHet id van een bedrijf uit sellers in GET /v1/programme. Afwezig of null: uw standaard.
terms verplichtbodyDe voorwaarden om te wijzigen: disclosure, recourse, recourse_days, announce_overdue_days, announce_on_dispute, announce_on_kyc_lapse, bank_data; of reset.
reason verplichtbodyWaarom, minstens 8 tekens.
Scope
settings:write of decisions:write
Antwoord
200{ funder, bank_id, seller_id, terms, changed, open_requests_keep_their_terms }
Fouten
422body_invalid, seller_id_invalid, terms_invalid, terms_key_unknown, reason_required, seller_not_in_programme
curl
curl -s -X PUT "$BASE/v1/programme" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"seller_id":"2f6d8a4e-1b3c-4d5e-9f70-8a1b2c3d4e5f","terms":{"disclosure":"confidential","announce_overdue_days":15,"announce_on_dispute":true,"announce_on_kyc_lapse":true,"bank_data":"required"},"reason":"Credit committee of 28 September"}'

POST/v1/requests/{id}/announce

Een stille aanvraag die naar u is doorgestuurd openbaar maken: ze wordt openbaar en de voor haar voorbereide meldingen gaan naar haar debiteuren, die ze daarna bevestigen zoals in een openbaar programma. Mogelijk zolang de aanvraag openstaat, in beoordeling is, voorwaarden heeft gekregen, goedgekeurd of gefinancierd is. Er volgt een event request.announced; zodra een melding verstuurd is, blijft de aanvraag openbaar.

NaamWaarBeschrijving
id verplichtpathHet id van de aanvraag.
reason verplichtbodyWaarom, minstens 8 tekens. Wordt vastgelegd in de bewijsketen van Advanta.
Scope
decisions:write
Antwoord
200{ request_id, disclosure, trigger, notices, sending_queued }
Fouten
403not_routed_to_you
404not_found
422body_invalid, reason_required, already_announced, request_closed
curl
curl -s -X POST "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/announce" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"reason":"Invoice 2026-118 is 20 days overdue"}'

GET/v1/requests/{id}/notices

De cessiemeldingen van de aanvraag, één per debiteur, elk met het voorbereide document als dat er is: precies het onderwerp en de HTML die de debiteur ontvangt, de taal, het toepasselijke recht en de SHA-256. Voor een aanvraag die naar u is doorgestuurd, of een waarop u al hebt gehandeld.

NaamWaarBeschrijving
id verplichtpathHet id van de aanvraag.
Scope
requests:read
Antwoord
200{ request_id, count, notices[] }
Fouten
404not_found

De HTML bevat een plaatshouder, ACK_LINK tussen dubbele accolades, waar de bevestigingslink van de debiteur komt; de link bevat een geheim en wordt nooit getoond. current zegt of het document nog overeenkomt met de facturen en het bedrag van de melding.

curl
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/notices" \
  -H "Authorization: Bearer $ADVANTA_KEY"

GET/v1/requests/{id}/cash-flow

Wat de verkoper van zijn zakelijke rekening met u deelt, alleen-lezen en met zijn toestemming, via een vergunde rekeninginformatiedienst: de koppeling, zijn rekeningen (de laatste vier tekens van elke IBAN) en hun saldi, twaalf maanden transacties per maand en de controle van zijn uitbetalingsrekening. cash_flow is null zolang de verkoper geen rekening voor u heeft gekoppeld.

NaamWaarBeschrijving
id verplichtpathHet id van de aanvraag.
Scope
requests:read
Antwoord
200{ request_id, bank_data, cash_flow, bank_data_problems[], payment_alerts[] }
Fouten
404not_found

bank_data_problems zegt waar de financiering nog op wacht wanneer uw voorwaarden bankgegevens vereisen. payment_alerts zijn de betalingen die de verkoper ontving van een debiteur van deze aanvraag nadat u haar onder stille voorwaarden financierde. De toestemming van een verkoper geldt voor één financier: u ziet alleen wat hij met u deelt.

curl
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/cash-flow" \
  -H "Authorization: Bearer $ADVANTA_KEY"

GET/v1/recourse

Uw gefinancierde factoringaanvragen per soort regres (with, without, en not_recorded voor aanvragen doorgestuurd vóór 28 september 2026), de vorderingen geteld per soort en status, en de vorderingen zelf, open eerst. Er opent één vordering per aanvraag wanneer een gefinancierde aanvraag recourse_days na de vervaldatum van een factuur niet is afgewikkeld: recourse, op de verkoper, voor het voorgeschoten bedrag plus uw vergoedingen, min wat u al ontving; debtor_default, zonder regres, voor uw eigen incasso en verzekering.

NaamWaarBeschrijving
statusqueryopen, settled, withdrawn of written_off. Afwezig: alle vorderingen.
Scope
requests:read
Antwoord
200{ funder, bank_id, currency, as_of, by_type[], claims[], list[] }
Fouten
422status_invalid

De verkoper betaalt een regresvordering terug op pay_to_iban met pay_reference. Wanneer de betalingen die u vanaf dan boekt (een afschriftregel die u bevestigt, of de beslissing settle) claim_amount dekken, is de vordering afgewikkeld en sluit de aanvraag als afgewikkeld door regres: de facturen gaan terug naar de verkoper, nog steeds onbetaald door de debiteur.

curl
curl -s "$BASE/v1/recourse?status=open" \
  -H "Authorization: Bearer $ADVANTA_KEY"

POST/v1/recourse/{id}/close

Een open vordering van u sluiten: een regresvordering wordt withdrawn (u ziet ervan af, of u sprak iets anders af met de verkoper), een wanbetaling van de debiteur wordt written_off (overgedragen aan uw incasso of uw verzekeraar). reason wordt vastgelegd in de bewijsketen van Advanta.

NaamWaarBeschrijving
id verplichtpathHet id van de vordering (claim_id).
status verplichtbodywithdrawn of written_off.
reason verplichtbodyWaarom, minstens 8 tekens.
Scope
decisions:write
Antwoord
200{ claim_id, status }
Fouten
403not_your_claim
404not_found
422body_invalid, status_invalid, reason_required, close_invalid, claim_closed
curl
curl -s -X POST "$BASE/v1/recourse/$CLAIM_ID/close" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"withdrawn","reason":"Payment plan agreed with the seller on 2 October"}'

GET/v1/bank-data

Uw eigen incassorekening, door uw beheerder in het portaal gekoppeld en op dezelfde manier gelezen: de transacties gaan door dezelfde afstemming als POST /v1/statements, zodat ontvangsten zonder bestanden te uploaden aansluiten op uw gefinancierde aanvragen. Verder: hoeveel verkopers hun rekening met u delen, de betalingswaarschuwingen op uw aanvragen (de laatste 180 dagen) en de kosten van de aanbieder die aan u worden toegerekend, per maand.

Scope
requests:read
Antwoord
200{ funder, bank_id, own_accounts[], sellers_sharing, payment_alerts[], charges[] }
Fouten
Alleen de algemene (401, 403, 500).

unit_price_eur en amount_eur zijn null tot de prijs van de aanbieder vastligt.

curl
curl -s "$BASE/v1/bank-data" \
  -H "Authorization: Bearer $ADVANTA_KEY"

Limieten en betaalprofiel

Uw blootstelling per debiteur en per verkoper, door het platform zelf toegepast, met limieten één voor één of tot 2.000 tegelijk; hoe een koper zijn leveranciers betaalt; en wat Advanta weet over elke debiteur van een aanvraag.

GET/v1/credit-limits

Uw boek per debiteur: uw limiet en wat uitstaat, is toegezegd, is aangeboden en nog beschikbaar is, in euro.

Scope
limits:read of requests:read
Antwoord
200{ funder, currency, count, debtors[] }
Fouten
Alleen de algemene (401, 403, 500).

Elke debiteur bevat debtor_key, debtor_name, debtor_country, limit_status, limit_amount, outstanding, committed, offered, available, overdue_count, oldest_overdue, frozen, decided_at en note.

curl
curl -s "$BASE/v1/credit-limits" \
  -H "Authorization: Bearer $ADVANTA_KEY"

PUT/v1/credit-limits

Uw limiet op een debiteur instellen of herzien, of de debiteur weigeren. De database weigert elk later aanbod dat deze limiet niet kan dragen.

NaamWaarBeschrijving
debtor_tax_id verplichtbodyHet btw- of fiscale nummer van de debiteur.
debtor_countrybodyISO 3166 alpha-2.
debtor_namebodyDe naam van de debiteur.
amountbodyEuro, 0 of meer. Verplicht voor een actieve limiet.
statusbodyactive (standaard), refused of suspended.
notebodyVrije tekst.
Scope
limits:write of decisions:write
Antwoord
200{ credit_limit }
Fouten
422debtor_tax_id_required, invalid_amount, invalid_limit
curl
curl -s -X PUT "$BASE/v1/credit-limits" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"debtor_tax_id":"A00000000","debtor_country":"ES","debtor_name":"Example Buyer, S.A.","amount":250000,"status":"active"}'

POST/v1/credit-limits/import

Tot 2.000 limieten op debiteuren in één aanroep laden: uw eigen boek, of de limieten van uw kredietverzekeraar. Elke regel wordt precies zo gecontroleerd als PUT /v1/credit-limits er één controleert en krijgt een eigen antwoord: een regel die faalt, houdt de andere niet tegen, en een debiteur die twee keer in dezelfde aanroep staat, wordt de tweede keer geweigerd.

NaamWaarBeschrijving
rows verplichtbody1 tot 2.000 regels, elk met debtor_tax_id en, zoals bij PUT /v1/credit-limits, debtor_country, debtor_name, amount, status en note. amount is een getal of cijfers met een decimale punt; verplicht voor een actieve limiet. Alleen een lijst van regels, zonder het object eromheen, wordt ook aanvaard (met source import).
sourcebodyimport (uw eigen limieten, standaard) of insurer (de limieten van uw kredietverzekeraar).
source_refbodyHet bestand of de batch waar de limieten vandaan komen, hoogstens 200 tekens.
Scope
limits:write of decisions:write
Antwoord
200{ funder, source, source_ref, received, written, refused, rows[] }
Fouten
413too_many_rows
422rows_required, invalid_source, source_ref_invalid, source_ref_too_long

Elke geschreven limiet legt zijn bron en referentie vast, op de limiet en in de geschiedenis ervan. Het antwoord telt received, written en refused, en beantwoordt elke regel met row (geteld vanaf 1), debtor_tax_id en ok: een geschreven regel voegt debtor_key, status en amount toe; een geweigerde regel geeft zijn error (invalid_amount, debtor_tax_id_required, duplicate_debtor, invalid_status, amount_required, invalid_country, row_invalid of invalid_limit) en kan een detail toevoegen.

curl
curl -s -X POST "$BASE/v1/credit-limits/import" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"source":"insurer","source_ref":"Insurer limits 2026-09","rows":[{"debtor_tax_id":"A00000000","debtor_country":"ES","debtor_name":"Example Buyer, S.A.","amount":250000},{"debtor_tax_id":"500000000","debtor_country":"PT","status":"refused"}]}'

GET/v1/seller-limits

Uw boek per verkoper, met dezelfde cijfers als het debiteurenboek.

Scope
limits:read of requests:read
Antwoord
200{ funder, currency, count, sellers[] }
Fouten
Alleen de algemene (401, 403, 500).

Elke verkoper bevat seller_id, seller_name, seller_nif, seller_country en dezelfde limiet- en blootstellingsvelden als een debiteur.

curl
curl -s "$BASE/v1/seller-limits" \
  -H "Authorization: Bearer $ADVANTA_KEY"

PUT/v1/seller-limits

Uw limiet op een verkoper instellen of herzien, of de verkoper weigeren.

NaamWaarBeschrijving
seller_id verplichtbodyZoals teruggegeven door GET /v1/seller-limits.
amountbodyEuro, 0 of meer.
statusbodyactive (standaard), refused of suspended.
notebodyVrije tekst.
Scope
limits:write of decisions:write
Antwoord
200{ seller_limit }
Fouten
404not_found
422seller_id_required, invalid_amount, invalid_limit
curl
curl -s -X PUT "$BASE/v1/seller-limits" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"seller_id":"2f6d8a4e-1b3c-4d5e-9f70-8a1b2c3d4e5f","amount":100000,"status":"active","note":"Annual review"}'

GET/v1/payer-record

Hoe een afnemer zijn leveranciers betaalt, alleen geaggregeerd, uit de boekhouding van de leveranciers die met Advanta verbonden zijn. Het profiel wordt gepubliceerd wanneer minstens drie leveranciers de afnemer waarnemen; anders zegt status waarom en is elk cijfer null. U kunt het alleen lezen voor een afnemer op een aanvraag binnen uw bereik of op uw debiteurenlijst; een sandboxsleutel leest het profiel van het demonstratievlak.

NaamWaarBeschrijving
tax_id verplichtqueryHet btw- of fiscale nummer van de afnemer.
countryqueryISO 3166 alpha-2.
Scope
limits:read of requests:read
Antwoord
200{ funder, payer_record }
Fouten
404not_found (de afnemer staat op geen aanvraag binnen uw bereik en niet op uw debiteurenlijst)
422tax_id_required

De cijfers omvatten observers, invoice_count, avg_days_to_pay, median_days_to_pay, on_time_pct, de betalingsachterstand (avg_settle_delay_days, median_settle_delay_days, p75_settle_delay_days, worst_settle_delay_days), aantallen openstaand en achterstallig, window_from en refreshed_at. payer_record is null als er geen profiel is.

curl
curl -s "$BASE/v1/payer-record?tax_id=A00000000&country=ES" \
  -H "Authorization: Bearer $ADVANTA_KEY"

GET/v1/requests/{id}/debtors

Wat Advanta weet over elke debiteur van een factoringaanvraag die naar u is doorgestuurd, of een waarop u al hebt gehandeld: zijn level bij Advanta sinds level_since (notice: hij kent Advanta alleen van de melding; account: hij heeft zijn betalersaccount geactiveerd; books: hij heeft zijn boekhouding gekoppeld; buyer: hij voert een kopersprogramma, en buyer_programme is true), de eigen geschiedenis van de verkoper met hem, zijn officiële betaaltermijn als hij een overheidsinstantie is, en uw limiet op hem.

NaamWaarBeschrijving
id verplichtpathHet id van de aanvraag.
Scope
requests:read
Antwoord
200{ funder, request_id, count, debtors[] }
Fouten
404not_found

score is de eigen score van de debiteur (klasse, 0 tot 100, wanneer en met welke modelversie). Die wordt alleen gegeven als de debiteur zijn gegevens deelt met de financiers die door hem verschuldigde facturen financieren, op niveau books of buyer staat, en de aanvraag naar u is doorgestuurd (niet een waarop u alleen hebt gehandeld); anders is hij null. pair_history is de geschiedenis van de verkoper met deze debiteur over 36 maanden, met de regels van het betaalprofiel: alleen echte facturen, en te laat alleen ten opzichte van vervaldata die op het document of in het ERP staan. public_payment_period is de recentste officiële gemiddelde betaaltermijn van een overheidsinstantie (DGAL voor Portugese gemeenten, Hacienda voor Spaanse lokale overheden). credit_limit is uw limiet op de debiteur, waar die vandaan komt (source, source_ref) en wat ervan gebruikt is (exposure: uitstaand plus toegezegd plus aangeboden, in euro).

curl
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/debtors" \
  -H "Authorization: Bearer $ADVANTA_KEY"

Afschriften en ontvangsten

Stuur het afschrift van uw incassorekening en elke bijschrijving wordt afgestemd op uw gefinancierde aanvragen; elke match bevestigt u in het portaal. Om zelf een betaling te boeken, stuurt u de beslissing settle.

POST/v1/statements

Het afschrift van uw incassorekening sturen voor afstemming: een CAMT.053- (XML) of CSV-bestand, hoogstens 4 MiB en 5.000 transacties. Elke bijschrijving wordt afgestemd op uw eigen gefinancierde aanvragen, eerst op de referentie die de debiteur vermeldde. Er wordt niets afgeboekt voordat u een match in het portaal bevestigt. Hetzelfde bestand wordt geen tweede keer aangenomen, herkend aan de SHA-256.

NaamWaarBeschrijving
file_namequeryDe bestandsnaam (optioneel).
kindquerycamt053 of csv; wordt herkend als hij ontbreekt.
het bestand verplichtbodyHet oorspronkelijke bestand, gestuurd als application/xml of text/csv; of JSON { file_name, kind, content_base64 }.
Scope
statements:write of decisions:write
Antwoord
201{ import_id, file_sha256, lines, credits, duplicates, proposed, suggested, unmatched, ignored, … }
Fouten
409statement_already_imported
413file_too_large, too_many_lines
422file_required, file_unreadable, file_empty, statement_unreadable, statement_has_no_transactions, line_invalid
curl
curl -s -X POST "$BASE/v1/statements?file_name=statement-2026-10-30.xml&kind=camt053" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/xml" \
  --data-binary @statement-2026-10-30.xml

Klanten en aanbrengers

Breng uw eigen klanten mee: een eigen open link, een link per aanbrenger, en de uitnodigingen en het rapport die tonen wie via welke weg kwam. De bedrijven die u meebrengt, worden alleen naar u doorgestuurd.

GET/v1/prescribers

Uw aanbrengers, de personen en kantoren die u klanten brengen (boekhouders, adviseurs, bemiddelaars), de actieve eerst, elk met zijn huidige link en het aantal bedrijven dat via die link kwam. Ze zijn van u, geen partners van Advanta. Dezelfde lijst als de pagina Klanten van uw portaal.

NaamWaarBeschrijving
langqueryDe taal van de pagina die elke link opent: pt, es, en, fr, de, it of nl, toegevoegd aan zijn url.
Scope
requests:read, clients:write of decisions:write
Antwoord
200{ funder, count, prescribers[] }
Fouten
422lang_invalid

Een sandboxsleutel leest de aanbrengers van de demonstratiefinancier, die alle demonstraties delen.

curl
curl -s "$BASE/v1/prescribers?lang=es" \
  -H "Authorization: Bearer $ADVANTA_KEY"

POST/v1/prescribers

Een aanbrenger toevoegen. Zijn eigen open link wordt samen met hem uitgegeven, in prescriber.link.url. Zijn naam en e-mail blijven buiten de bewijsketen van Advanta: alleen hun hashes staan erin.

NaamWaarBeschrijving
name verplichtbody2 tot 120 tekens, uniek onder uw actieve aanbrengers.
emailbodyOptioneel. Een sandboxfinancier legt alleen gereserveerde adressen vast (eindigend op .example, .invalid, .test of .demo).
notesbodyOptioneel, tot 1.000 tekens.
langbodyDe taal van de pagina die zijn link opent, toegevoegd aan zijn url.
Scope
clients:write of decisions:write
Antwoord
201{ prescriber }
Fouten
409prescriber_exists
422body_required, name_required, name_invalid, email_invalid, email_not_reserved, notes_too_long, lang_invalid

Met een sandboxsleutel verandert dit gedeelde demonstratiegegevens, dus de sleutel heeft decisions:write nodig.

curl
curl -s -X POST "$BASE/v1/prescribers" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Gestoría Norte","email":"ana@gestoria-norte.example","notes":"Accountant in Bilbao","lang":"es"}'
Antwoord, ingekort · 201
{
  "prescriber": {
    "id": "5f1c2a8e-3b7d-4e0a-9c61-2d4b8e7f9a10",
    "name": "Gestoría Norte",
    "email": "ana@gestoria-norte.example",
    "notes": "Accountant in Bilbao",
    "active": true,
    "created_at": "2026-09-10T09:00:00Z",
    "disabled_at": null,
    "link": {
      "id": "1e2f3a4b-5c6d-4e7f-8a9b-0c1d2e3f4a5b",
      "prescriber_id": "5f1c2a8e-3b7d-4e0a-9c61-2d4b8e7f9a10",
      "state": "active",
      "expires_at": null,
      "arrivals": 0,
      "url": "https://app.advanta.capital/join?link=…&lang=es"
    }
  }
}

POST/v1/prescribers/{id}/disable

Een aanbrenger uitschakelen. Zijn link werkt meteen niet meer; de bedrijven die hij bracht, blijven aan hem toegeschreven. Een al uitgeschakelde aanbrenger uitschakelen verandert niets (changed is false). Vastgelegd in de bewijsketen van Advanta.

NaamWaarBeschrijving
id verplichtpathHet id van de aanbrenger.
reasonbodyDe reden, tot 200 tekens.
Scope
clients:write of decisions:write
Antwoord
200{ prescriber, changed }
Fouten
404not_found
405method_not_allowed
422body_invalid, reason_invalid
curl
curl -s -X POST "$BASE/v1/prescribers/$PRESCRIBER_ID/disable" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"reason":"Agreement ended"}'

GET/v1/prescribers/report

Wat elke aanbrenger u heeft gebracht: één groep per aanbrenger, dan uw eigen link (own_link), uw uitnodigingen op naam (named) en uw onboardinglinks (api). Per groep en per bedrijf: wanneer het kwam, wanneer zijn account werd geopend (joined), wanneer de verificatie van het bedrijf werd goedgekeurd (onboarded), de aanvragen die naar u zijn doorgestuurd, het aangevraagde en het gefinancierde bedrag. Dezelfde cijfers als in uw portaal.

Scope
requests:read, clients:write of decisions:write
Antwoord
200{ funder, plane, generated_at, currency, totals, groups[] }
Fouten
405method_not_allowed

Een bedrijf telt één keer, voor wie het als eerste bij u bracht. Het gefinancierde bedrag is het voorschot (anders het totaal) van gefinancierde of afgewikkelde aanvragen, in euro; totals telt alle groepen op. Alleen uw eigen gegevens en alleen bedrijven op uw gegevensvlak: een sandboxsleutel ziet niet wat andere sandboxsleutels via de API hebben gedaan.

curl
curl -s "$BASE/v1/prescribers/report" \
  -H "Authorization: Bearer $ADVANTA_KEY"
Antwoord, ingekort · 200
{
  "funder": {
    "bank_id": "6d164c92-02cc-4f9a-ae8d-3f7f5ef043d3",
    "name": "Compartment Demo (LU)"
  },
  "plane": "sandbox",
  "generated_at": "2026-09-26T10:00:00Z",
  "currency": "EUR",
  "totals": { "arrived": 1, "joined": 1, "onboarded": 1, "requests": 1, "amount_requested": 18450.00, "amount_funded": 16605.00 },
  "groups": [
    {
      "kind": "prescriber",
      "prescriber_id": "5f1c2a8e-3b7d-4e0a-9c61-2d4b8e7f9a10",
      "name": "Gestoría Norte",
      "active": true,
      "since": "2026-09-10T09:00:00Z",
      "arrived": 1,
      "joined": 1,
      "onboarded": 1,
      "requests": 1,
      "amount_requested": 18450.00,
      "amount_funded": 16605.00,
      "companies": [
        {
          "company_name": "Example Seller, S.L.",
          "company_tax_id": "B00000000",
          "country": "ES",
          "arrived_at": "2026-09-15T11:02:00Z",
          "joined_at": "2026-09-15T11:20:00Z",
          "onboarded_at": "2026-09-16T09:15:00Z",
          "requests": 1,
          "amount_requested": 18450.00,
          "amount_funded": 16605.00
        }
      ]
    }
  ]
}

GET/v1/client-invitations

Al uw uitnodigingen, de nieuwste eerst: via een link, op naam in het portaal of met een onboardinglink. Elke uitnodiging vermeldt hoe het bedrijf kwam (via: link, named of api), de aanbrenger die het bracht, als die er is, haar state (pending, accepted, revoked of expired), het bedrijf, de contactpersoon en de data.

NaamWaarBeschrijving
limitquery1 tot 500, standaard 200.
Scope
requests:read, clients:write of decisions:write
Antwoord
200{ funder, count, invitations[] }
Fouten
405method_not_allowed

Alleen uw eigen gegevensvlak. Een sandboxsleutel ziet de uitnodigingen van andere sandboxsleutels niet.

curl
curl -s "$BASE/v1/client-invitations?limit=50" \
  -H "Authorization: Bearer $ADVANTA_KEY"

Kansen van de dag

Elke ochtend de facturen van uw eigen klanten die in de nacht aan uw regels gingen voldoen, en wat er veranderde in de facturen die u al zag. De webhook opportunities.daily meldt wanneer er iets te lezen is.

GET/v1/opportunities

Het overzicht van een dag, van uw eigen klanten (de bedrijven waarvan u de vaste financier bent) die u hun facturen laten zien. Elke ochtend rond 06:30 uur Madrid-tijd, na de nachtelijke prekwalificatie, zet Advanta de facturen op een rij die sinds het vorige overzicht aan uw regels voldoen (kind new), en wat er veranderde in de facturen die u al zag: paid, disputed (de klant registreerde dat zijn debiteur de factuur betwist) of no_longer_eligible.

NaamWaarBeschrijving
datequeryDe dag van het overzicht, YYYY-MM-DD (Madrid-tijd). Afwezig: het recentste. Een dag zonder overzicht geeft date null en geen regels.
Scope
requests:read
Antwoord
200{ funder, date, digest, lines[] }
Fouten
404not_found
405method_not_allowed
422invalid_date

Een regel bevat de factuur, de debiteur met zijn fiscale nummer, het bedrag dat nog openstaat, de vervaldatum, en de klant met zijn sector (NACE-sectie), klasse en grootteklasse; eerst de nieuwe regels, dan de wijzigingen. no_longer_eligible heeft een reason: requested (de klant vroeg om financiering ervan), cancelled, removed (niet meer in de boeken van de klant), left_programme, not_shared (de klant deelt niet meer) of rules (voldoet niet meer aan uw regels).

digest bevat de totalen: hoeveel klanten delen en hoeveel nog niet, wat vandaag in aanmerking komt, wat nieuw is en wat veranderde. stale is true als de nachtelijke run niet afliep: die ochtend werd niets vergeleken. Een overzicht is een lijst die de database berekende, geen aanbod: een aanvraag wordt opnieuw gecontroleerd wanneer ze wordt gedaan, en u beslist zoals altijd. De webhook opportunities.daily meldt wanneer er een overzicht met inhoud klaarstaat.

curl
curl -s "$BASE/v1/opportunities?date=2026-10-07" \
  -H "Authorization: Bearer $ADVANTA_KEY"
Antwoord, ingekort · 200
{
  "funder": { "bank_id": "6d164c92-02cc-4f9a-ae8d-3f7f5ef043d3", "name": "Example Funder" },
  "date": "2026-10-07",
  "digest": {
    "digest_id": "9b2d4c1e-0f3a-4e5b-8c6d-7a8b9c0d1e2f",
    "date": "2026-10-07",
    "stale": false,
    "snapshot_at": "2026-10-07T03:30:12Z",
    "clients": { "sharing": 9, "not_sharing": 1 },
    "eligible": { "count": 42, "total": 318450.00 },
    "new": { "count": 6, "total": 41200.00 },
    "changes": { "paid": 2, "disputed": 0, "no_longer_eligible": 1 },
    "currency": "EUR",
    "lines": "/v1/opportunities?date=2026-10-07"
  },
  "lines": [
    {
      "kind": "new",
      "reason": null,
      "invoice_id": "0c5e7f3a-2b4d-4c6e-9f81-3a5b7c9d1e2f",
      "number": "FV 2026/1184",
      "debtor": { "name": "Example Buyer, S.A.", "tax_id": "A00000000", "country": "ES" },
      "amount": 12400.00,
      "currency": "EUR",
      "due_date": "2026-12-15",
      "client": { "seller_id": "2f6d8a4e-1b3c-4d5e-9f70-8a1b2c3d4e5f", "name": "Example Seller, S.L.", "tax_id": "B00000000", "sector": "C", "grade": "B", "size_band": "small" }
    }
  ]
}

Webhook-endpoints

Registreer de endpoints die de webhooks ontvangen, roteer hun secrets, stuur een test en lees het afleverlogboek.

GET/v1/webhooks

Uw actieve endpoints, zonder hun secrets, en de eventtypes waarop u zich kunt abonneren. Een sandboxsleutel ziet alleen de endpoints die hij zelf heeft aangemaakt.

Scope
webhooks:write, decisions:write of requests:read
Antwoord
200{ count, webhooks[], event_types[] }
Fouten
Alleen de algemene (401, 403, 500).
curl
curl -s "$BASE/v1/webhooks" \
  -H "Authorization: Bearer $ADVANTA_KEY"

POST/v1/webhooks

Een endpoint registreren. Het antwoord bevat het ondertekeningssecret, dat niet opnieuw wordt getoond.

NaamWaarBeschrijving
url verplichtbodyhttps op een openbare hostnaam, poort 443, zonder gebruikersnaam of wachtwoord; hoogstens 2.048 tekens. Privé-, loopback- en link-localadressen worden geweigerd, en redirects worden nooit gevolgd.
eventsbodyEen lijst van eventtypes, of ["*"] voor allemaal (standaard).
descriptionbodyTot 200 tekens.
Scope
webhooks:write of decisions:write
Antwoord
201{ webhook, secret, signature }
Fouten
409too_many_endpoints
422body_required, url_required, url_invalid, url_too_long, url_must_be_https, url_has_credentials, url_port_not_allowed, url_host_not_allowed, url_not_allowed, events_invalid, unknown_event_type, invalid_description

Hoogstens 10 actieve endpoints.

curl
curl -s -X POST "$BASE/v1/webhooks" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://hooks.example.com/advanta","events":["request.routed","notice.acknowledged","notice.disputed","request.funded","settlement.recorded"],"description":"Credit desk"}'
JavaScript
const res = await fetch(`${BASE}/v1/webhooks`, {
  method: 'POST',
  headers: { ...headers, 'Content-Type': 'application/json' },
  body: JSON.stringify({
    url: 'https://hooks.example.com/advanta',
    events: ['request.routed', 'notice.acknowledged', 'notice.disputed', 'request.funded', 'settlement.recorded'],
    description: 'Credit desk',
  }),
});
const body = await res.json();
if (res.status !== 201) throw new Error(`${res.status} ${body.error.code}: ${body.error.message}`);

// The secret is shown once: store it now, in your own secret store.
await secretStore.put(`advanta-webhook-${body.webhook.id}`, body.secret);
Antwoord, ingekort · 201
{
  "webhook": {
    "id": "e3b1c2d4-5f6a-4b7c-8d9e-0f1a2b3c4d5e",
    "url": "https://hooks.example.com/advanta",
    "description": "Credit desk",
    "events": ["notice.acknowledged", "notice.disputed", "request.funded", "request.routed", "settlement.recorded"],
    "active": true,
    "secret_prefix": "whsec_1a2b3c",
    "created_via": "api"
  },
  "secret": "whsec_…",
  "signature": { "header": "Advanta-Signature", "scheme": "HMAC-SHA256 of \"<t>.<raw body>\"", "tolerance_seconds": 300 }
}

DELETE/v1/webhooks/{id}

Een endpoint stoppen. Nog openstaande afleveringen worden geannuleerd en de secrets verwijderd.

NaamWaarBeschrijving
id verplichtpathHet id van het endpoint.
Scope
webhooks:write of decisions:write
Antwoord
200{ id, active: false, deleted: true, cancelled_deliveries }
Fouten
404not_found
curl
curl -s -X DELETE "$BASE/v1/webhooks/$WEBHOOK_ID" \
  -H "Authorization: Bearer $ADVANTA_KEY"

POST/v1/webhooks/{id}/rotate-secret

Een nieuw ondertekeningssecret, één keer getoond. Het vorige secret blijft ondertekenen, als tweede v1 in de header, gedurende keep_previous_hours, zodat u kunt overschakelen zonder events te verliezen.

NaamWaarBeschrijving
id verplichtpathHet id van het endpoint.
keep_previous_hoursbody0 tot 72, standaard 24.
Scope
webhooks:write of decisions:write
Antwoord
200{ webhook, secret, previous_secret_valid_until }
Fouten
404not_found
422invalid_keep_previous_hours
curl
curl -s -X POST "$BASE/v1/webhooks/$WEBHOOK_ID/rotate-secret" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"keep_previous_hours":24}'

POST/v1/webhooks/{id}/test

Een webhook.test-event voor dit endpoint in de wachtrij zetten. De volgende run van de dispatcher levert het af, binnen ongeveer een minuut.

NaamWaarBeschrijving
id verplichtpathHet id van het endpoint.
Scope
webhooks:write of decisions:write
Antwoord
202{ endpoint_id, event_id, delivery_id, status: "pending" }
Fouten
404not_found
curl
curl -s -X POST "$BASE/v1/webhooks/$WEBHOOK_ID/test" \
  -H "Authorization: Bearer $ADVANTA_KEY"

GET/v1/webhooks/{id}/deliveries

Het afleverlogboek van een endpoint, nieuwste eerst: status (pending, delivered, failed of cancelled), pogingen, antwoordcode, laatste fout, volgende poging en de SHA-256 van de exact verstuurde body.

NaamWaarBeschrijving
id verplichtpathHet id van het endpoint.
limitquery1 tot 200, standaard 50.
Scope
webhooks:write, decisions:write of requests:read
Antwoord
200{ count, deliveries[] }
Fouten
404not_found
curl
curl -s "$BASE/v1/webhooks/$WEBHOOK_ID/deliveries?limit=20" \
  -H "Authorization: Bearer $ADVANTA_KEY"

Onboardinglinks

Geef een leverancier vanuit uw eigen product een onboardinglink van Advanta voor eenmalig gebruik; de leverancier komt met een ondertekende status bij u terug wanneer hij klaar is.

De export van uw gegevens

Neem alles mee wat u bij Advanta kunt zien, wanneer u wilt, zonder te vragen: uw exitrecht (DORA art. 28, lid 8, en art. 30, lid 3, onder f). Een ZIP met per entiteit een CSV- en een JSON Lines-bestand, schema.json, manifest.json met de SHA-256 van elk bestand, een README in uw taal en verify.py.

POST/v1/exports

Start een export van alles wat uw financier kan zien: aanvragen en hun geschiedenis, aanbiedingen, facturen met hun controle, verkopers (bedrijfsgegevens, de KYC-samenvatting die u mag zien, de verificatie van de vertegenwoordiger), debiteuren, kennisgevingen met de antwoorden van de debiteuren en de gegevens van de certificaten, de vermeldingen in de bewijsketen over uw transacties met de hashes en dagroots om ze te controleren, ontvangsten en afschriften, weigeringen door de controles, uw regels en limieten, uw team, webhook-endpoints (nooit een geheim), API-sleutels (nooit een sleutel), uw audittrail en uw documenten. Hij wordt op de achtergrond aangemaakt, meestal in minder dan een minuut; export.ready meldt wanneer.

NaamWaarBeschrijving
langbodyDe taal van de README: pt, es, en, fr, de, it of nl (standaard en).
Scope
exports:write of decisions:write
Antwoord
202{ funder, export }
Fouten
403export_live_key_required
409export_in_progress
422body_invalid, lang_invalid
429export_rate_limited

Alleen een productiesleutel: een sandboxsleutel krijgt 403 export_live_key_required (de demonstratiefinancier wordt gedeeld). Eén export tegelijk, hoogstens 10 in 24 uur. Dezelfde export staat op de pagina Export van het portaal, bij de instellingen.

curl
curl -s -X POST "$BASE/v1/exports" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lang":"es"}'
Antwoord · 202
{
  "funder": { "bank_id": "6d164c92-02cc-4f9a-ae8d-3f7f5ef043d3", "name": "Example Funder" },
  "export": {
    "id": "5e1f0a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
    "subject": "funder",
    "status": "queued",
    "plane": "live",
    "requested_via": "api",
    "actor_role": "api:treasury",
    "lang": "es",
    "created_at": "2026-09-27T09:00:02.114000Z",
    "download_available": false,
    "manifest_sha256": null,
    "progress": { "entities_done": 0, "entities_total": 47, "rows": 0, "volumes_written": 0, "phase": "data" }
  }
}

GET/v1/exports

Uw exports, uit het portaal en de API, de nieuwste eerst, met status, grootte en manifest_sha256.

NaamWaarBeschrijving
limitquery1 tot 200, standaard 50.
Scope
exports:write of decisions:write
Antwoord
200{ funder, count, exports[] }
Fouten
403export_live_key_required
405method_not_allowed
curl
curl -s "$BASE/v1/exports?limit=20" \
  -H "Authorization: Bearer $ADVANTA_KEY"

GET/v1/exports/{id}

Eén export. Terwijl hij wordt aangemaakt: status queued of running, met progress. Zodra ready, en 24 uur lang: files, elk deel met een link die hoogstens een uur geldig is (nooit na die 24 uur). Vraag opnieuw voor nieuwe links; elke aanroep die links teruggeeft wordt vastgelegd. Na 24 uur worden de bestanden verwijderd en blijft het record.

NaamWaarBeschrijving
id verplichtpathHet export-id, uit POST /v1/exports of GET /v1/exports.
Scope
exports:write of decisions:write
Antwoord
200{ funder, export, files[] }
Fouten
403export_live_key_required
404not_found
405method_not_allowed

manifest_sha256 is de SHA-256 van manifest.json geschreven zonder dat veld, met gesorteerde sleutels en zonder spaties. Advanta legde dezelfde waarde vast in de bewijsketen (vermelding export.ready); verify.py berekent hem opnieuw en controleert elk bestand en de bewijsvermeldingen.

curl
curl -s "$BASE/v1/exports/5e1f0a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b" \
  -H "Authorization: Bearer $ADVANTA_KEY"
Antwoord, ingekort · 200
{
  "funder": { "bank_id": "6d164c92-02cc-4f9a-ae8d-3f7f5ef043d3", "name": "Example Funder" },
  "export": {
    "id": "5e1f0a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b",
    "status": "ready",
    "completed_at": "2026-09-27T09:00:41.502000Z",
    "expires_at": "2026-09-28T09:00:41.502000Z",
    "download_available": true,
    "manifest_sha256": "1c822b8797ba58903eca0689cc0c93138e7d396e01a038d133b5c1f3aeec7497",
    "size_bytes": 482113,
    "file_count": 101,
    "documents_mode": "files",
    "row_counts": { "requests": 212, "invoices": 1480, "evidence_entries": 903 }
  },
  "files": [
    {
      "name": "advanta-export-2026-09-27-5e1f0a2b-v001.zip",
      "bytes": 482113,
      "sha256": "9b0e5c1d2a7f4e6b8c3d1a0f9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b3a291807",
      "url": "https://…/object/sign/data-exports/…",
      "url_expires_at": "2026-09-27T10:00:41.502000Z"
    }
  ]
}
Downloaden en controleren · shell
# Every volume into one folder, then the checker the export carries
curl -s "$BASE/v1/exports/$EXPORT_ID" -H "Authorization: Bearer $ADVANTA_KEY" \
  | jq -r '.files[].url' | while read -r u; do curl -s -o "v$((++n)).zip" "$u"; done
for z in v*.zip; do unzip -q -o "$z" -d export; done
python3 export/advanta-export-*/verify.py   # files, manifest digest and evidence chain

GET/v1/exports/{id}/documents

Als de documenten te groot waren om op te nemen (documents_mode links): elk document van de export met een link die 15 minuten geldig is, per pagina. De lijst wordt berekend wanneer u vraagt: een document dat u niet meer mag lezen staat er niet in.

NaamWaarBeschrijving
id verplichtpathHet export-id.
afterqueryDe next_after van de vorige pagina.
limitquery1 tot 200, standaard 100.
Scope
exports:write of decisions:write
Antwoord
200{ funder, export_id, documents[], next_after }
Fouten
403export_live_key_required
404not_found
409export_not_ready, export_failed
410export_expired
curl
curl -s "$BASE/v1/exports/5e1f0a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b/documents?limit=100" \
  -H "Authorization: Bearer $ADVANTA_KEY"

Webhooks

Registreer een HTTPS-endpoint en Advanta stuurt het een ondertekende POST wanneer er iets gebeurt dat u aangaat: met een aanvraag die naar u is doorgestuurd of haar verkoper, of met een onboardinglink die u hebt aangemaakt. Elk endpoint abonneert zich op de eventtypes die het nodig heeft. Elke aflevering is ondertekend en wordt bij een mislukking 24 uur lang opnieuw geprobeerd.

Events

EventWanneerdata
request.routedHet operationele team van Advanta heeft een aanvraag naar u doorgestuurd. U kunt ze nu lezen en beslissen.request_id, request_ref, type, status, total_amount, currency, routed_at
request.unroutedEen aanvraag die naar u was doorgestuurd, is elders ondergebracht of teruggetrokken. U kunt er niet meer op handelen.request_id, request_ref, unrouted_at
offer.acceptedUw aanbod is aanvaard (request_status is approved zodra de verkoper heeft aanvaard). U kunt financieren.offer_id, request_id, request_ref, request_status, rate, advance_pct, days, accepted_at
notice.acknowledgedEen debiteur heeft de cessiemelding bevestigd. Eén event per debiteur; channel is online of offline.notice_id, request_id, request_ref, debtor_name, debtor_tax_id, invoice_count, total_amount, channel, decided_at
notice.disputedEen debiteur heeft de cessiemelding afgewezen. Eén event per debiteur.De velden van notice.acknowledged, plus reason: de woorden van de debiteur, hoogstens 500 tekens.
request.fundedEen aanvraag die naar u is doorgestuurd, is gefinancierd.De aanvraagvelden van request.routed, plus funded_at en advance_amount.
settlement.recordedEr is ontvangen geld geboekt op een gefinancierde aanvraag, gedeeltelijk of definitief: de betaling die de aanvraag afsluit, heeft final true.settlement_id, request_id, request_ref, amount, received_at, reference, received_total, request_total, outstanding, final, request_status
seller.documents_expiringEen gedateerd document (bijvoorbeeld een verklaring van de belastingdienst of de sociale zekerheid) van een verkoper met een open of gefinancierde aanvraag die naar u is doorgestuurd, verloopt over 30 dagen, over 7 dagen of vandaag. Dagelijks gecontroleerd; threshold_days is 30, 7 of 0.seller_id, company_name, company_tax_id, document_id, document_type, valid_until, days_left, threshold_days, request_ids
dispute.openedEen debiteur heeft facturen betwist van een aanvraag die naar u is doorgestuurd, na de goedkeuring of de financiering. reason is goods_not_received, defective, amount_incorrect, already_paid, not_our_invoice of other; channel is cession_page, letter of email.dispute_id, request_id, request_ref, notice_id, debtor_name, debtor_tax_id, invoice_numbers, reason, description, amount_disputed, channel, reported_by, received_on, request_status, status
dispute.resolvedHet operationele team van Advanta heeft een geschil afgesloten; status is resolved_for_debtor, resolved_for_seller of withdrawn.De velden van dispute.opened, met de bijbehorende status, plus resolved_at en resolution_note.
onboarding.completedEen leverancier die u met een onboardinglink hebt uitgenodigd, heeft de verificatie van zijn bedrijf ingediend. status is completed; metadata is van u, zoals u het stuurde. Voor een link die met een sandboxsleutel is aangemaakt, ontvangen alleen de endpoints van die sleutel het event.onboarding_link_id, status, company_name, company_tax_id, country, seller_id, account_created_at, completed_at, verification_status, metadata
client.joinedEen bedrijf dat u hebt uitgenodigd (op naam, via uw open link, de link van een aanbrenger of de API) heeft de uitnodiging aanvaard en is nu alleen van u: zijn aanvragen komen alleen bij u. origin zegt hoe het kwam (named, open_link, prescriber of api), met de aanbrenger als die er is.seller_id, invitation_id, company_name, company_tax_id, country, origin, channel, link_id, prescriber_id, prescriber_name, arrived_at, joined_at, mode
export.readyEen export die u aanvroeg (portaal of API) is klaar: download hem binnen 24 uur met GET /v1/exports/{id}. Hij bevat zijn manifest_sha256, nooit een link.export_id, status, requested_via, manifest_sha256, size_bytes, file_count, documents_mode, volumes, completed_at, expires_at
request.announcedEen stille aanvraag die naar u is doorgestuurd, is openbaar gemaakt: door u, door Advanta-operations of door een trigger die u aanzette (trigger is manual, overdue, dispute of kyc_lapsed). De voorbereide meldingen worden verstuurd; notices noemt elke melding met de SHA-256 van haar document.request_id, request_ref, trigger, reason, status, notices, announced_at
recourse.openedEen gefinancierde aanvraag van u is recourse_days na de vervaldatum van een factuur niet afgewikkeld: een regresvordering op de verkoper (kind recourse) of een wanbetaling van de debiteur (kind debtor_default).claim_id, request_id, request_ref, kind, claim_amount, funded_amount, fee_amount, collected_before, first_due_date, days_after_due, invoice_ids, pay_reference
recourse.settledEen vordering is afgewikkeld: door de betalingen die u boekte sinds ze opende (via statement of manual; de aanvraag sluit als afgewikkeld door regres), of omdat de aanvraag op de gewone manier werd afgewikkeld (via request_settled, zonder paid).claim_id, request_id, request_ref, kind, claim_amount, paid, via, request_closed
payment.reached_sellerOp een rekening die de verkoper met u deelt, kwam een betaling binnen van een debiteur van een aanvraag die u onder stille voorwaarden financierde: de referentie bevat het nummer van een gefinancierde factuur (match_rule invoice_reference), of betaler en bedrag komen overeen (payer_and_amount).alert_id, request_id, invoice_ids, payer_name, payer_iban, amount, currency, booking_date, match_rule, confidence
opportunities.dailyHet ochtendoverzicht bevat iets: facturen van uw eigen klanten die sinds het vorige overzicht in aanmerking kwamen, of een wijziging in de facturen die u al zag. Alleen een samenvatting, aantallen en totalen, nooit een factuur, een debiteur of een klant: lees de regels met GET /v1/opportunities?date= (lines). Hoogstens één per dag; geen op een dag zonder iets nieuws en zonder wijziging.digest_id, date, stale, snapshot_at, clients (sharing, not_sharing), eligible (count, total), new (count, total), changes (paid, disputed, no_longer_eligible), currency, lines
debtor.watch_blockedEen officieel blad (het BORME voor Spaanse vennootschappen, Citius voor Portugese) publiceerde een akte die een debiteur van een aanvraag die u financierde, blokkeert voor nieuwe financiering: faillissement uitgesproken of lopend, vereffening, faillissement afgesloten wegens gebrek aan baten, ontbinding, opheffing, of het registerblad gesloten door de belastingdienst of na een faillissement. Zolang dat geldt, gaan er geen nieuw aanbod en geen nieuwe financiering naar de facturen van deze debiteur. Eén event per aanvraag en per overgang naar geblokkeerd. Het is wat het blad publiceerde, voor uw eigen beoordeling, geen juridische conclusie; alleen bedrijven in Spanje en Portugal worden gevolgd.request_id, request_ref, debtor (country, tax_id, name), status, note, events (kind, published_on, source, url), detected_at
pre_offer.acceptedEen klant heeft financiering aangevraagd voor de facturen van een voorlopig aanbod dat u hem stuurde vanuit uw ochtendkansen: zijn aanvraag, gedaan met alle gebruikelijke controles, draagt het voorlopige aanbod en komt zoals altijd bij u (request.routed), en uw kredietregel bereidt uw aanbod voor vanuit uw prijstabel. terms is wat uw tabel gaf bij het versturen, indicatief: de prijs is de uwe, Advanta noemt er geen. Eén keer per voorlopig aanbod.pre_offer_id, request_id, request_ref, seller_id, company_name, company_tax_id, invoice_ids, invoice_count, total_amount, currency, terms, sent_at, valid_until, accepted_at
webhook.testHet testevent dat u hebt aangevraagd met POST /v1/webhooks/{id}/test.

De aflevering

Elke aflevering is een POST met een JSON-body, byte voor byte verstuurd zoals hij is opgeslagen (de SHA-256 staat in het afleverlogboek), met drie eigen headers:

  • Advanta-Signature: t=<unix seconds>,v1=<hex>, zie Handtekeningen controleren.
  • Advanta-Event-Id: het id van het event, ook id in de body.
  • Advanta-Event-Type: het eventtype, ook type in de body.
Headers
POST /advanta HTTP/1.1
Host: hooks.example.com
Content-Type: application/json
Advanta-Signature: t=1790179835,v1=5f2b…
Advanta-Event-Id: 9b2f7f64-5a1c-4a57-9d8a-0f2e3c4b5a69
Advanta-Event-Type: request.funded
Body
{
  "id": "9b2f7f64-5a1c-4a57-9d8a-0f2e3c4b5a69",
  "object": "event",
  "type": "request.funded",
  "api_version": "2026-09-23",
  "created": 1790179835,
  "environment": "sandbox",
  "data": {
    "request_id": "4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87",
    "request_ref": "FR-2026-0042",
    "type": "factoring",
    "status": "funded",
    "total_amount": 18450.00,
    "currency": "EUR",
    "funded_at": "2026-09-23T18:10:35Z",
    "advance_amount": 16605.00
  }
}
VeldBetekenis
idHet id van het event, gelijk aan Advanta-Event-Id.
objectAltijd event.
typeEen van de eventtypes hierboven.
api_versionDe API-revisie waarin het event is geschreven.
createdWanneer het event is aangemaakt, in Unix-seconden.
environmentlive, sandbox of unclassified, zoals in GET /v1/me.
dataDe velden van het event, hierboven opgesomd.

Aflevering en nieuwe pogingen

  • Antwoord binnen 10 seconden met een willekeurige 2xx en het event is afgeleverd. Elk ander antwoord, geen antwoord binnen 10 seconden, of een redirect is een mislukking; redirects worden nooit gevolgd.
  • Een mislukte aflevering wordt opnieuw geprobeerd na 1, 2, 4, 8 … minuten, telkens verdubbeld, hoogstens 6 uur uit elkaar, met een laatste poging 24 uur na het event. Daarna wordt ze als failed gemarkeerd en blijft ze in het afleverlogboek.
  • Aflevering gebeurt minstens één keer. Bewaar de Advanta-Event-Id-waarden die u al hebt verwerkt en negeer een herhaling.
  • GET /v1/webhooks/{id}/deliveries toont per aflevering de status, de pogingen, de antwoordcode, de laatste fout en de volgende poging. POST /v1/webhooks/{id}/test stuurt een webhook.test-event wanneer u uw endpoint wilt controleren.

Endpoints en secrets

  • De URL van een endpoint is https op een openbare hostnaam, op poort 443, zonder gebruikersnaam of wachtwoord erin. Privé-, loopback- en link-localadressen worden geweigerd.
  • Hoogstens 10 actieve endpoints. Elk abonneert zich op een lijst van eventtypes, of op ["*"] voor allemaal (standaard).
  • Het ondertekeningssecret (whsec_ gevolgd door 64 hexadecimale tekens) wordt één keer teruggegeven: bij het aanmaken van het endpoint, en opnieuw bij elke rotatie. Bewaar het zoals u een wachtwoord bewaart.
  • Roteer het met POST /v1/webhooks/{id}/rotate-secret. Het vorige secret blijft ondertekenen, als tweede v1 in de header, gedurende keep_previous_hours (0 tot 72, standaard 24). Zet het nieuwe secret binnen die periode in gebruik en er gaat geen event verloren.

Handtekeningen controleren

Elke aflevering bevat Advanta-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256>. Controleer die voordat u de body vertrouwt:

  1. Lees de ruwe request-body, precies zoals ontvangen, vóór elke JSON-verwerking.
  2. Bereken HMAC-SHA256 over <t>.<raw body>, met het secret van het endpoint als sleutel (de volledige tekenreeks whsec_…, als UTF-8), en codeer het hexadecimaal.
  3. Accepteer de aflevering als een v1 in de header overeenkomt, vergeleken in constante tijd (na een rotatie zijn er twee), en t hoogstens 300 seconden van uw klok afwijkt. Weiger haar anders.

Een geweigerde aflevering antwoordt niet met 2xx, dus Advanta probeert het opnieuw, zoals bij elke andere mislukking.

Node.js
import crypto from 'node:crypto';
import express from 'express';

const TOLERANCE_SECONDS = 300;

// header:  the Advanta-Signature value
// rawBody: the request body as a Buffer, exactly as received (before any JSON parsing)
// secret:  your endpoint secret, the whole "whsec_…" string
export function verifyAdvantaSignature(header, rawBody, secret, nowSeconds = Math.floor(Date.now() / 1000)) {
  let t = null;
  const signatures = [];
  for (const part of String(header ?? '').split(',')) {
    const i = part.indexOf('=');
    if (i <= 0) continue;
    const key = part.slice(0, i).trim();
    const value = part.slice(i + 1).trim();
    if (key === 't' && /^[0-9]{1,12}$/.test(value)) t = Number(value);
    else if (key === 'v1' && /^[0-9a-f]{64}$/.test(value)) signatures.push(value);
  }
  if (t === null || signatures.length === 0) return false;
  if (Math.abs(nowSeconds - t) > TOLERANCE_SECONDS) return false; // replay window

  const expected = crypto.createHmac('sha256', secret).update(`${t}.`).update(rawBody).digest();
  // After a rotation the header carries two v1 values: accept either.
  return signatures.some((sig) => crypto.timingSafeEqual(Buffer.from(sig, 'hex'), expected));
}

// Express: keep the body raw on this route.
const app = express();
app.post('/advanta', express.raw({ type: '*/*' }), (req, res) => {
  if (!verifyAdvantaSignature(req.get('Advanta-Signature'), req.body, process.env.ADVANTA_WEBHOOK_SECRET)) {
    return res.status(400).end();
  }
  const event = JSON.parse(req.body.toString('utf8'));
  // Delivery is at least once: skip an event.id you already processed, then queue the work.
  res.status(200).end();
});
Python
import hashlib
import hmac
import json
import os
import re
import time

from flask import Flask, request

TOLERANCE_SECONDS = 300


def verify_advanta_signature(header, raw_body, secret, now=None):
    """header: the Advanta-Signature value; raw_body: the request body as bytes, exactly
    as received; secret: your endpoint secret, the whole "whsec_..." string."""
    t = None
    signatures = []
    for part in (header or "").split(","):
        key, sep, value = part.partition("=")
        key, value = key.strip(), value.strip()
        if not sep:
            continue
        if key == "t" and re.fullmatch(r"[0-9]{1,12}", value):
            t = int(value)
        elif key == "v1" and re.fullmatch(r"[0-9a-f]{64}", value):
            signatures.append(value)
    if t is None or not signatures:
        return False
    now = int(time.time()) if now is None else now
    if abs(now - t) > TOLERANCE_SECONDS:  # replay window
        return False
    expected = hmac.new(secret.encode("utf-8"), f"{t}.".encode("ascii") + raw_body, hashlib.sha256).hexdigest()
    # After a rotation the header carries two v1 values: accept either.
    return any(hmac.compare_digest(sig, expected) for sig in signatures)


# Flask
app = Flask(__name__)


@app.post("/advanta")
def advanta_webhook():
    raw = request.get_data()  # the raw bytes; do not read request.json before verifying
    if not verify_advanta_signature(request.headers.get("Advanta-Signature"), raw, os.environ["ADVANTA_WEBHOOK_SECRET"]):
        return "", 400
    event = json.loads(raw)
    # Delivery is at least once: skip an event["id"] you already processed, then queue the work.
    return "", 200

Fouten

Elke fout is JSON, met een stabiele code en een message voor mensen. Beslis op de code, nooit op het bericht.

JSON
{
  "error": {
    "code": "not_routed_to_you",
    "message": "This request is not assigned to your institution. Advanta operations routes requests."
  }
}

Statuscodes

StatusCodesBetekenis
400reason_requiredEen afwijzing zonder reason of notes.
401unauthorized, key_expiredunauthorized: de sleutel ontbreekt, is misvormd, onbekend, ingetrokken of inactief. key_expired: de sleutel is verlopen.
403forbidden, not_your_request, export_live_key_required, not_routed_to_you, not_your_claimforbidden: de sleutel mist de scope, of de financier is niet actief. not_your_request: een ontvangst geboekt door een financier die niet de financier van de aanvraag is. export_live_key_required: een sandboxsleutel exporteert niet. not_routed_to_you: een aanvraag openbaar maken die niet naar u is doorgestuurd. not_your_claim: een regresvordering sluiten die niet bij een aanvraag van u hoort.
404not_foundGeen voor deze sleutel zichtbare resource, of een onbekende route.
405method_not_allowedDe methode wordt op dit pad niet ondersteund.
409not_routed_to_you, invalid_state, credit_limit, funding_gate_failed, funding_amount_mismatch, debtor_not_eligible_for_funder, documents_missing_for_funder, level_lower, notice_already_decided, not_factoring, request_not_in_flight, statement_already_imported, too_many_endpoints, prescriber_exists, link_exists, company_already_registered, email_has_account, invitation_pending_exists, country_not_served, export_in_progress, export_not_ready, export_failedEen schrijfactie die de aanvraag niet toestaat: niet naar u doorgestuurd, de verkeerde status, boven een van uw limieten, een factoringmelding die nog niet bevestigd is, een debiteur buiten uw lijst, een vereist document van de verkoper dat ontbreekt of niet meer geldig is, of een toestemmingsniveau dat zou dalen, komt nadat een debiteur heeft geantwoord, of een aanvraag betreft die geen factoring is of niet loopt. Ook een al geïmporteerd afschrift, meer dan 10 actieve endpoints, een aanbrengersnaam die u al gebruikt, een link die nog werkt (stuur replace: true), en een onboardinglink voor een bedrijf of contactpersoon met al een account of een openstaande uitnodiging, of in een land waaruit Advanta nog geen verkopers aanneemt. Een export wordt nog aangemaakt (export_in_progress, export_not_ready) of is mislukt (export_failed).
410export_expiredexport_expired: de bestanden van de export konden 24 uur lang worden gedownload; start een nieuwe export.
413file_too_large, too_many_lines, too_many_rowsHet afschrift is groter dan 4 MiB of heeft meer dan 5.000 transacties, of een import van limieten heeft meer dan 2.000 regels (too_many_rows).
422invalid_terms, invalid_amount, invalid_received_at, invalid_funding_details, step_back_message_required, invalid_decision, level_invalid, invalid_flag, reason_required, debtor_tax_id_required, seller_id_required, invalid_limit, tax_id_required, file_required, file_unreadable, file_empty, statement_unreadable, statement_has_no_transactions, line_invalid, country_invalid, codes_invalid, note_invalid, country_without_catalogue, document_code_unknown, body_required, url_required, url_invalid, url_too_long, url_must_be_https, url_has_credentials, url_port_not_allowed, url_host_not_allowed, url_not_allowed, events_invalid, unknown_event_type, invalid_description, invalid_keep_previous_hours, body_invalid, name_required, name_invalid, email_invalid, email_not_reserved, notes_too_long, lang_invalid, prescriber_id_invalid, expires_at_invalid, replace_invalid, reason_invalid, company_vat_invalid, contact_email_invalid, contact_name_invalid, company_name_invalid, company_name_required, return_url_invalid, return_url_not_allowed, metadata_invalid, locale_invalid, valid_days_invalid, prescriber_not_found, country_not_served, seller_id_invalid, terms_invalid, terms_key_unknown, seller_not_in_programme, already_announced, request_closed, status_invalid, close_invalid, claim_closed, rows_required, invalid_source, source_ref_invalid, source_ref_too_long, invalid_dateEen veld of parameter ontbreekt of is ongeldig; de code zegt welk. (Een afwijzing zonder reden is 400 reason_required; een wijziging van instellingen of niveau zonder reden is 422 reason_required.) Ook een wijziging van voorwaarden voor een bedrijf buiten uw programma (seller_not_in_programme), een aanvraag die al openbaar of gesloten is (already_announced, request_closed), en een regresvordering die niet meer open is of op de verkeerde manier wordt gesloten (claim_closed, close_invalid). Ook geweigerd: een import van limieten zonder regels (rows_required), met een source anders dan import of insurer (invalid_source) of met een source_ref die geen tekst is of langer dan 200 tekens (source_ref_invalid, source_ref_too_long), en een date van de kansen die geen kalenderdag is (invalid_date).
429rate_limited, export_rate_limitedrate_limited: meer aanroepen dan de limiet van de sleutel (120 per minuut en 3.000 per uur, tenzij Advanta een andere voor de sleutel instelde), of herhaalde aanroepen met een onbekende sleutel vanaf hetzelfde adres; stuur hem opnieuw na Retry-After seconden. export_rate_limited: hoogstens 10 exports in 24 uur.
500internal, query_failed, write_failed, ingest_failedEr ging iets mis aan de kant van Advanta. Probeer het later opnieuw.

debtor_not_eligible_for_funder

Als u alleen afnemers van uw lijst accepteert, antwoordt een aanbod op een aanvraag met een debiteur buiten de lijst met 409 en de debiteuren die het blokkeren, elk met een reason:

JSON
{
  "error": {
    "code": "debtor_not_eligible_for_funder",
    "message": "…",
    "debtors": [
      {
        "debtor_key": "A00000000",
        "name": "Example Buyer, S.A.",
        "country": "ES",
        "reason": "not_listed",
        "invoices": 2
      }
    ]
  }
}
reasonBetekenis
not_listedDe debiteur staat niet op uw lijst.
refusedUw limiet op de debiteur staat op geweigerd.
suspendedUw limiet op de debiteur is opgeschort.
no_tax_idEen factuur heeft geen fiscaal nummer van de afnemer.
invoice_missingEen regel van de aanvraag heeft geen factuur.
no_invoicesDe aanvraag heeft geen facturen.

documents_missing_for_funder

Als een document dat u van de verkoper vraagt ontbreekt, niet gecontroleerd is of niet meer geldig is, antwoordt een aanbod of een financiering met 409 en de documenten die het blokkeren, elk met een reason:

JSON
{
  "error": {
    "code": "documents_missing_for_funder",
    "message": "…",
    "documents": [
      {
        "code": "cert_seguridad_social",
        "name": "…",
        "reason": "expired",
        "valid_until": "2026-09-15",
        "document_id": "5b7c9d1e-3f2a-4b6c-8d0e-1a2b3c4d5e6f"
      }
    ]
  }
}
reasonBetekenis
missingDe verkoper heeft het document niet aangeleverd.
unverifiedAdvanta heeft het nog niet gecontroleerd.
expiredHet is op die datum niet meer geldig.
rejectedAdvanta heeft het afgewezen.
no_validity_dateHet heeft geen geldigheidsdatum.
not_in_catalogueDe code staat niet in de catalogus voor het land van de verkoper.

Versies en limieten

Het pad bevat de hoofdversie, /v1. Binnen v1 kunnen velden en eventtypes worden toegevoegd: negeer wat u niet kent.

api_version, in GET /v1/me en in elk webhook-event, noemt de revisie die u leest: vandaag 2026-09-23.

Elke sleutel mag 120 aanroepen per minuut en 3.000 per uur doen, geteld over alle servers van Advanta (het operationele team van Advanta kan voor een sleutel een andere limiet instellen). Een aanroep boven de limiet krijgt 429 rate_limited, met een header Retry-After in seconden en retry_after_seconds, limit en window_seconds in de fout: niets van wat hij vroeg is uitgevoerd, stuur hem dus na die tijd opnieuw. Herhaalde aanroepen met een onbekende of misvormde sleutel vanaf hetzelfde adres krijgen ook 429. GET /v1/health is niet begrensd, en exports houden hun eigen limiet (export_rate_limited).

Alles op deze pagina is beschreven in openapi.yaml (OpenAPI 3.1). Vragen, of een sleutel: diogo@advanta.pt.