GET/v1/health
Ob die API läuft. Öffentlich: kein Schlüssel, keine Daten, kein Datenbankzugriff.
Advanta ruft diese Route alle 5 Minuten ab; die Ergebnisse stehen auf der öffentlichen Statusseite.
curl -s "$BASE/v1/health"Advanta / Banken und Finanzierer / Entwickler
Ihr eigenes System liest die Finanzierungsanfragen, die Advanta an Sie weiterleitet, sendet Ihre Entscheidungen, legt fest, was Sie vor einer Auszahlung verlangen, verwaltet Ihre Limits, sendet Ihren Kontoauszug zum Abgleich, lädt Ihre eigenen Kunden und Lieferanten ein und empfängt signierte Webhooks, wenn etwas passiert. Jeder Schreibzugriff wirkt genauso wie dieselbe Aktion im Finanzierer-Portal. Und es nimmt alle Ihre Daten mit, wann Sie wollen: Ihr Ausstiegsrecht.
Eine einzige Basis-URL bedient Live- und Sandbox-Schlüssel gleichermaßen: Der Schlüssel entscheidet, was Sie sehen.
https://bzsengbmlzzhztjfvcag.supabase.co/functions/v1/funder-apiAuthorization: Bearer adv_fk_… bei jedem Aufruf: adv_fk_ gefolgt von 64 Hexadezimalzeichen.Beginnen Sie mit GET /v1/me: Es sagt, zu welchem Finanzierer der Schlüssel gehört, in welcher Umgebung er ist und welche Scopes er hat. Listen Sie dann die Anfragen auf, die an Sie weitergeleitet wurden.
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 antwortet so:
{
"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"
}
}Es gibt eine einzige Basis-URL. Der Schlüssel entscheidet über die Umgebung, und GET /v1/me gibt sie in environment zurück.
| environment | Der Finanzierer | Was der Schlüssel sieht |
|---|---|---|
live | Von Advanta als real oder Pilot eingestuft. | Nur echte Kunden. |
sandbox | Ein Demonstrations-Finanzierer. | Nur fiktive Unternehmen, auf der Demonstrationsebene. |
unclassified | Von Advanta noch nicht eingestuft. | Keine Anfrage. |
Eine Anfrage der anderen Ebene ist nie sichtbar, egal mit welchem Schlüssel.
key.prospect in GET /v1/me). Wie jeder Schlüssel wird er nur einmal angezeigt, und nur sein SHA-256 wird gespeichert.key.expires_at); danach antwortet jeder Aufruf mit 401 key_expired. Advanta kann ihn außerdem jederzeit widerrufen.decisions:write hinzu. Die Vermittler und Links des Demonstrations-Finanzierers teilen sich alle Demonstrationen.Einen Sandbox-Schlüssel können Sie heute haben: Ihr eigenes System gegen unsere Demonstrationsdaten, vor jedem Vertrag. Schreiben Sie an diogo@advanta.pt. Der Live-Schlüssel wird an dem Tag ausgestellt, an dem Sie sich verbinden wollen.
Jeder Aufruf trägt Authorization: Bearer adv_fk_<64 hex>. Schlüssel werden vom Operations-Team von Advanta ausgestellt und gehören zu einem Finanzierer. Ein Schlüssel wird nur einmal angezeigt, nur sein SHA-256 wird gespeichert, und er kann ablaufen.
Jeder Schlüssel hat Scopes. Ein Aufruf, für den dem Schlüssel der Scope fehlt, antwortet mit 403 forbidden.
| Scope | Was er erlaubt |
|---|---|
requests:read | Anfragen lesen (GET /v1/requests, GET /v1/requests/{id} und ihre Dokumente). Er liest außerdem Ihre Einstellungen und geforderten Dokumente, die Limit-Bücher, das Zahlungsprofil, Ihre Kunden (Vermittler, Links, Einladungen und den Bericht), Ihre Onboarding-Links, Ihre Webhook-Endpunkte und deren Zustellprotokolle. Er liest außerdem Ihre Programmkonditionen (GET /v1/programme), die Regressforderungen (GET /v1/recourse), Ihre Bankdaten (GET /v1/bank-data) sowie die Abtretungsanzeigen einer Anfrage und den Cashflow, den ihr Verkäufer mit Ihnen teilt. |
limits:read | Die Limit-Bücher lesen (GET /v1/credit-limits, GET /v1/seller-limits) und das Zahlungsprofil. |
limits:write | Limits setzen, ändern oder verweigern (PUT /v1/credit-limits, PUT /v1/seller-limits). |
decisions:write | Anbieten, ablehnen, auszahlen und Zahlungseingänge erfassen (POST /v1/requests/{id}/decision), und anheben, was die Schuldner einer Anfrage unterschreiben müssen (POST /v1/requests/{id}/consent-level). Er erlaubt außerdem jeden Schreibzugriff auf Einstellungen, Limits, Kontoauszüge, Kunden, Onboarding-Links und Webhook-Endpunkte sowie das Lesen von Webhook-Endpunkten, Kunden und Onboarding-Links. Er erlaubt außerdem, alle Ihre Daten zu exportieren. Er legt außerdem eine stille Anfrage offen (POST /v1/requests/{id}/announce), schließt eine Regressforderung (POST /v1/recourse/{id}/close) und ändert Ihre Programmkonditionen. |
settings:write | Ändern, was Ihre Schuldner vor einer Auszahlung unterschreiben müssen (PUT /v1/settings), und welche Dokumente Sie von Verkäufern verlangen (PUT /v1/required-documents). Außerdem Ihre Programmkonditionen (PUT /v1/programme). |
statements:write | Einen Kontoauszug senden (POST /v1/statements). |
clients:write | Ihre Kunden verwalten: Vermittler anlegen und abschalten (POST /v1/prescribers, POST /v1/prescribers/{id}/disable), Links ausstellen, ersetzen und abschalten (POST /v1/client-links, POST /v1/client-links/{id}/disable) und sie lesen, dazu die Einladungen und den Bericht. |
webhooks:write | Webhook-Endpunkte verwalten: anlegen, stoppen, Secret rotieren, einen Test senden sowie die Liste und die Zustellprotokolle lesen. |
onboarding:write | Onboarding-Links für Ihre Lieferanten erstellen (POST /v1/onboarding-links) und lesen. |
exports:write | Alle Ihre Daten exportieren (POST /v1/exports, GET /v1/exports, GET /v1/exports/{id} und seine Dokumente). Nur Produktionsschlüssel. |
Pfade sind relativ zur Basis-URL. Jeder Aufruf kann 401 antworten (unauthorized oder key_expired), ein Aufruf, der einen Scope braucht, kann 403 forbidden antworten (dem Schlüssel fehlt der Scope, oder der Finanzierer ist nicht aktiv), und 500 heißt: später erneut versuchen. Das wird unten nicht wiederholt; Fehler listet jeden Code.
Zu welchem Finanzierer ein Schlüssel gehört, seine Umgebung und seine Scopes. Beginnen Sie hier.
/v1/healthOb die API läuft. Öffentlich: kein Schlüssel, keine Daten, kein Datenbankzugriff.
Advanta ruft diese Route alle 5 Minuten ab; die Ergebnisse stehen auf der öffentlichen Statusseite.
curl -s "$BASE/v1/health"/v1/meWer aufruft: der Schlüssel, sein Finanzierer, seine Umgebung und seine Scopes.
key.prefix sind die ersten 12 Zeichen des Schlüssels. key.expires_at ist null für einen Schlüssel ohne Ablauf; key.prospect nennt, an wen ein Sandbox-Schlüssel ausgestellt wurde.
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"
}
}Lesen Sie die Anfragen, die Advanta an Sie weitergeleitet hat, und bieten Sie dann an, lehnen Sie ab, zahlen Sie aus oder erfassen Sie einen Zahlungseingang; verlangen Sie bei Bedarf mehr von den Schuldnern einer Anfrage.
/v1/requestsDie an Sie weitergeleiteten Anfragen (Sie können darauf handeln) und die, auf die Sie bereits gehandelt haben (nur lesend, auch nach einer Weiterleitung an andere), neueste zuerst, jeweils mit Ihrem eigenen Angebot in my_offer, falls Sie eines abgegeben haben.
| Name | Ort | Beschreibung |
|---|---|---|
status | query | open (Standard: pending, submitted, under_review, terms_sent, accepted, approved), all oder ein einzelner Status. |
limit | query | 1 bis 200, Standard 50. |
Eine Anfrage enthält id, request_ref, type (factoring oder confirming), status, total_amount, advance_amount, den Verkäufer in company_name und company_nif, invoice_count, assigned_bank_id, consent_level_required (was jeder Schuldner vor der Auszahlung unterschreiben muss, bei der Weiterleitung festgelegt), ihre Zeitstempel und, je Schuldner, debtor_consent. Die Spezifikation listet jedes Feld.
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}Die Prüfungsunterlagen einer Anfrage: die Anfrage, ihre Forderungen, der aktuelle Advanta Score des Verkäufers, Ihr eigenes Angebot und risk, die Betrugssignale und Beanstandungen der Anfrage, so wie Ihr Portal sie zeigt.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id der Anfrage. |
score reicht von 300 bis 850, mit einer Note von A bis E und ihren Dimensionen. Er wird sofort berechnet, wenn der Verkäufer noch keinen hat, und ist null, wenn das fehlschlägt. Jede Forderung hat invoice_no, invoice_amount, invoice_date, invoice_due_date und den Schuldner in customer_name. debtor_consent nennt je Schuldner den Status der Anzeige, die geforderte und die unterschriebene Stufe (level_achieved), meets_requirement, den Kanal, den unterschriebenen Erklärungstext und wer unterschrieben hat.
risk.signals listet die noch offenen oder bestätigten Betrugssignale, jedes mit einem stabilen code (etwa amount_above_history) und einer severity. Ein hard-Signal (etwa ein Betrag, der sich geändert hat, während die Rechnung in einer Anfrage ist, eine Gutschrift dazu oder eine offene Beanstandung) stoppt Weiterleitung und Auszahlung, bis das Operations-Team von Advanta es prüft; die übrigen markieren nur. risk.disputes listet jede gegen die Anfrage erfasste Beanstandung.
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/requests/{id}/decisionKonditionen anbieten, ablehnen, auszahlen oder einen Zahlungseingang erfassen. Die Anfrage muss an Sie weitergeleitet sein, sonst 409 not_routed_to_you.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id der Anfrage. |
Der Body hat eine von vier Formen, gewählt über decision:
decision | Felder | Wirkung |
|---|---|---|
offer | rate (Prozent, über 0 und bis 100) und advance_pct (gleicher Bereich), beide Pflicht; days, notes, valid_days (1 bis 90). | Sendet Ihre Konditionen und setzt eine Anfrage im Status pending, submitted oder under-review auf terms_sent. Das Angebot läuft nach valid_days ab, sonst nach Ihrer eingestellten Gültigkeit (Standard 7 Tage). Abgelehnt mit 409 credit_limit, wenn eines Ihrer Limits es nicht tragen kann, mit 409 debtor_not_eligible_for_funder, wenn Sie nur Käufer Ihrer Liste annehmen und ein Schuldner nicht darauf steht, und mit 409 documents_missing_for_funder, wenn ein von Ihnen verlangtes Dokument des Verkäufers fehlt, ungeprüft oder abgelaufen ist. |
decline | reason oder notes, mindestens eines; notes ist die Nachricht, die der Verkäufer liest. internal_note optional: nur für Ihr Team, dem Verkäufer nie gezeigt. | Schließt die Anfrage. reason ist eines von payer_credit, invoice_ineligible, documentation, concentration, amount_out_of_range, sector_excluded, no_funder_capacity, withdrawn_by_client oder other; Freitext wird als Notiz mit dem Grund other gespeichert. |
fund | value_date (JJJJ-MM-TT, das Valutadatum Ihrer Überweisung an den Verkäufer, höchstens 7 Tage im Voraus) und reference (die Referenz der Überweisung, 3 bis 140 Zeichen); amount optional, gegen den angenommenen Vorschuss geprüft. | Erst wenn der Verkäufer Ihre Konditionen angenommen hat (Status approved). Beim Factoring muss zuvor die Anzeige jedes Schuldners bestätigt sein (sonst 409 funding_gate_failed), und die von Ihnen verlangten Dokumente des Verkäufers müssen am Auszahlungstag gültig sein (sonst 409 documents_missing_for_funder). |
settle | amount (Pflicht); received_at (Standard: jetzt, höchstens einen Tag in der Zukunft); reference (bis 140 Zeichen); note (bis 1.000); final. | Erfasst einen Zahlungseingang zu einer ausgezahlten Anfrage. Teilzahlungen werden addiert; die Anfrage wird settled, wenn die Summe den Anfragebetrag erreicht oder final true ist. |
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-levelAnheben, was die Schuldner einer Anfrage unterschreiben müssen. Nur nach oben, nur bei einer an Sie weitergeleiteten, laufenden Factoring-Anfrage und nur, bevor einer ihrer Schuldner geantwortet hat.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id der Anfrage. |
level Pflicht | body | receipt, acknowledgment oder acceptance, von der niedrigsten zur höchsten Stufe. |
reason Pflicht | body | Warum, mindestens 8 Zeichen. |
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"}'Was vor einer Auszahlung vorliegen muss: die Dokumente, die Sie von Verkäufern verlangen, je Land des Verkäufers, und was jeder Schuldner unterschreiben muss. Jede Anfrage bewahrt die Versionen, die Ihre Anforderungen erfüllt haben.
/v1/requests/{id}/documentsDie Dokumentenakte einer Anfrage. Als die Anfrage an Sie weitergeleitet wurde, und erneut bei der Auszahlung, hat Advanta festgehalten, welche Version jedes von Ihnen geforderten Dokuments Ihre Anforderung erfüllt hat: Dateiname, SHA-256, Ausstellungs- und Gültigkeitsdatum sowie wann und wie Advanta es geprüft hat. Dieser Eintrag ändert sich nie, auch wenn der Verkäufer neuere Versionen hochlädt; jeder Eintrag sagt außerdem, wo das Dokument heute steht, und current listet die aktuellen Dokumente des Verkäufers.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id der Anfrage. |
Jeder Eintrag mit Datei trägt eine download_url, die zwei Minuten gültig ist (url_expires_in), und jede ausgegebene URL wird protokolliert. Vergleichen Sie den SHA-256 des Heruntergeladenen mit dem festgehaltenen.
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/documents" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/required-documentsDie Dokumente, die Sie von Verkäufern verlangen, je Land des Verkäufers, und der Katalog, aus dem sie gewählt werden: Code jedes Dokuments, Name in sieben Sprachen, Aussteller, übliche Gültigkeit und Vertraulichkeitsstufe. Die übliche Gültigkeit dient nur als Vorbelegung: Es zählt das auf dem Dokument gedruckte Datum, das der Verkäufer erfasst und Advanta prüft.
Eine Anfrage wird nur an Sie weitergeleitet, Ihr Angebot nur erfasst und die Anfrage nur ausgezahlt, solange jedes Dokument Ihrer Liste für das Land des Verkäufers von Advanta geprüft und an diesem Datum gültig ist; sonst 409 documents_missing_for_funder.
curl -s "$BASE/v1/required-documents" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/required-documentsIhre Liste für ein Verkäuferland ersetzen; eine leere Liste löscht sie. Die Codes stammen aus dem Katalog, und die Änderung wird mit note in der Nachweiskette von Advanta festgehalten. Anfragen, die schon bei Ihnen liegen, bleiben bei Ihnen; Ihr nächstes Angebot oder Ihre nächste Auszahlung darauf wartet, bis der Verkäufer die neue Liste erfüllt (open_requests_not_meeting zählt sie).
| Name | Ort | Beschreibung |
|---|---|---|
country Pflicht | body | Das Land des Verkäufers, zwei Buchstaben. |
codes Pflicht | body | Dokument-Codes aus dem Katalog. |
note | body | Bis zu 500 Zeichen. |
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/settingsWas Ihre Schuldner vor einer Auszahlung unterschreiben müssen: die Stufe, die jeder Schuldner unterschreiben muss, bevor eine an Sie weitergeleitete Factoring-Anfrage ausgezahlt werden kann (receipt, dann acknowledgment, dann acceptance), ob nur von einem Anwalt freigegebene Erklärungstexte zählen, Ihre offenen Anfragen je Stufe, und für welche Stufen jedes anwendbare Recht Erklärungstexte hat, in welchen Sprachen.
curl -s "$BASE/v1/settings" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/settingsÄndern, was Ihre Schuldner unterschreiben müssen. Die Änderung gilt für Anfragen, die ab dann an Sie weitergeleitet werden; eine bereits weitergeleitete Anfrage behält ihre Stufe. reason wird in der Nachweiskette von Advanta festgehalten.
| Name | Ort | Beschreibung |
|---|---|---|
debtor_consent_level | body | receipt, acknowledgment oder acceptance. |
require_counsel_approved_texts | body | true, um nur von einem Anwalt freigegebene Erklärungstexte zu zählen. |
reason Pflicht | body | Warum, mindestens 8 Zeichen. |
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"}'Legen Sie als Standard und je Unternehmen fest, ob jeder Schuldner vor der Auszahlung benachrichtigt wird (offen) oder die Abtretungsanzeige vorbereitet und versandbereit gehalten wird (still), mit oder ohne Regress, und ob Sie die Bankdaten des Verkäufers anfordern. Danach legen Sie eine stille Anfrage offen, lesen ihre Abtretungsanzeigen und den Cashflow, den der Verkäufer mit Ihnen teilt, und verfolgen Ihre Regressforderungen.
/v1/programmeIhre Programmkonditionen: Ihr Standard, die Konditionen, die Sie für bestimmte Unternehmen festgelegt haben, die Unternehmen, für die Sie Konditionen festlegen können (mit einer an Sie weitergeleiteten Anfrage, und Ihre eigenen Kunden), und Ihre Factoring-Anfragen gezählt nach ihren Konditionen. Eine Anfrage übernimmt die Konditionen, die bei ihrer Weiterleitung an Sie gelten, und behält sie.
disclosure: announced (Standard): Jeder Schuldner wird benachrichtigt und bestätigt die Abtretung, bevor Sie auszahlen. confidential: Wird die Anfrage an Sie weitergeleitet, wird die Abtretungsanzeige an jeden Schuldner vorbereitet, mit ihrem Fingerabdruck (SHA-256) versehen und versandbereit gespeichert, und die Auszahlung wartet nicht auf den Schuldner. Vor der Auszahlung müssen alle blockierenden Rechnungsprüfungen bestanden sein, die Rechnungen aus der eigenen Buchhaltung des Verkäufers stammen (ERP, E-Rechnung oder SAF-T), jeder Schuldner eine aktuelle vorbereitete Anzeige haben, die Sie nennt, und eine Adresse, an die sie geht, und die Prüfung des Verkäufers freigegeben sein. Die Anzeigen werden versandt, wenn Sie die Anfrage offenlegen, und automatisch bei einer ausgezahlten Anfrage, wenn ein Auslöser eintritt, den Sie eingeschaltet haben: announce_overdue_days, announce_on_dispute, announce_on_kyc_lapse.
recourse: with (mit Regress) oder without (ohne Regress). recourse_days: Tage nach der Fälligkeit einer Rechnung, bis eine ausgezahlte, noch nicht beglichene Anfrage eine Forderung eröffnet (null: keine). bank_data: off, requested (der Verkäufer wird gebeten, sein Geschäftskonto für Sie zu verbinden, nur lesend und mit seiner Einwilligung) oder required (die Auszahlung wartet zusätzlich, bis das Konto, auf das Sie zahlen, als das eigene des Verkäufers bestätigt ist).
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/programmeIhren Standard (ohne seller_id) oder die Konditionen eines Unternehmens ändern. Nur die gesendeten Schlüssel ändern sich; {"reset": true} mit einer seller_id setzt dieses Unternehmen auf Ihren Standard zurück. Die Änderung gilt für Anfragen, die ab dann an Sie weitergeleitet werden; bereits weitergeleitete behalten ihre Konditionen. reason wird in der Nachweiskette von Advanta festgehalten.
| Name | Ort | Beschreibung |
|---|---|---|
seller_id | body | Die Id eines Unternehmens aus sellers in GET /v1/programme. Fehlt sie oder ist sie null: Ihr Standard. |
terms Pflicht | body | Die zu ändernden Konditionen: disclosure, recourse, recourse_days, announce_overdue_days, announce_on_dispute, announce_on_kyc_lapse, bank_data; oder reset. |
reason Pflicht | body | Warum, mindestens 8 Zeichen. |
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}/announceEine an Sie weitergeleitete stille Anfrage offenlegen: Sie wird offen, und die für sie vorbereiteten Abtretungsanzeigen gehen an ihre Schuldner, die sie dann wie in einem offenen Programm bestätigen. Möglich, solange die Anfrage offen, in Prüfung, mit gesendeten Konditionen, angenommen oder ausgezahlt ist. Es folgt ein Ereignis request.announced; sobald eine Anzeige versandt ist, bleibt die Anfrage offen.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id der Anfrage. |
reason Pflicht | body | Warum, mindestens 8 Zeichen. Wird in der Nachweiskette von Advanta festgehalten. |
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}/noticesDie Abtretungsanzeigen der Anfrage, eine je Schuldner, jede mit ihrem vorbereiteten Dokument, wenn es eines gibt: genau der Betreff und das HTML, die der Schuldner erhält, Sprache, anwendbares Recht und SHA-256. Für eine an Sie weitergeleitete Anfrage oder eine, bei der Sie schon gehandelt haben.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id der Anfrage. |
Das HTML enthält einen Platzhalter, ACK_LINK in doppelten geschweiften Klammern, an der Stelle des Bestätigungslinks des Schuldners; der Link enthält ein Geheimnis und wird nie gezeigt. current sagt, ob das Dokument noch zu den Rechnungen und dem Betrag der Anzeige passt.
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/notices" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/requests/{id}/cash-flowWas der Verkäufer von seinem Geschäftskonto mit Ihnen teilt, nur lesend und mit seiner Einwilligung, über einen zugelassenen Kontoinformationsdienst: die Verbindung, seine Konten (die letzten vier Zeichen jeder IBAN) und ihre Salden, zwölf Monate Umsätze je Monat und die Prüfung seines Auszahlungskontos. cash_flow ist null, solange der Verkäufer kein Konto für Sie verbunden hat.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id der Anfrage. |
bank_data_problems sagt, worauf die Auszahlung noch wartet, wenn Ihre Konditionen Bankdaten verlangen. payment_alerts sind die Zahlungen, die der Verkäufer von einem Schuldner dieser Anfrage erhalten hat, nachdem Sie sie zu stillen Konditionen ausgezahlt haben. Die Einwilligung eines Verkäufers gilt einem Finanzierer: Sie sehen nur, was er mit Ihnen teilt.
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/cash-flow" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/recourseIhre ausgezahlten Factoring-Anfragen nach Regressart (with, without, und not_recorded für vor dem 28. September 2026 weitergeleitete), die Forderungen gezählt nach Art und Status, und die Forderungen selbst, offene zuerst. Eine Forderung wird einmal je Anfrage eröffnet, wenn eine ausgezahlte Anfrage recourse_days nach der Fälligkeit einer Rechnung nicht beglichen ist: recourse, gegen den Verkäufer, über den ausgezahlten Betrag zuzüglich Ihrer Gebühren, abzüglich dessen, was Sie schon vereinnahmt haben; debtor_default, ohne Regress, für Ihr eigenes Inkasso und Ihre Versicherung.
| Name | Ort | Beschreibung |
|---|---|---|
status | query | open, settled, withdrawn oder written_off. Fehlt er: alle Forderungen. |
Der Verkäufer zahlt eine Regressforderung auf pay_to_iban zurück und gibt pay_reference an. Decken die Zahlungen, die Sie ab dann erfassen (eine Auszugszeile, die Sie bestätigen, oder die Entscheidung settle), claim_amount, ist die Forderung beglichen und die Anfrage wird als durch Regress beglichen geschlossen: Die Rechnungen gehen an den Verkäufer zurück, vom Schuldner weiterhin unbezahlt.
curl -s "$BASE/v1/recourse?status=open" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/recourse/{id}/closeEine offene Forderung von Ihnen schließen: Eine Regressforderung wird withdrawn (Sie verzichten darauf oder haben mit dem Verkäufer etwas anderes vereinbart), ein Zahlungsausfall des Schuldners wird written_off (an Ihr Inkasso oder Ihren Versicherer übergeben). reason wird in der Nachweiskette von Advanta festgehalten.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id der Forderung (claim_id). |
status Pflicht | body | withdrawn oder written_off. |
reason Pflicht | body | Warum, mindestens 8 Zeichen. |
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-dataIhr eigenes Inkassokonto, von Ihrem Administrator im Portal verbunden und auf dieselbe Weise gelesen: Seine Umsätze laufen durch denselben Abgleich wie POST /v1/statements, sodass Zahlungseingänge ohne Datei-Upload zu Ihren ausgezahlten Anfragen passen. Außerdem, wie viele Verkäufer ihr Konto mit Ihnen teilen, die Zahlungswarnungen zu Ihren Anfragen (die letzten 180 Tage) und die Kosten des Anbieters, die Ihnen zugerechnet werden, je Monat.
unit_price_eur und amount_eur sind null, bis der Preis des Anbieters feststeht.
curl -s "$BASE/v1/bank-data" \
-H "Authorization: Bearer $ADVANTA_KEY"Ihr Obligo je Schuldner und je Verkäufer, von der Plattform selbst durchgesetzt, mit Limits einzeln oder bis zu 2.000 auf einmal; wie ein Käufer seine Lieferanten bezahlt; und was Advanta über jeden Schuldner einer Anfrage weiß.
/v1/credit-limitsIhr Buch je Schuldner: Ihr Limit und was ausstehend, zugesagt, angeboten und noch verfügbar ist, in Euro.
Jeder Schuldner enthält debtor_key, debtor_name, debtor_country, limit_status, limit_amount, outstanding, committed, offered, available, overdue_count, oldest_overdue, frozen, decided_at und note.
curl -s "$BASE/v1/credit-limits" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/credit-limitsIhr Limit für einen Schuldner setzen oder ändern, oder den Schuldner ablehnen. Die Datenbank lehnt jedes spätere Angebot ab, das dieses Limit nicht tragen kann.
| Name | Ort | Beschreibung |
|---|---|---|
debtor_tax_id Pflicht | body | Die USt-IdNr. oder Steuernummer des Schuldners. |
debtor_country | body | ISO 3166 Alpha-2. |
debtor_name | body | Der Name des Schuldners. |
amount | body | Euro, 0 oder mehr. Pflicht für ein aktives Limit. |
status | body | active (Standard), refused oder suspended. |
note | body | Freitext. |
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/importBis zu 2.000 Limits für Schuldner in einem Aufruf laden: Ihr eigenes Buch oder die Limits Ihres Kreditversicherers. Jede Zeile wird genau so geprüft, wie PUT /v1/credit-limits ein Limit prüft, und einzeln beantwortet: Eine fehlerhafte Zeile hält die anderen nicht auf, und ein Schuldner, der zweimal im selben Aufruf vorkommt, wird beim zweiten Mal abgelehnt.
| Name | Ort | Beschreibung |
|---|---|---|
rows Pflicht | body | 1 bis 2.000 Zeilen, jede mit debtor_tax_id und, wie bei PUT /v1/credit-limits, debtor_country, debtor_name, amount, status und note. amount ist eine Zahl oder Ziffern mit Dezimalpunkt; Pflicht für ein aktives Limit. Auch eine bloße Liste von Zeilen, ohne das Objekt drumherum, wird angenommen (mit source import). |
source | body | import (Ihre eigenen Limits, Standard) oder insurer (die Limits Ihres Kreditversicherers). |
source_ref | body | Die Datei oder der Stapel, aus dem die Limits stammen, höchstens 200 Zeichen. |
Jedes geschriebene Limit hält seine Quelle und Referenz fest, am Limit und in seiner Historie. Die Antwort zählt received, written und refused und beantwortet jede Zeile mit row (ab 1 gezählt), debtor_tax_id und ok: Eine geschriebene Zeile ergänzt debtor_key, status und amount; eine abgelehnte Zeile nennt ihren error (invalid_amount, debtor_tax_id_required, duplicate_debtor, invalid_status, amount_required, invalid_country, row_invalid oder invalid_limit) und kann ein detail ergänzen.
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-limitsIhr Buch je Verkäufer, mit denselben Zahlen wie das Schuldnerbuch.
Jeder Verkäufer enthält seller_id, seller_name, seller_nif, seller_country und dieselben Limit- und Exposure-Felder wie ein Schuldner.
curl -s "$BASE/v1/seller-limits" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/seller-limitsIhr Limit für einen Verkäufer setzen oder ändern, oder den Verkäufer ablehnen.
| Name | Ort | Beschreibung |
|---|---|---|
seller_id Pflicht | body | Wie von GET /v1/seller-limits geliefert. |
amount | body | Euro, 0 oder mehr. |
status | body | active (Standard), refused oder suspended. |
note | body | Freitext. |
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-recordWie ein Käufer seine Lieferanten bezahlt, nur aggregiert, aus der Buchhaltung der mit Advanta verbundenen Lieferanten. Das Profil wird veröffentlicht, wenn mindestens drei Lieferanten den Käufer beobachten; sonst sagt status, warum, und jede Zahl ist null. Sie können es nur für einen Käufer lesen, der auf einer Anfrage in Ihrem Bereich oder auf Ihrer Schuldnerliste steht; ein Sandbox-Schlüssel liest das Profil der Demonstrationsebene.
| Name | Ort | Beschreibung |
|---|---|---|
tax_id Pflicht | query | Die USt-IdNr. oder Steuernummer des Käufers. |
country | query | ISO 3166 Alpha-2. |
Die Zahlen umfassen observers, invoice_count, avg_days_to_pay, median_days_to_pay, on_time_pct, den Zahlungsverzug (avg_settle_delay_days, median_settle_delay_days, p75_settle_delay_days, worst_settle_delay_days), offene und überfällige Anzahlen, window_from und refreshed_at. payer_record ist null, wenn es kein Profil gibt.
curl -s "$BASE/v1/payer-record?tax_id=A00000000&country=ES" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/requests/{id}/debtorsWas Advanta über jeden Schuldner einer an Sie weitergeleiteten Factoring-Anfrage weiß, oder einer, bei der Sie schon gehandelt haben: sein level bei Advanta seit level_since (notice: er kennt Advanta nur aus der Anzeige; account: er hat sein Zahlerkonto aktiviert; books: er hat seine Buchhaltung verbunden; buyer: er führt ein Käuferprogramm, und buyer_programme ist true), die eigene Historie des Verkäufers mit ihm, seine amtliche Zahlungsdauer, wenn er eine öffentliche Stelle ist, und Ihr Limit für ihn.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id der Anfrage. |
score ist der eigene Score des Schuldners (Klasse, 0 bis 100, wann und mit welcher Modellversion). Er wird nur angegeben, wenn der Schuldner seine Daten mit den Finanzierern teilt, die von ihm geschuldete Rechnungen finanzieren, auf Stufe books oder buyer steht und die Anfrage an Sie weitergeleitet ist (nicht eine, bei der Sie nur gehandelt haben); sonst ist er null. pair_history ist die Historie des Verkäufers mit diesem Schuldner über 36 Monate, nach den Regeln des Zahlungsprofils: nur echte Rechnungen, und Verspätung nur gegenüber Fälligkeiten, die auf dem Dokument oder im ERP stehen. public_payment_period ist die jüngste amtliche durchschnittliche Zahlungsdauer einer öffentlichen Stelle (DGAL für portugiesische Gemeinden, Hacienda für spanische Gebietskörperschaften). credit_limit ist Ihr Limit für den Schuldner, seine Herkunft (source, source_ref) und was davon genutzt ist (exposure: ausstehend plus zugesagt plus angeboten, in Euro).
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/debtors" \
-H "Authorization: Bearer $ADVANTA_KEY"Senden Sie den Auszug Ihres Inkassokontos, und jede Gutschrift wird mit Ihren ausgezahlten Anfragen abgeglichen; jeden Treffer bestätigen Sie im Portal. Um eine Zahlung selbst zu erfassen, senden Sie die Entscheidung settle.
/v1/statementsDen Auszug Ihres Inkassokontos zum Abgleich senden: eine CAMT.053- (XML) oder CSV-Datei, höchstens 4 MiB und 5.000 Buchungen. Jede Gutschrift wird mit Ihren eigenen ausgezahlten Anfragen abgeglichen, zuerst über die Referenz, die der Schuldner angegeben hat. Nichts wird verbucht, bevor Sie einen Treffer im Portal bestätigen. Dieselbe Datei wird kein zweites Mal angenommen, erkannt an ihrem SHA-256.
| Name | Ort | Beschreibung |
|---|---|---|
file_name | query | Der Dateiname (optional). |
kind | query | camt053 oder csv; wird erkannt, wenn er fehlt. |
| die Datei Pflicht | body | Die unveränderte Datei, gesendet als application/xml oder text/csv; oder 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.xmlBringen Sie Ihre eigenen Kunden mit: ein eigener offener Link, ein Link je Vermittler, dazu die Einladungen und der Bericht, die zeigen, wer über welchen Weg kam. Die Unternehmen, die Sie mitbringen, werden nur an Sie weitergeleitet.
/v1/client-linksIhr eigener offener Link (prescriber_id null) und der aktuelle Link jedes Vermittlers, mit seinem state (active, disabled oder expired) und seiner url, solange er funktioniert.
| Name | Ort | Beschreibung |
|---|---|---|
lang | query | Die Sprache der Seite, die jeder Link öffnet: pt, es, en, fr, de, it oder nl, an seine url angehängt. |
Ein Unternehmen, das einen Link öffnet, gibt Namen, Steuernummer, Land und E-Mail an und erhält Ihre Einladung per E-Mail. Nimmt es sie an, wird es Ihr Kunde: Seine Anfragen gehen nur an Sie, und seine Herkunft (der Link, der Vermittler, das Datum) wird erfasst. Das Öffnen eines Links legt nie von sich aus ein Konto an.
Jeder Link trägt außerdem arrivals (die Unternehmen, die über ihn zum ersten Mal zu Ihnen kamen) und claims_last_day (Registrierungen über ihn in den letzten 24 Stunden; ein Link nimmt höchstens 20 pro Stunde und 100 pro Tag an).
curl -s "$BASE/v1/client-links?lang=es" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/client-linksIhren eigenen offenen Link ausstellen, oder mit prescriber_id den eines Vermittlers. Je Inhaber gibt es einen funktionierenden Link: Solange einer funktioniert, senden Sie replace: true, um ihn zu ersetzen (der alte funktioniert sofort nicht mehr); sonst 409 link_exists. Gespeichert wird nur der SHA-256 des Link-Tokens, und die Ausstellung wird in der Nachweiskette von Advanta festgehalten.
| Name | Ort | Beschreibung |
|---|---|---|
prescriber_id | body | Einer Ihrer aktiven Vermittler; weglassen oder null senden für Ihren eigenen Link. |
expires_at | body | Optional: zwischen einer Stunde und drei Jahren ab jetzt. |
replace | body | true, um einen noch funktionierenden Link zu ersetzen. Standard false. |
reason | body | Der Grund, bis zu 200 Zeichen. Wird am ersetzten Link und in der Nachweiskette festgehalten. |
lang | body | Die Sprache der Seite, die der Link öffnet, an seine url angehängt. |
Ein mit einem Sandbox-Schlüssel ausgestellter Link erzeugt nur Testeinladungen, und der Schlüssel braucht decisions:write: Die Links des Demonstrations-Finanzierers teilen sich alle Demonstrationen.
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}/disableEinen Link abschalten. Er funktioniert sofort nicht mehr; Unternehmen, die bereits darüber kamen, behalten ihre Herkunft. Einen schon abgeschalteten Link abzuschalten ändert nichts (changed ist false). Einen neuen stellen Sie mit POST /v1/client-links aus.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id des Links, aus GET /v1/client-links. |
reason | body | Der Grund, bis zu 200 Zeichen. |
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/prescribersIhre Vermittler, die Personen und Kanzleien, die Ihnen Kunden bringen (Steuerberater, Berater, Makler), aktive zuerst, jeder mit seinem aktuellen Link und der Zahl der Unternehmen, die darüber kamen. Sie gehören Ihnen und sind keine Partner von Advanta. Dieselbe Liste wie die Seite Kunden in Ihrem Portal.
| Name | Ort | Beschreibung |
|---|---|---|
lang | query | Die Sprache der Seite, die jeder Link öffnet: pt, es, en, fr, de, it oder nl, an seine url angehängt. |
Ein Sandbox-Schlüssel liest die Vermittler des Demonstrations-Finanzierers, die sich alle Demonstrationen teilen.
curl -s "$BASE/v1/prescribers?lang=es" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/prescribersEinen Vermittler anlegen. Sein eigener offener Link wird mit ihm ausgestellt, in prescriber.link.url. Name und E-Mail bleiben außerhalb der Nachweiskette von Advanta: Dort stehen nur ihre Hashes.
| Name | Ort | Beschreibung |
|---|---|---|
name Pflicht | body | 2 bis 120 Zeichen, eindeutig unter Ihren aktiven Vermittlern. |
email | body | Optional. Ein Sandbox-Finanzierer erfasst nur reservierte Adressen (auf .example, .invalid, .test oder .demo). |
notes | body | Optional, bis zu 1.000 Zeichen. |
lang | body | Die Sprache der Seite, die sein Link öffnet, an seine url angehängt. |
Mit einem Sandbox-Schlüssel ändert das gemeinsam genutzte Demonstrationsdaten, deshalb braucht der Schlüssel decisions:write.
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}/disableEinen Vermittler abschalten. Sein Link funktioniert sofort nicht mehr; die Unternehmen, die er gebracht hat, bleiben ihm zugeordnet. Einen schon abgeschalteten Vermittler abzuschalten ändert nichts (changed ist false). Wird in der Nachweiskette von Advanta festgehalten.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id des Vermittlers. |
reason | body | Der Grund, bis zu 200 Zeichen. |
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/reportWas Ihnen jeder Vermittler gebracht hat: eine Gruppe je Vermittler, dann Ihr eigener Link (own_link), Ihre namentlichen Einladungen (named) und Ihre Onboarding-Links (api). Je Gruppe und je Unternehmen: wann es ankam, wann sein Konto eröffnet wurde (joined), wann seine Unternehmensprüfung genehmigt wurde (onboarded), die an Sie weitergeleiteten Anfragen, der angefragte und der finanzierte Betrag. Dieselben Zahlen wie in Ihrem Portal.
Ein Unternehmen zählt einmal, für den, der es Ihnen zuerst gebracht hat. Der finanzierte Betrag ist die Auszahlung (sonst der Gesamtbetrag) ausgezahlter oder beglichener Anfragen, in Euro; totals summiert alle Gruppen. Nur Ihre Daten und nur Unternehmen auf Ihrer Datenebene: Ein Sandbox-Schlüssel sieht nicht, was andere Sandbox-Schlüssel über die API angelegt haben.
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-invitationsAlle Ihre Einladungen, die neuesten zuerst: über einen Link, namentlich im Portal oder mit einem Onboarding-Link. Jede nennt, wie das Unternehmen kam (via: link, named oder api), gegebenenfalls den Vermittler, der es brachte, ihren state (pending, accepted, revoked oder expired), das Unternehmen, den Kontakt und die Daten.
| Name | Ort | Beschreibung |
|---|---|---|
limit | query | 1 bis 500, Standard 200. |
Nur Ihre eigene Datenebene. Ein Sandbox-Schlüssel sieht die Einladungen anderer Sandbox-Schlüssel nicht.
curl -s "$BASE/v1/client-invitations?limit=50" \
-H "Authorization: Bearer $ADVANTA_KEY"Jeden Morgen die Rechnungen Ihrer eigenen Kunden, die über Nacht nach Ihren Regeln finanzierbar wurden, und was sich bei denen geändert hat, die Ihnen gezeigt wurden. Der Webhook opportunities.daily sagt, wann es etwas zu lesen gibt.
/v1/opportunitiesDie Übersicht eines Tages, aus Ihren eigenen Kunden (den Unternehmen, deren Hausfinanzierer Sie sind), die Ihnen erlauben, ihre Rechnungen zu sehen. Jeden Morgen gegen 06:30 Uhr Madrider Zeit, nach der nächtlichen Vorqualifizierung, listet Advanta die Rechnungen, die seit der vorigen Übersicht nach Ihren Regeln finanzierbar wurden (kind new), und was sich bei denen geändert hat, die Ihnen schon gezeigt wurden: paid, disputed (der Kunde hat erfasst, dass sein Schuldner sie bestreitet) oder no_longer_eligible.
| Name | Ort | Beschreibung |
|---|---|---|
date | query | Der Tag der Übersicht, YYYY-MM-DD (Madrider Zeit). Fehlt er: die jüngste. Ein Tag ohne Übersicht antwortet mit date null und keinen Zeilen. |
Eine Zeile enthält die Rechnung, den Schuldner mit seiner Steuernummer, den noch offenen Betrag, die Fälligkeit und den Kunden mit Branche (NACE-Abschnitt), Klasse und Größenklasse; zuerst die neuen Zeilen, dann die Änderungen. no_longer_eligible hat einen reason: requested (der Kunde hat ihre Finanzierung beantragt), cancelled, removed (nicht mehr in den Büchern des Kunden), left_programme, not_shared (der Kunde teilt nicht mehr) oder rules (sie erfüllt Ihre Regeln nicht mehr).
digest enthält die Summen: wie viele Kunden teilen und wie viele noch nicht, was heute finanzierbar ist, was neu ist und was sich geändert hat. stale ist true, wenn der nächtliche Lauf nicht fertig wurde: An diesem Morgen wurde nichts verglichen. Eine Übersicht ist eine von der Datenbank berechnete Liste, kein Angebot: Eine Anfrage wird bei ihrer Stellung erneut geprüft, und Sie entscheiden wie immer. Der Webhook opportunities.daily sagt, wann eine Übersicht mit Inhalt bereitsteht.
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" }
}
]
}Registrieren Sie die Endpunkte, die die Webhooks empfangen, rotieren Sie ihre Secrets, senden Sie einen Test und lesen Sie das Zustellprotokoll.
/v1/webhooksIhre aktiven Endpunkte, ohne ihre Secrets, und die Ereignistypen, die Sie abonnieren können. Ein Sandbox-Schlüssel sieht nur die Endpunkte, die er angelegt hat.
curl -s "$BASE/v1/webhooks" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/webhooksEinen Endpunkt registrieren. Die Antwort enthält sein Signatur-Secret, das nicht noch einmal angezeigt wird.
| Name | Ort | Beschreibung |
|---|---|---|
url Pflicht | body | https auf einem öffentlichen Hostnamen, Port 443, ohne Benutzername oder Passwort; höchstens 2.048 Zeichen. Private, Loopback- und Link-Local-Adressen werden abgelehnt, und Weiterleitungen werden nie verfolgt. |
events | body | Eine Liste von Ereignistypen, oder ["*"] für alle (Standard). |
description | body | Bis zu 200 Zeichen. |
Höchstens 10 aktive Endpunkte.
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}Einen Endpunkt stoppen. Noch ausstehende Zustellungen werden storniert und seine Secrets gelöscht.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id des Endpunkts. |
curl -s -X DELETE "$BASE/v1/webhooks/$WEBHOOK_ID" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/webhooks/{id}/rotate-secretEin neues Signatur-Secret, einmal angezeigt. Das vorherige Secret signiert weiter, als zweites v1 im Header, für keep_previous_hours, damit Sie ohne Ereignisverlust wechseln können.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id des Endpunkts. |
keep_previous_hours | body | 0 bis 72, Standard 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}/testEin webhook.test-Ereignis für diesen Endpunkt einreihen. Der nächste Lauf des Dispatchers stellt es zu, in etwa einer Minute.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id des Endpunkts. |
curl -s -X POST "$BASE/v1/webhooks/$WEBHOOK_ID/test" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/webhooks/{id}/deliveriesDas Zustellprotokoll eines Endpunkts, neueste zuerst: Status (pending, delivered, failed oder cancelled), Versuche, Antwortcode, letzter Fehler, nächster Versuch und der SHA-256 des exakt gesendeten Bodys.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id des Endpunkts. |
limit | query | 1 bis 200, Standard 50. |
curl -s "$BASE/v1/webhooks/$WEBHOOK_ID/deliveries?limit=20" \
-H "Authorization: Bearer $ADVANTA_KEY"Geben Sie einem Lieferanten aus Ihrem eigenen Produkt einen einmal nutzbaren Onboarding-Link von Advanta; der Lieferant kommt mit einem signierten Status zu Ihnen zurück, wenn er fertig ist.
/v1/onboarding-linksEin einmal nutzbarer Onboarding-Link für einen Ihrer Lieferanten, Ihnen zugeordnet. Advanta sendet keine E-Mail: Sie geben die url an Ihren Lieferanten. Hat der Lieferant seine Unternehmensprüfung eingereicht, erhalten Sie onboarding.completed, und der Lieferant wird mit einem signierten Status zu Ihrer return_url zurückgeschickt.
| Name | Ort | Beschreibung |
|---|---|---|
company_vat Pflicht | body | Die USt-IdNr. oder Steuernummer des Lieferanten, mit oder ohne Länderpräfix. |
country Pflicht | body | ISO 3166 Alpha-2. |
contact_email Pflicht | body | Die E-Mail des Ansprechpartners beim Lieferanten. |
return_url Pflicht | body | https, bis zu 2.048 Zeichen, auf einem Origin aus Ihrer Liste der Rücksprung-Origins. Diese Liste wird in den Portaleinstellungen oder von Advanta gepflegt, nie über diese API. |
company_name | body | 2 bis 200 Zeichen. Kann bei einer EU-USt-IdNr. entfallen, die VIES benennen kann. |
contact_name | body | Bis zu 120 Zeichen. |
metadata | body | Ihre eigenen Schlüssel und Werte: höchstens 20 Schlüssel, Werte Text, Zahl, true, false oder null, 2 KB JSON. Zurückgegeben am Link und in onboarding.completed. |
locale | body | Die Sprache des Onboardings: pt, es, en, fr, de, it oder nl. |
valid_days | body | 1 bis 30, Standard 14. |
Die Antwort enthält return_secret (ors_ gefolgt von 64 Hexadezimalzeichen), nur einmal angezeigt: Speichern Sie es sofort. Gespeichert wird nur der SHA-256 des Link-Tokens. Ein mit einem Sandbox-Schlüssel erstellter Link erfasst den Lieferanten als Testunternehmen auf der Demonstrationsebene.
Kommt der Lieferant zurück, trägt die return_url advanta_onboarding (die Id des Links), advanta_status (completed), advanta_ts (Unix-Sekunden) und advanta_sig: den hexadezimalen HMAC-SHA256 von <advanta_onboarding>.<advanta_status>.<advanta_ts>, mit Ihrem return_secret als Schlüssel. Prüfen Sie ihn, bevor Ihre Seite dem Status vertraut, und lehnen Sie einen Rücksprung ab, der mehr als 600 Sekunden von Ihrer Uhr abweicht; das letzte Beispiel unten tut beides.
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-linksIhre Onboarding-Links, die neuesten zuerst, jeder mit seinem status: pending, account_created, completed, expired oder revoked. Ein Sandbox-Schlüssel sieht die Links, die er erstellt hat.
| Name | Ort | Beschreibung |
|---|---|---|
limit | query | 1 bis 200, Standard 50. |
curl -s "$BASE/v1/onboarding-links?limit=20" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/onboarding-links/{id}Ein Onboarding-Link und wo der Lieferant steht. Ist er abgeschlossen, ist seller_id die Id, die GET /v1/seller-limits verwendet.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Id des Links. |
curl -s "$BASE/v1/onboarding-links/$ONBOARDING_ID" \
-H "Authorization: Bearer $ADVANTA_KEY"Nehmen Sie alles mit, was Sie bei Advanta sehen können, wann Sie wollen, ohne zu fragen: Ihr Ausstiegsrecht (DORA Art. 28 Abs. 8 und Art. 30 Abs. 3 Buchst. f). Ein ZIP mit je einer CSV- und einer JSON-Lines-Datei pro Entität, schema.json, manifest.json mit dem SHA-256 jeder Datei, einem README in Ihrer Sprache und verify.py.
/v1/exportsStartet einen Export von allem, was Ihr Finanzierer sehen kann: Anfragen und ihr Verlauf, Angebote, Rechnungen mit ihrer Prüfung, Verkäufer (Unternehmensdaten, die KYC-Zusammenfassung, die Sie sehen dürfen, die Prüfung des Vertreters), Schuldner, Anzeigen mit den Antworten der Schuldner und den Daten der Zertifikate, die Einträge der Nachweiskette zu Ihren Geschäften mit den Hashes und Tageswurzeln zu ihrer Prüfung, Zahlungseingänge und Kontoauszüge, Ablehnungen durch die Kontrollen, Ihre Regeln und Limits, Ihr Team, Webhook-Endpunkte (nie ein Geheimnis), API-Schlüssel (nie ein Schlüssel), Ihr Prüfprotokoll und Ihre Dokumente. Er wird im Hintergrund erstellt, meist in weniger als einer Minute; export.ready meldet, wann.
| Name | Ort | Beschreibung |
|---|---|---|
lang | body | Die Sprache des README: pt, es, en, fr, de, it oder nl (Standard en). |
Nur ein Produktionsschlüssel: Ein Sandbox-Schlüssel erhält 403 export_live_key_required (der Demonstrations-Finanzierer wird geteilt). Ein Export zur Zeit, höchstens 10 in 24 Stunden. Derselbe Export steht auf der Seite Export des Portals, unter den Einstellungen.
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/exportsIhre Exporte, aus dem Portal und der API, die neuesten zuerst, mit Status, Größe und manifest_sha256.
| Name | Ort | Beschreibung |
|---|---|---|
limit | query | 1 bis 200, Standard 50. |
curl -s "$BASE/v1/exports?limit=20" \
-H "Authorization: Bearer $ADVANTA_KEY"/v1/exports/{id}Ein Export. Während er erstellt wird: status queued oder running, mit progress. Sobald ready, und 24 Stunden lang: files, jeder Teil mit einem Link, der höchstens eine Stunde gilt (nie über diese 24 Stunden hinaus). Fragen Sie erneut für neue Links; jeder Aufruf, der Links liefert, wird festgehalten. Nach 24 Stunden werden die Dateien gelöscht, der Datensatz bleibt.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Export-ID, aus POST /v1/exports oder GET /v1/exports. |
manifest_sha256 ist der SHA-256 von manifest.json, ohne dieses Feld, mit sortierten Schlüsseln und ohne Leerzeichen geschrieben. Advanta hat denselben Wert in der Nachweiskette festgehalten (Eintrag export.ready); verify.py berechnet ihn neu und prüft jede Datei und die Nachweiseinträge.
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}/documentsWenn die Dokumente zu groß waren, um sie aufzunehmen (documents_mode links): jedes Dokument des Exports mit einem Link, der 15 Minuten gilt, seitenweise. Die Liste wird bei der Anfrage berechnet: Ein Dokument, das Sie nicht mehr lesen dürfen, steht nicht darin.
| Name | Ort | Beschreibung |
|---|---|---|
id Pflicht | path | Die Export-ID. |
after | query | Das next_after der vorigen Seite. |
limit | query | 1 bis 200, Standard 100. |
curl -s "$BASE/v1/exports/5e1f0a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b/documents?limit=100" \
-H "Authorization: Bearer $ADVANTA_KEY"Registrieren Sie einen HTTPS-Endpunkt, und Advanta sendet ihm einen signierten POST, wenn etwas passiert, das Sie betrifft: bei einer an Sie weitergeleiteten Anfrage oder ihrem Verkäufer, oder bei einem Onboarding-Link, den Sie erstellt haben. Jeder Endpunkt abonniert die Ereignistypen, die er braucht. Jede Zustellung ist signiert und wird bei einem Fehlschlag 24 Stunden lang wiederholt.
| Ereignis | Wann | data |
|---|---|---|
request.routed | Das Operations-Team von Advanta hat eine Anfrage an Sie weitergeleitet. Sie können sie jetzt lesen und entscheiden. | request_id, request_ref, type, status, total_amount, currency, routed_at |
request.unrouted | Eine an Sie weitergeleitete Anfrage wurde anderswohin weitergeleitet oder zurückgezogen. Sie können nicht mehr darauf handeln. | request_id, request_ref, unrouted_at |
offer.accepted | Ihr Angebot wurde angenommen (request_status ist approved, sobald der Verkäufer angenommen hat). Sie können auszahlen. | offer_id, request_id, request_ref, request_status, rate, advance_pct, days, accepted_at |
notice.acknowledged | Ein Schuldner hat die Abtretungsanzeige bestätigt. Ein Ereignis je Schuldner; channel ist online oder offline. | notice_id, request_id, request_ref, debtor_name, debtor_tax_id, invoice_count, total_amount, channel, decided_at |
notice.disputed | Ein Schuldner hat die Abtretungsanzeige zurückgewiesen. Ein Ereignis je Schuldner. | Die Felder von notice.acknowledged, dazu reason: die Worte des Schuldners, höchstens 500 Zeichen. |
request.funded | Eine an Sie weitergeleitete Anfrage wurde ausgezahlt. | Die Anfragefelder von request.routed, dazu funded_at und advance_amount. |
settlement.recorded | Ein Zahlungseingang zu einer ausgezahlten Anfrage wurde erfasst, teilweise oder abschließend: Die Zahlung, die die Anfrage begleicht, hat final true. | settlement_id, request_id, request_ref, amount, received_at, reference, received_total, request_total, outstanding, final, request_status |
seller.documents_expiring | Ein befristetes Dokument (etwa eine Unbedenklichkeitsbescheinigung von Finanzamt oder Sozialversicherung) eines Verkäufers mit einer offenen oder ausgezahlten, an Sie weitergeleiteten Anfrage läuft in 30 Tagen, in 7 Tagen oder heute ab. Täglich geprüft; threshold_days ist 30, 7 oder 0. | seller_id, company_name, company_tax_id, document_id, document_type, valid_until, days_left, threshold_days, request_ids |
dispute.opened | Ein Schuldner hat Rechnungen einer an Sie weitergeleiteten Anfrage beanstandet, nach der Annahme oder der Auszahlung. reason ist goods_not_received, defective, amount_incorrect, already_paid, not_our_invoice oder other; channel ist cession_page, letter oder 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 | Das Operations-Team von Advanta hat eine Beanstandung abgeschlossen; status ist resolved_for_debtor, resolved_for_seller oder withdrawn. | Die Felder von dispute.opened, mit ihrem status, dazu resolved_at und resolution_note. |
onboarding.completed | Ein Lieferant, den Sie mit einem Onboarding-Link eingeladen haben, hat seine Unternehmensprüfung eingereicht. status ist completed; metadata sind Ihre Daten, so wie Sie sie gesendet haben. Bei einem mit einem Sandbox-Schlüssel erstellten Link erhalten es nur die Endpunkte dieses Schlüssels. | onboarding_link_id, status, company_name, company_tax_id, country, seller_id, account_created_at, completed_at, verification_status, metadata |
client.joined | Ein Unternehmen, das Sie eingeladen haben (namentlich, über Ihren offenen Link, den Link eines Vermittlers oder die API), hat die Einladung angenommen und gehört nun nur Ihnen: seine Anfragen erreichen nur Sie. origin sagt, wie es kam (named, open_link, prescriber oder api), mit dem Vermittler, wenn es einen gibt. | 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 | Ein Export, den Sie angefordert haben (Portal oder API), ist fertig: Laden Sie ihn innerhalb von 24 Stunden mit GET /v1/exports/{id} herunter. Er trägt seinen manifest_sha256, nie einen Link. | export_id, status, requested_via, manifest_sha256, size_bytes, file_count, documents_mode, volumes, completed_at, expires_at |
request.announced | Eine an Sie weitergeleitete stille Anfrage wurde offengelegt: von Ihnen, vom Advanta-Betrieb oder durch einen Auslöser, den Sie eingeschaltet haben (trigger ist manual, overdue, dispute oder kyc_lapsed). Ihre vorbereiteten Anzeigen werden versandt; notices listet jede mit dem SHA-256 ihres Dokuments. | request_id, request_ref, trigger, reason, status, notices, announced_at |
recourse.opened | Eine ausgezahlte Anfrage von Ihnen ist recourse_days nach der Fälligkeit einer Rechnung nicht beglichen: eine Regressforderung gegen den Verkäufer (kind recourse) oder ein Zahlungsausfall des Schuldners (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 | Eine Forderung wurde beglichen: durch die Zahlungen, die Sie seit ihrer Eröffnung erfasst haben (via statement oder manual; die Anfrage wird als durch Regress beglichen geschlossen), oder weil die Anfrage auf dem üblichen Weg beglichen wurde (via request_settled, ohne paid). | claim_id, request_id, request_ref, kind, claim_amount, paid, via, request_closed |
payment.reached_seller | Auf einem Konto, das der Verkäufer mit Ihnen teilt, ist eine Zahlung eines Schuldners einer Anfrage eingegangen, die Sie zu stillen Konditionen ausgezahlt haben: Ihre Referenz enthält die Nummer einer finanzierten Rechnung (match_rule invoice_reference), oder Zahler und Betrag passen (payer_and_amount). | alert_id, request_id, invoice_ids, payer_name, payer_iban, amount, currency, booking_date, match_rule, confidence |
opportunities.daily | Die Übersicht des Morgens hat Inhalt: Rechnungen Ihrer eigenen Kunden, die seit der vorigen Übersicht finanzierbar wurden, oder eine Änderung bei denen, die Ihnen gezeigt wurden. Nur eine Zusammenfassung, Anzahlen und Summen, nie eine Rechnung, ein Schuldner oder ein Kunde: Lesen Sie die Zeilen mit GET /v1/opportunities?date= (lines). Höchstens eines pro Tag; keines an einem Tag ohne Neues und ohne Änderung. | 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 | Ein amtliches Blatt (das BORME für spanische Gesellschaften, Citius für portugiesische) hat einen Akt veröffentlicht, der einen Schuldner einer von Ihnen ausgezahlten Anfrage für neue Finanzierung sperrt: Insolvenz eröffnet oder im Gang, Liquidation, Insolvenz mangels Masse beendet, Auflösung, Erlöschen, oder das Registerblatt von der Steuerbehörde oder nach einer Insolvenz geschlossen. Solange er gilt, gehen kein neues Angebot und keine neue Auszahlung an die Rechnungen dieses Schuldners. Ein Ereignis je Anfrage und je Wechsel zu gesperrt. Es ist, was das Blatt veröffentlicht hat, zu Ihrer Prüfung, keine rechtliche Schlussfolgerung; überwacht werden nur Unternehmen in Spanien und Portugal. | request_id, request_ref, debtor (country, tax_id, name), status, note, events (kind, published_on, source, url), detected_at |
pre_offer.accepted | Ein Kunde hat die Finanzierung der Rechnungen eines Vorabangebots beantragt, das Sie ihm aus Ihren Morgen-Opportunities gesendet haben: Sein Antrag, mit allen üblichen Prüfungen gestellt, trägt das Vorabangebot und kommt wie immer zu Ihnen (request.routed), und Ihre Kreditregel bereitet Ihr Angebot aus Ihrer Preistabelle vor. terms ist, was Ihre Tabelle beim Senden ergab, unverbindlich: Der Preis ist Ihrer, Advanta nennt keinen. Einmal pro Vorabangebot. | 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 | Das Testereignis, das Sie mit POST /v1/webhooks/{id}/test angefordert haben. |
Jede Zustellung ist ein POST mit JSON-Body, Byte für Byte so gesendet, wie er gespeichert ist (sein SHA-256 steht im Zustellprotokoll), mit drei eigenen Headern:
Advanta-Signature: t=<unix seconds>,v1=<hex>, siehe Signaturen prüfen.Advanta-Event-Id: die Id des Ereignisses, auch id im Body.Advanta-Event-Type: der Ereignistyp, auch type im 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
}
}| Feld | Bedeutung |
|---|---|
id | Die Id des Ereignisses, dieselbe wie Advanta-Event-Id. |
object | Immer event. |
type | Einer der Ereignistypen oben. |
api_version | Die API-Revision, in der das Ereignis geschrieben ist. |
created | Wann das Ereignis erzeugt wurde, in Unix-Sekunden. |
environment | live, sandbox oder unclassified, wie in GET /v1/me. |
data | Die Felder des Ereignisses, oben aufgeführt. |
2xx, und das Ereignis gilt als zugestellt. Jede andere Antwort, keine Antwort innerhalb von 10 Sekunden oder eine Weiterleitung ist ein Fehlschlag; Weiterleitungen werden nie verfolgt.failed markiert und bleibt im Zustellprotokoll.Advanta-Event-Id-Werte und ignorieren Sie eine Wiederholung.GET /v1/webhooks/{id}/deliveries zeigt Status, Versuche, Antwortcode, letzten Fehler und nächsten Versuch jeder Zustellung. POST /v1/webhooks/{id}/test sendet ein webhook.test-Ereignis, wenn Sie Ihren Endpunkt prüfen wollen.https auf einem öffentlichen Hostnamen, auf Port 443, ohne Benutzername oder Passwort. Private, Loopback- und Link-Local-Adressen werden abgelehnt.["*"] für alle (Standard).whsec_ gefolgt von 64 Hexadezimalzeichen) wird nur einmal zurückgegeben: beim Anlegen des Endpunkts und erneut bei jeder Rotation. Bewahren Sie es auf wie ein Passwort.POST /v1/webhooks/{id}/rotate-secret auf. Das vorherige Secret signiert weiter, als zweites v1 im Header, für keep_previous_hours (0 bis 72, Standard 24). Spielen Sie das neue Secret in diesem Zeitraum ein, und kein Ereignis geht verloren.Jede Zustellung trägt Advanta-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256>. Prüfen Sie sie, bevor Sie dem Body vertrauen:
<t>.<raw body>, mit dem Endpunkt-Secret als Schlüssel (die ganze Zeichenkette whsec_…, als UTF-8), und kodieren Sie ihn hexadezimal.v1 im Header übereinstimmt, verglichen in konstanter Zeit (nach einer Rotation gibt es zwei), und t höchstens 300 Sekunden von Ihrer Uhr abweicht. Sonst lehnen Sie sie ab.Eine abgelehnte Zustellung antwortet nicht mit 2xx, also wiederholt Advanta sie wie jeden anderen Fehlschlag.
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 "", 200Jeder Fehler ist JSON, mit einem stabilen code und einer message für Menschen. Entscheiden Sie nach dem Code, nie nach der Nachricht.
{
"error": {
"code": "not_routed_to_you",
"message": "This request is not assigned to your institution. Advanta operations routes requests."
}
}| Status | Codes | Bedeutung |
|---|---|---|
| 400 | reason_required | Eine Ablehnung ohne reason oder notes. |
| 401 | unauthorized, key_expired | unauthorized: Der Schlüssel fehlt, ist fehlerhaft, unbekannt, widerrufen oder inaktiv. key_expired: Der Schlüssel ist abgelaufen. |
| 403 | forbidden, not_your_request, export_live_key_required, not_routed_to_you, not_your_claim | forbidden: Dem Schlüssel fehlt der Scope, oder der Finanzierer ist nicht aktiv. not_your_request: ein Zahlungseingang von einem Finanzierer, der nicht der Finanzierer der Anfrage ist. export_live_key_required: Ein Sandbox-Schlüssel exportiert nicht. not_routed_to_you: Offenlegen einer Anfrage, die nicht an Sie weitergeleitet ist. not_your_claim: Schließen einer Regressforderung, die nicht zu einer Ihrer Anfragen gehört. |
| 404 | not_found | Keine für diesen Schlüssel sichtbare Ressource, oder eine unbekannte Route. |
| 405 | method_not_allowed | Die Methode wird auf diesem Pfad nicht unterstützt. |
| 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 | Ein Schreibzugriff, den die Anfrage nicht erlaubt: nicht an Sie weitergeleitet, falscher Status, über einem Ihrer Limits, eine noch nicht bestätigte Factoring-Anzeige, ein Schuldner außerhalb Ihrer Liste, ein verlangtes Dokument des Verkäufers fehlt oder ist nicht mehr gültig, oder eine Einwilligungsstufe, die sinken würde, nach der Antwort eines Schuldners kommt oder eine Anfrage betrifft, die kein Factoring oder nicht laufend ist. Außerdem ein bereits importierter Kontoauszug, mehr als 10 aktive Endpunkte, ein Vermittlername, den Sie schon verwenden, ein noch funktionierender Link (senden Sie replace: true) sowie ein Onboarding-Link für ein Unternehmen oder einen Kontakt mit bestehendem Konto oder offener Einladung, oder in einem Land, aus dem Advanta noch keine Verkäufer annimmt. Ein Export wird noch erstellt (export_in_progress, export_not_ready) oder ist fehlgeschlagen (export_failed). |
| 410 | export_expired | export_expired: Die Dateien des Exports konnten 24 Stunden lang heruntergeladen werden; starten Sie einen neuen Export. |
| 413 | file_too_large, too_many_lines, too_many_rows | Der Kontoauszug ist größer als 4 MiB oder hat mehr als 5.000 Buchungen, oder ein Limit-Import hat mehr als 2.000 Zeilen (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 | Ein Feld oder Parameter fehlt oder ist ungültig; der Code sagt, welches. (Eine Ablehnung ohne Grund ist 400 reason_required; eine Änderung von Einstellungen oder Stufe ohne Grund ist 422 reason_required.) Außerdem eine Konditionsänderung für ein Unternehmen außerhalb Ihres Programms (seller_not_in_programme), eine bereits offengelegte oder abgeschlossene Anfrage (already_announced, request_closed) und eine Regressforderung, die nicht mehr offen ist oder auf die falsche Art geschlossen wird (claim_closed, close_invalid). Abgelehnt werden auch ein Limit-Import ohne Zeilen (rows_required), mit einer source außer import oder insurer (invalid_source) oder mit einer source_ref, die kein Text oder länger als 200 Zeichen ist (source_ref_invalid, source_ref_too_long), sowie ein date der Chancen, das kein Kalendertag ist (invalid_date). |
| 429 | rate_limited, export_rate_limited | rate_limited: mehr Aufrufe als das Limit des Schlüssels (120 pro Minute und 3.000 pro Stunde, sofern Advanta für den Schlüssel kein anderes gesetzt hat) oder wiederholte Aufrufe mit einem unbekannten Schlüssel von derselben Adresse; senden Sie ihn nach Retry-After Sekunden erneut. export_rate_limited: höchstens 10 Exporte in 24 Stunden. |
| 500 | internal, query_failed, write_failed, ingest_failed | Bei Advanta ist etwas fehlgeschlagen. Später erneut versuchen. |
debtor_not_eligible_for_funderWenn Sie nur Käufer Ihrer Liste annehmen, antwortet ein Angebot auf eine Anfrage mit einem Schuldner außerhalb der Liste mit 409 und den blockierenden Schuldnern, jeweils mit einem 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 | Bedeutung |
|---|---|
not_listed | Der Schuldner steht nicht auf Ihrer Liste. |
refused | Ihr Limit für den Schuldner steht auf verweigert. |
suspended | Ihr Limit für den Schuldner ist ausgesetzt. |
no_tax_id | Einer Rechnung fehlt die Steuernummer des Käufers. |
invoice_missing | Eine Position der Anfrage hat keine Rechnung. |
no_invoices | Die Anfrage hat keine Rechnungen. |
documents_missing_for_funderWenn ein von Ihnen verlangtes Dokument des Verkäufers fehlt, ungeprüft oder nicht mehr gültig ist, antwortet ein Angebot oder eine Auszahlung mit 409 und den blockierenden Dokumenten, jeweils mit einem 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 | Bedeutung |
|---|---|
missing | Der Verkäufer hat das Dokument nicht eingereicht. |
unverified | Advanta hat es noch nicht geprüft. |
expired | Es ist an diesem Datum nicht mehr gültig. |
rejected | Advanta hat es zurückgewiesen. |
no_validity_date | Es hat kein Gültigkeitsdatum. |
not_in_catalogue | Der Code steht nicht im Katalog für das Land des Verkäufers. |
Der Pfad trägt die Hauptversion, /v1. Innerhalb von v1 können Felder und Ereignistypen hinzukommen: Ignorieren Sie, was Sie nicht kennen.
api_version, in GET /v1/me und in jedem Webhook-Ereignis, nennt die Revision, die Sie lesen: heute 2026-09-23.
Jeder Schlüssel darf 120 Aufrufe pro Minute und 3.000 pro Stunde machen, gezählt über alle Server von Advanta (das Operations-Team von Advanta kann für einen Schlüssel ein anderes Limit setzen). Ein Aufruf über dem Limit erhält 429 rate_limited, mit einem Header Retry-After in Sekunden und retry_after_seconds, limit und window_seconds im Fehler: Nichts von dem, was er verlangte, wurde ausgeführt, senden Sie ihn also nach dieser Zeit erneut. Wiederholte Aufrufe mit einem unbekannten oder fehlerhaften Schlüssel von derselben Adresse erhalten ebenfalls 429. GET /v1/health ist nicht begrenzt, und Exporte behalten ihr eigenes Limit (export_rate_limited).
Alles auf dieser Seite ist in openapi.yaml beschrieben (OpenAPI 3.1). Fragen, oder ein Schlüssel: diogo@advanta.pt.