GET/v1/health
Of de API werkt. Openbaar: geen sleutel, geen gegevens, geen databasetoegang.
Advanta vraagt deze route elke 5 minuten op; de resultaten staan op de openbare statuspagina.
curl -s "$BASE/v1/health"Advanta / Banken en financiers / Ontwikkelaars
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.
Eén basis-URL bedient live- en sandboxsleutels op dezelfde manier: de sleutel bepaalt wat u ziet.
https://bzsengbmlzzhztjfvcag.supabase.co/functions/v1/funder-apiAuthorization: Bearer adv_fk_… bij elke aanroep: adv_fk_ gevolgd door 64 hexadecimale tekens.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.
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"// 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:
{
"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"
}
}Er is één basis-URL. De sleutel bepaalt de omgeving, en GET /v1/me geeft die terug in environment.
| environment | De financier | Wat de sleutel ziet |
|---|---|---|
live | Door Advanta ingedeeld als echt of pilot. | Alleen echte klanten. |
sandbox | Een demonstratiefinancier. | Alleen fictieve bedrijven, op het demonstratievlak. |
unclassified | Nog niet door Advanta ingedeeld. | Geen enkele aanvraag. |
Een aanvraag van het andere vlak is nooit zichtbaar, welke sleutel u ook gebruikt.
key.prospect in GET /v1/me). Zoals elke sleutel wordt hij één keer getoond en wordt alleen de SHA-256 ervan bewaard.key.expires_at); daarna antwoordt elke aanroep met 401 key_expired. Advanta kan hem ook op elk moment intrekken.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.
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.
| Scope | Wat hij toestaat |
|---|---|
requests:read | Aanvragen 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:read | De limietboeken lezen (GET /v1/credit-limits, GET /v1/seller-limits) en het betaalprofiel. |
limits:write | Limieten instellen, herzien of weigeren (PUT /v1/credit-limits, PUT /v1/seller-limits). |
decisions:write | Aanbieden, 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:write | Wijzigen 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:write | Een bankafschrift sturen (POST /v1/statements). |
clients:write | Uw 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:write | Webhook-endpoints beheren: aanmaken, stoppen, het secret roteren, een test sturen, en de lijst en de afleverlogboeken lezen. |
onboarding:write | Onboardinglinks voor uw leveranciers aanmaken (POST /v1/onboarding-links) en lezen. |
exports:write | Al uw gegevens exporteren (POST /v1/exports, GET /v1/exports, GET /v1/exports/{id} en zijn documenten). Alleen productiesleutels. |
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.
Bij welke financier een sleutel hoort, zijn omgeving en zijn scopes. Begin hier.
/v1/healthOf de API werkt. Openbaar: geen sleutel, geen gegevens, geen databasetoegang.
Advanta vraagt deze route elke 5 minuten op; de resultaten staan op de openbare statuspagina.
curl -s "$BASE/v1/health"/v1/meWie er aanroept: de sleutel, zijn financier, zijn omgeving en zijn scopes.
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 -s "$BASE/v1/me" \
-H "Authorization: Bearer $ADVANTA_KEY"{
"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"
}
}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.
/v1/requestsDe 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.
| Naam | Waar | Beschrijving |
|---|---|---|
status | query | open (standaard: pending, submitted, under_review, terms_sent, accepted, approved), all, of één status. |
limit | query | 1 tot 200, standaard 50. |
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 -s "$BASE/v1/requests?status=all&limit=50" \
-H "Authorization: Bearer $ADVANTA_KEY"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);{
"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
}
]
}
]
}/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.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van de aanvraag. |
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 -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/requests/{id}/decisionVoorwaarden aanbieden, afwijzen, financieren of een ontvangst boeken. De aanvraag moet naar u zijn doorgestuurd, anders 409 not_routed_to_you.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van de aanvraag. |
De body heeft een van vier vormen, gekozen via decision:
decision | Velden | Effect |
|---|---|---|
offer | rate (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. |
decline | reason 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. |
fund | value_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). |
settle | amount (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. |
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"}'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 });{
"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"
}{ "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" }/v1/requests/{id}/consent-levelVerhogen wat de debiteuren van één aanvraag moeten ondertekenen. Alleen omhoog, alleen voor een factoringaanvraag die naar u is doorgestuurd en loopt, en alleen voordat een van haar debiteuren heeft geantwoord.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van de aanvraag. |
level verplicht | body | receipt, acknowledgment of acceptance, van laag naar hoog. |
reason verplicht | body | Waarom, minstens 8 tekens. |
curl -s -X POST "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/consent-level" \
-H "Authorization: Bearer $ADVANTA_KEY" \
-H "Content-Type: application/json" \
-d '{"level":"acceptance","reason":"Credit committee asked for acceptance on this buyer"}'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.
/v1/requests/{id}/documentsHet 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.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van de aanvraag. |
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 -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/documents" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/required-documentsDe 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.
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 -s "$BASE/v1/required-documents" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/required-documentsUw 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).
| Naam | Waar | Beschrijving |
|---|---|---|
country verplicht | body | Het land van de verkoper, twee letters. |
codes verplicht | body | Documentcodes uit de catalogus. |
note | body | Tot 500 tekens. |
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"}'/v1/settingsWat 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.
curl -s "$BASE/v1/settings" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/settingsWijzigen 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.
| Naam | Waar | Beschrijving |
|---|---|---|
debtor_consent_level | body | receipt, acknowledgment of acceptance. |
require_counsel_approved_texts | body | true om alleen door een advocaat goedgekeurde verklaringsteksten te laten tellen. |
reason verplicht | body | Waarom, minstens 8 tekens. |
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"}'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.
/v1/programmeUw 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.
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 -s "$BASE/v1/programme" \
-H "Authorization: Bearer $ADVANTA_KEY"{
"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 }
}/v1/programmeUw 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.
| Naam | Waar | Beschrijving |
|---|---|---|
seller_id | body | Het id van een bedrijf uit sellers in GET /v1/programme. Afwezig of null: uw standaard. |
terms verplicht | body | De voorwaarden om te wijzigen: disclosure, recourse, recourse_days, announce_overdue_days, announce_on_dispute, announce_on_kyc_lapse, bank_data; of reset. |
reason verplicht | body | Waarom, minstens 8 tekens. |
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"}'/v1/requests/{id}/announceEen 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.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van de aanvraag. |
reason verplicht | body | Waarom, minstens 8 tekens. Wordt vastgelegd in de bewijsketen van Advanta. |
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"}'/v1/requests/{id}/noticesDe 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.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van de aanvraag. |
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 -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/notices" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/requests/{id}/cash-flowWat 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.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van de aanvraag. |
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 -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/cash-flow" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/recourseUw 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.
| Naam | Waar | Beschrijving |
|---|---|---|
status | query | open, settled, withdrawn of written_off. Afwezig: alle vorderingen. |
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 -s "$BASE/v1/recourse?status=open" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/recourse/{id}/closeEen 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.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van de vordering (claim_id). |
status verplicht | body | withdrawn of written_off. |
reason verplicht | body | Waarom, minstens 8 tekens. |
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"}'/v1/bank-dataUw 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.
unit_price_eur en amount_eur zijn null tot de prijs van de aanbieder vastligt.
curl -s "$BASE/v1/bank-data" \
-H "Authorization: Bearer $ADVANTA_KEY"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.
/v1/credit-limitsUw boek per debiteur: uw limiet en wat uitstaat, is toegezegd, is aangeboden en nog beschikbaar is, in euro.
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 -s "$BASE/v1/credit-limits" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/credit-limitsUw limiet op een debiteur instellen of herzien, of de debiteur weigeren. De database weigert elk later aanbod dat deze limiet niet kan dragen.
| Naam | Waar | Beschrijving |
|---|---|---|
debtor_tax_id verplicht | body | Het btw- of fiscale nummer van de debiteur. |
debtor_country | body | ISO 3166 alpha-2. |
debtor_name | body | De naam van de debiteur. |
amount | body | Euro, 0 of meer. Verplicht voor een actieve limiet. |
status | body | active (standaard), refused of suspended. |
note | body | Vrije tekst. |
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"}'/v1/credit-limits/importTot 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.
| Naam | Waar | Beschrijving |
|---|---|---|
rows verplicht | body | 1 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). |
source | body | import (uw eigen limieten, standaard) of insurer (de limieten van uw kredietverzekeraar). |
source_ref | body | Het bestand of de batch waar de limieten vandaan komen, hoogstens 200 tekens. |
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 -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"}]}'/v1/seller-limitsUw boek per verkoper, met dezelfde cijfers als het debiteurenboek.
Elke verkoper bevat seller_id, seller_name, seller_nif, seller_country en dezelfde limiet- en blootstellingsvelden als een debiteur.
curl -s "$BASE/v1/seller-limits" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/seller-limitsUw limiet op een verkoper instellen of herzien, of de verkoper weigeren.
| Naam | Waar | Beschrijving |
|---|---|---|
seller_id verplicht | body | Zoals teruggegeven door GET /v1/seller-limits. |
amount | body | Euro, 0 of meer. |
status | body | active (standaard), refused of suspended. |
note | body | Vrije tekst. |
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"}'/v1/payer-recordHoe 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.
| Naam | Waar | Beschrijving |
|---|---|---|
tax_id verplicht | query | Het btw- of fiscale nummer van de afnemer. |
country | query | ISO 3166 alpha-2. |
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 -s "$BASE/v1/payer-record?tax_id=A00000000&country=ES" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/requests/{id}/debtorsWat 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.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van de aanvraag. |
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 -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/debtors" \
-H "Authorization: Bearer $ADVANTA_KEY"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.
/v1/statementsHet 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.
| Naam | Waar | Beschrijving |
|---|---|---|
file_name | query | De bestandsnaam (optioneel). |
kind | query | camt053 of csv; wordt herkend als hij ontbreekt. |
| het bestand verplicht | body | Het oorspronkelijke bestand, gestuurd als application/xml of text/csv; of JSON { file_name, kind, content_base64 }. |
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.xmlBreng 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.
/v1/client-linksUw eigen open link (prescriber_id null) en de huidige link van elke aanbrenger, met zijn state (active, disabled of expired) en zijn url zolang hij werkt.
| Naam | Waar | Beschrijving |
|---|---|---|
lang | query | De taal van de pagina die elke link opent: pt, es, en, fr, de, it of nl, toegevoegd aan zijn url. |
Een bedrijf dat een link opent, geeft zijn naam, fiscaal nummer, land en e-mail, en ontvangt uw uitnodiging per e-mail. Wanneer het die aanvaardt, wordt het uw klant: zijn aanvragen gaan alleen naar u, en zijn herkomst (de link, de aanbrenger, de datum) wordt vastgelegd. Een link openen maakt nooit zelf een account aan.
Elke link draagt ook arrivals (de bedrijven die via hem voor het eerst bij u kwamen) en claims_last_day (aanmeldingen via hem in de laatste 24 uur; een link neemt er hoogstens 20 per uur en 100 per dag aan).
curl -s "$BASE/v1/client-links?lang=es" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/client-linksUw eigen open link uitgeven, of met prescriber_id die van een aanbrenger. Er is één werkende link per eigenaar: zolang er een werkt, stuurt u replace: true om hem te vervangen (de oude werkt meteen niet meer); anders 409 link_exists. Alleen de SHA-256 van het token van de link wordt bewaard, en de uitgifte wordt vastgelegd in de bewijsketen van Advanta.
| Naam | Waar | Beschrijving |
|---|---|---|
prescriber_id | body | Een van uw actieve aanbrengers; laat het weg, of stuur null, voor uw eigen link. |
expires_at | body | Optioneel: tussen een uur en drie jaar vanaf nu. |
replace | body | true om een link die nog werkt te vervangen. Standaard false. |
reason | body | De reden, tot 200 tekens. Bewaard op de vervangen link en in de bewijsketen. |
lang | body | De taal van de pagina die de link opent, toegevoegd aan zijn url. |
Een link die met een sandboxsleutel is uitgegeven, maakt alleen testuitnodigingen, en de sleutel heeft decisions:write nodig: de links van de demonstratiefinancier worden door alle demonstraties gedeeld.
curl -s -X POST "$BASE/v1/client-links" \
-H "Authorization: Bearer $ADVANTA_KEY" \
-H "Content-Type: application/json" \
-d '{"replace":true,"reason":"The old link was forwarded too widely","lang":"es"}'{
"client_link": {
"id": "8d3e1f2a-4b5c-4d6e-9f70-1a2b3c4d5e6f",
"prescriber_id": null,
"state": "active",
"created_at": "2026-09-26T10:00:00Z",
"expires_at": null,
"disabled_at": null,
"disabled_reason": null,
"replaced_by": null,
"arrivals": 0,
"claims_last_day": 0,
"url": "https://app.advanta.capital/join?link=…&lang=es"
}
}/v1/client-links/{id}/disableEen link uitschakelen. Hij werkt meteen niet meer; bedrijven die al via hem kwamen, behouden hun herkomst. Een al uitgeschakelde link uitschakelen verandert niets (changed is false). Een nieuwe geeft u uit met POST /v1/client-links.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van de link, uit GET /v1/client-links. |
reason | body | De reden, tot 200 tekens. |
curl -s -X POST "$BASE/v1/client-links/$LINK_ID/disable" \
-H "Authorization: Bearer $ADVANTA_KEY" \
-H "Content-Type: application/json" \
-d '{"reason":"Campaign ended"}'/v1/prescribersUw 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.
| Naam | Waar | Beschrijving |
|---|---|---|
lang | query | De taal van de pagina die elke link opent: pt, es, en, fr, de, it of nl, toegevoegd aan zijn url. |
Een sandboxsleutel leest de aanbrengers van de demonstratiefinancier, die alle demonstraties delen.
curl -s "$BASE/v1/prescribers?lang=es" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/prescribersEen 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.
| Naam | Waar | Beschrijving |
|---|---|---|
name verplicht | body | 2 tot 120 tekens, uniek onder uw actieve aanbrengers. |
email | body | Optioneel. Een sandboxfinancier legt alleen gereserveerde adressen vast (eindigend op .example, .invalid, .test of .demo). |
notes | body | Optioneel, tot 1.000 tekens. |
lang | body | De taal van de pagina die zijn link opent, toegevoegd aan zijn url. |
Met een sandboxsleutel verandert dit gedeelde demonstratiegegevens, dus de sleutel heeft decisions:write nodig.
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"}'{
"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"
}
}
}/v1/prescribers/{id}/disableEen 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.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van de aanbrenger. |
reason | body | De reden, tot 200 tekens. |
curl -s -X POST "$BASE/v1/prescribers/$PRESCRIBER_ID/disable" \
-H "Authorization: Bearer $ADVANTA_KEY" \
-H "Content-Type: application/json" \
-d '{"reason":"Agreement ended"}'/v1/prescribers/reportWat 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.
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 -s "$BASE/v1/prescribers/report" \
-H "Authorization: Bearer $ADVANTA_KEY"{
"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
}
]
}
]
}/v1/client-invitationsAl 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.
| Naam | Waar | Beschrijving |
|---|---|---|
limit | query | 1 tot 500, standaard 200. |
Alleen uw eigen gegevensvlak. Een sandboxsleutel ziet de uitnodigingen van andere sandboxsleutels niet.
curl -s "$BASE/v1/client-invitations?limit=50" \
-H "Authorization: Bearer $ADVANTA_KEY"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.
/v1/opportunitiesHet 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.
| Naam | Waar | Beschrijving |
|---|---|---|
date | query | De dag van het overzicht, YYYY-MM-DD (Madrid-tijd). Afwezig: het recentste. Een dag zonder overzicht geeft date null en geen regels. |
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 -s "$BASE/v1/opportunities?date=2026-10-07" \
-H "Authorization: Bearer $ADVANTA_KEY"{
"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" }
}
]
}Registreer de endpoints die de webhooks ontvangen, roteer hun secrets, stuur een test en lees het afleverlogboek.
/v1/webhooksUw actieve endpoints, zonder hun secrets, en de eventtypes waarop u zich kunt abonneren. Een sandboxsleutel ziet alleen de endpoints die hij zelf heeft aangemaakt.
curl -s "$BASE/v1/webhooks" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/webhooksEen endpoint registreren. Het antwoord bevat het ondertekeningssecret, dat niet opnieuw wordt getoond.
| Naam | Waar | Beschrijving |
|---|---|---|
url verplicht | body | https 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. |
events | body | Een lijst van eventtypes, of ["*"] voor allemaal (standaard). |
description | body | Tot 200 tekens. |
Hoogstens 10 actieve endpoints.
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"}'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);{
"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 }
}/v1/webhooks/{id}Een endpoint stoppen. Nog openstaande afleveringen worden geannuleerd en de secrets verwijderd.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van het endpoint. |
curl -s -X DELETE "$BASE/v1/webhooks/$WEBHOOK_ID" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/webhooks/{id}/rotate-secretEen 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.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van het endpoint. |
keep_previous_hours | body | 0 tot 72, standaard 24. |
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}'/v1/webhooks/{id}/testEen webhook.test-event voor dit endpoint in de wachtrij zetten. De volgende run van de dispatcher levert het af, binnen ongeveer een minuut.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van het endpoint. |
curl -s -X POST "$BASE/v1/webhooks/$WEBHOOK_ID/test" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/webhooks/{id}/deliveriesHet 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.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van het endpoint. |
limit | query | 1 tot 200, standaard 50. |
curl -s "$BASE/v1/webhooks/$WEBHOOK_ID/deliveries?limit=20" \
-H "Authorization: Bearer $ADVANTA_KEY"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.
/v1/onboarding-linksEen onboardinglink voor eenmalig gebruik voor een van uw leveranciers, aan u toegeschreven. Advanta stuurt geen e-mail: u geeft de url aan uw leverancier. Wanneer de leverancier de verificatie van zijn bedrijf heeft ingediend, ontvangt u onboarding.completed, en de leverancier wordt met een ondertekende status teruggestuurd naar uw return_url.
| Naam | Waar | Beschrijving |
|---|---|---|
company_vat verplicht | body | Het btw- of fiscaal nummer van de leverancier, met of zonder landprefix. |
country verplicht | body | ISO 3166 alpha-2. |
contact_email verplicht | body | Het e-mailadres van de contactpersoon bij de leverancier. |
return_url verplicht | body | https, tot 2.048 tekens, op een origin uit uw lijst van terugkeer-origins. Die lijst wordt bijgehouden in de portaalinstellingen of door Advanta, nooit via deze API. |
company_name | body | 2 tot 200 tekens. Mag ontbreken bij een EU-btw-nummer dat VIES kan benoemen. |
contact_name | body | Tot 120 tekens. |
metadata | body | Uw eigen sleutels en waarden: hoogstens 20 sleutels, waarden tekst, getal, true, false of null, 2 KB JSON. Teruggegeven op de link en in onboarding.completed. |
locale | body | De taal van de onboarding: pt, es, en, fr, de, it of nl. |
valid_days | body | 1 tot 30, standaard 14. |
Het antwoord bevat return_secret (ors_ gevolgd door 64 hexadecimale tekens), één keer getoond: bewaar het meteen. Alleen de SHA-256 van het token van de link wordt bewaard. Een link die met een sandboxsleutel is aangemaakt, legt de leverancier vast als testbedrijf op het demonstratievlak.
Wanneer de leverancier terugkomt, draagt de return_url advanta_onboarding (het id van de link), advanta_status (completed), advanta_ts (Unix-seconden) en advanta_sig: de hexadecimale HMAC-SHA256 van <advanta_onboarding>.<advanta_status>.<advanta_ts>, met uw return_secret als sleutel. Controleer die voordat uw pagina de status vertrouwt, en weiger een terugkeer die meer dan 600 seconden van uw klok afwijkt; het laatste voorbeeld hieronder doet beide.
curl -s -X POST "$BASE/v1/onboarding-links" \
-H "Authorization: Bearer $ADVANTA_KEY" \
-H "Content-Type: application/json" \
-d '{"company_vat":"PT500000000","country":"PT","contact_email":"ana@fornecedor.example","contact_name":"Ana Sousa","company_name":"Fornecedor Exemplo, Lda.","return_url":"https://portal.example.com/onboarding/done","metadata":{"supplier_ref":"S-42"},"locale":"pt"}'{
"onboarding_link": {
"id": "c2d4e6f8-1a3b-4c5d-8e7f-9a0b1c2d3e4f",
"status": "pending",
"company_name": "Fornecedor Exemplo, Lda.",
"country": "PT",
"return_url": "https://portal.example.com/onboarding/done",
"metadata": { "supplier_ref": "S-42" },
"expires_at": "2026-10-10T10:00:00Z",
"completed_at": null,
"seller_id": null
},
"url": "https://app.advanta.capital/accept-invite?invitation=…&lang=pt",
"expires_at": "2026-10-10T10:00:00Z",
"environment": "sandbox",
"return_secret": "ors_…",
"return": {
"parameters": ["advanta_onboarding", "advanta_status", "advanta_ts", "advanta_sig"],
"signature": "hex HMAC-SHA256(return_secret, \"<advanta_onboarding>.<advanta_status>.<advanta_ts>\")"
}
}import crypto from 'node:crypto';
// On the page behind your return_url.
// url: the full address the supplier came back to
// returnSecret: the "ors_…" string POST /v1/onboarding-links returned, stored when you made the link
export function verifyAdvantaReturn(url, returnSecret, nowSeconds = Math.floor(Date.now() / 1000)) {
const q = new URL(url).searchParams;
const id = q.get('advanta_onboarding') ?? '';
const status = q.get('advanta_status') ?? '';
const ts = q.get('advanta_ts') ?? '';
const sig = q.get('advanta_sig') ?? '';
if (!id || !status || !/^[0-9]{1,12}$/.test(ts) || !/^[0-9a-f]{64}$/.test(sig)) return null;
if (Math.abs(nowSeconds - Number(ts)) > 600) return null; // too old: ask your back end instead
const expected = crypto.createHmac('sha256', returnSecret).update(`${id}.${status}.${ts}`).digest();
if (!crypto.timingSafeEqual(Buffer.from(sig, 'hex'), expected)) return null;
return { onboardingLinkId: id, status }; // status is "completed"
}/v1/onboarding-linksUw onboardinglinks, de nieuwste eerst, elk met zijn status: pending, account_created, completed, expired of revoked. Een sandboxsleutel ziet de links die hij heeft aangemaakt.
| Naam | Waar | Beschrijving |
|---|---|---|
limit | query | 1 tot 200, standaard 50. |
curl -s "$BASE/v1/onboarding-links?limit=20" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/onboarding-links/{id}Eén onboardinglink en waar de leverancier staat. Zodra hij voltooid is, is seller_id het id dat GET /v1/seller-limits gebruikt.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het id van de link. |
curl -s "$BASE/v1/onboarding-links/$ONBOARDING_ID" \
-H "Authorization: Bearer $ADVANTA_KEY"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.
/v1/exportsStart 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.
| Naam | Waar | Beschrijving |
|---|---|---|
lang | body | De taal van de README: pt, es, en, fr, de, it of nl (standaard en). |
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 -s -X POST "$BASE/v1/exports" \
-H "Authorization: Bearer $ADVANTA_KEY" \
-H "Content-Type: application/json" \
-d '{"lang":"es"}'{
"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" }
}
}/v1/exportsUw exports, uit het portaal en de API, de nieuwste eerst, met status, grootte en manifest_sha256.
| Naam | Waar | Beschrijving |
|---|---|---|
limit | query | 1 tot 200, standaard 50. |
curl -s "$BASE/v1/exports?limit=20" \
-H "Authorization: Bearer $ADVANTA_KEY"/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.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het export-id, uit POST /v1/exports of GET /v1/exports. |
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 -s "$BASE/v1/exports/5e1f0a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b" \
-H "Authorization: Bearer $ADVANTA_KEY"{
"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"
}
]
}# 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/v1/exports/{id}/documentsAls 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.
| Naam | Waar | Beschrijving |
|---|---|---|
id verplicht | path | Het export-id. |
after | query | De next_after van de vorige pagina. |
limit | query | 1 tot 200, standaard 100. |
curl -s "$BASE/v1/exports/5e1f0a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b/documents?limit=100" \
-H "Authorization: Bearer $ADVANTA_KEY"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.
| Event | Wanneer | data |
|---|---|---|
request.routed | Het 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.unrouted | Een 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.accepted | Uw 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.acknowledged | Een 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.disputed | Een 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.funded | Een aanvraag die naar u is doorgestuurd, is gefinancierd. | De aanvraagvelden van request.routed, plus funded_at en advance_amount. |
settlement.recorded | Er 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_expiring | Een 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.opened | Een 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.resolved | Het 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.completed | Een 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.joined | Een 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.ready | Een 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.announced | Een 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.opened | Een 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.settled | Een 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_seller | Op 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.daily | Het 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_blocked | Een 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.accepted | Een 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.test | Het testevent dat u hebt aangevraagd met POST /v1/webhooks/{id}/test. |
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.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{
"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
}
}| Veld | Betekenis |
|---|---|
id | Het id van het event, gelijk aan Advanta-Event-Id. |
object | Altijd event. |
type | Een van de eventtypes hierboven. |
api_version | De API-revisie waarin het event is geschreven. |
created | Wanneer het event is aangemaakt, in Unix-seconden. |
environment | live, sandbox of unclassified, zoals in GET /v1/me. |
data | De velden van het event, hierboven opgesomd. |
2xx en het event is afgeleverd. Elk ander antwoord, geen antwoord binnen 10 seconden, of een redirect is een mislukking; redirects worden nooit gevolgd.failed gemarkeerd en blijft ze in het afleverlogboek.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.https op een openbare hostnaam, op poort 443, zonder gebruikersnaam of wachtwoord erin. Privé-, loopback- en link-localadressen worden geweigerd.["*"] voor allemaal (standaard).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.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.Elke aflevering bevat Advanta-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256>. Controleer die voordat u de body vertrouwt:
<t>.<raw body>, met het secret van het endpoint als sleutel (de volledige tekenreeks whsec_…, als UTF-8), en codeer het hexadecimaal.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.
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();
});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 "", 200Elke fout is JSON, met een stabiele code en een message voor mensen. Beslis op de code, nooit op het bericht.
{
"error": {
"code": "not_routed_to_you",
"message": "This request is not assigned to your institution. Advanta operations routes requests."
}
}| Status | Codes | Betekenis |
|---|---|---|
| 400 | reason_required | Een afwijzing zonder reason of notes. |
| 401 | unauthorized, key_expired | unauthorized: de sleutel ontbreekt, is misvormd, onbekend, ingetrokken of inactief. key_expired: de sleutel is verlopen. |
| 403 | forbidden, not_your_request, export_live_key_required, not_routed_to_you, not_your_claim | forbidden: 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. |
| 404 | not_found | Geen voor deze sleutel zichtbare resource, of een onbekende route. |
| 405 | method_not_allowed | De methode wordt op dit pad niet ondersteund. |
| 409 | not_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_failed | Een 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). |
| 410 | export_expired | export_expired: de bestanden van de export konden 24 uur lang worden gedownload; start een nieuwe export. |
| 413 | file_too_large, too_many_lines, too_many_rows | Het 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). |
| 422 | invalid_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_date | Een 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). |
| 429 | rate_limited, export_rate_limited | rate_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. |
| 500 | internal, query_failed, write_failed, ingest_failed | Er ging iets mis aan de kant van Advanta. Probeer het later opnieuw. |
debtor_not_eligible_for_funderAls 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:
{
"error": {
"code": "debtor_not_eligible_for_funder",
"message": "…",
"debtors": [
{
"debtor_key": "A00000000",
"name": "Example Buyer, S.A.",
"country": "ES",
"reason": "not_listed",
"invoices": 2
}
]
}
}| reason | Betekenis |
|---|---|
not_listed | De debiteur staat niet op uw lijst. |
refused | Uw limiet op de debiteur staat op geweigerd. |
suspended | Uw limiet op de debiteur is opgeschort. |
no_tax_id | Een factuur heeft geen fiscaal nummer van de afnemer. |
invoice_missing | Een regel van de aanvraag heeft geen factuur. |
no_invoices | De aanvraag heeft geen facturen. |
documents_missing_for_funderAls 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:
{
"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"
}
]
}
}| reason | Betekenis |
|---|---|
missing | De verkoper heeft het document niet aangeleverd. |
unverified | Advanta heeft het nog niet gecontroleerd. |
expired | Het is op die datum niet meer geldig. |
rejected | Advanta heeft het afgewezen. |
no_validity_date | Het heeft geen geldigheidsdatum. |
not_in_catalogue | De code staat niet in de catalogus voor het land van de verkoper. |
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.