Advanta / Banken und Finanzierer / Entwickler

Finanzierer-API von Advanta

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.

  • OpenAPI 3.1
  • Version 2026-09-23
  • JSON über HTTPS

Schnellstart

Eine einzige Basis-URL bedient Live- und Sandbox-Schlüssel gleichermaßen: Der Schlüssel entscheidet, was Sie sehen.

Basis-URL
https://bzsengbmlzzhztjfvcag.supabase.co/functions/v1/funder-api
Authentifizierung
Authorization: Bearer adv_fk_… bei jedem Aufruf: adv_fk_ gefolgt von 64 Hexadezimalzeichen.
Format
JSON in beide Richtungen. Ein Kontoauszug kann auch als unveränderte XML- oder CSV-Datei gesendet werden.

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.

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

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

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

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

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

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

GET /v1/me antwortet so:

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

Umgebungen und Sandbox

Es gibt eine einzige Basis-URL. Der Schlüssel entscheidet über die Umgebung, und GET /v1/me gibt sie in environment zurück.

environmentDer FinanziererWas der Schlüssel sieht
liveVon Advanta als real oder Pilot eingestuft.Nur echte Kunden.
sandboxEin Demonstrations-Finanzierer.Nur fiktive Unternehmen, auf der Demonstrationsebene.
unclassifiedVon Advanta noch nicht eingestuft.Keine Anfrage.

Eine Anfrage der anderen Ebene ist nie sichtbar, egal mit welchem Schlüssel.

Sandbox-Schlüssel

  • Advanta stellt einen Sandbox-Schlüssel für einen namentlich genannten Interessenten aus (key.prospect in GET /v1/me). Wie jeder Schlüssel wird er nur einmal angezeigt, und nur sein SHA-256 wird gespeichert.
  • Er läuft 1 bis 90 Tage nach der Ausstellung ab (key.expires_at); danach antwortet jeder Aufruf mit 401 key_expired. Advanta kann ihn außerdem jederzeit widerrufen.
  • Er sieht nur fiktive Unternehmen, auf der Demonstrationsebene. Diese Daten werden mit anderen Demonstrationen geteilt und neu aufgebaut, wenn das Szenario zurückgesetzt wird; rechnen Sie also mit Änderungen.
  • Er liest Anfragen, Einstellungen, Limits, das Zahlungsprofil und Ihre Kunden (Vermittler, Links, Einladungen und den Bericht) und verwaltet seine eigenen Webhook-Endpunkte und Onboarding-Links: Er sieht nur die, die er angelegt hat. Ein mit einem Sandbox-Schlüssel eingeladener Lieferant wird als Testunternehmen auf der Demonstrationsebene erfasst.
  • Er kann nur dann Entscheidungen treffen (anbieten, ablehnen, auszahlen, Zahlungseingang erfassen), Vermittler anlegen und Links ausstellen, wenn Advanta das für den Schlüssel freigeschaltet hat; dadurch kommt der Scope 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.

Authentifizierung und Scopes

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.

ScopeWas er erlaubt
requests:readAnfragen 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:readDie Limit-Bücher lesen (GET /v1/credit-limits, GET /v1/seller-limits) und das Zahlungsprofil.
limits:writeLimits setzen, ändern oder verweigern (PUT /v1/credit-limits, PUT /v1/seller-limits).
decisions:writeAnbieten, 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:writeEinen Kontoauszug senden (POST /v1/statements).
clients:writeIhre 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:writeWebhook-Endpunkte verwalten: anlegen, stoppen, Secret rotieren, einen Test senden sowie die Liste und die Zustellprotokolle lesen.
onboarding:writeOnboarding-Links für Ihre Lieferanten erstellen (POST /v1/onboarding-links) und lesen.
exports:writeAlle Ihre Daten exportieren (POST /v1/exports, GET /v1/exports, GET /v1/exports/{id} und seine Dokumente). Nur Produktionsschlüssel.

Endpunkte

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.

Ihr Schlüssel

Zu welchem Finanzierer ein Schlüssel gehört, seine Umgebung und seine Scopes. Beginnen Sie hier.

GET/v1/health

Ob die API läuft. Öffentlich: kein Schlüssel, keine Daten, kein Datenbankzugriff.

Scope
Keiner: öffentlich, ohne Schlüssel
Antwort
200{ status, api_version, time }
Fehler
Keine

Advanta ruft diese Route alle 5 Minuten ab; die Ergebnisse stehen auf der öffentlichen Statusseite.

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

GET/v1/me

Wer aufruft: der Schlüssel, sein Finanzierer, seine Umgebung und seine Scopes.

Scope
Jeder gültige Schlüssel
Antwort
200{ api_version, environment, funder, key }
Fehler
405method_not_allowed

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

Anfragen und Entscheidungen

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.

GET/v1/requests

Die 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.

NameOrtBeschreibung
statusqueryopen (Standard: pending, submitted, under_review, terms_sent, accepted, approved), all oder ein einzelner Status.
limitquery1 bis 200, Standard 50.
Scope
requests:read
Antwort
200{ funder, count, requests[] }
Fehler
Nur die allgemeinen (401, 403, 500).

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

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

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

GET/v1/requests/{id}

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.

NameOrtBeschreibung
id PflichtpathDie Id der Anfrage.
Scope
requests:read
Antwort
200{ request, debtor_consent[], receivables[], score, my_offer, risk }
Fehler
404not_found

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
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87" \
  -H "Authorization: Bearer $ADVANTA_KEY"

POST/v1/requests/{id}/decision

Konditionen anbieten, ablehnen, auszahlen oder einen Zahlungseingang erfassen. Die Anfrage muss an Sie weitergeleitet sein, sonst 409 not_routed_to_you.

NameOrtBeschreibung
id PflichtpathDie Id der Anfrage.

Der Body hat eine von vier Formen, gewählt über decision:

decisionFelderWirkung
offerrate (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.
declinereason 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.
fundvalue_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).
settleamount (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.
Scope
decisions:write
Antwort
201{ decision, request_id, offer_id, expires_at, status } (offer)
200{ decision, request_id, status } (decline)
200{ decision, request_id, status, funded_at } (fund)
200{ decision, request_id, settlement_id, status, received_total, request_total, outstanding } (settle)
Fehler
400reason_required
403not_your_request (nur bei settle: Sie sind nicht der Finanzierer der Anfrage)
404not_found
409not_routed_to_you, invalid_state, credit_limit, funding_gate_failed, funding_amount_mismatch, debtor_not_eligible_for_funder, documents_missing_for_funder
422invalid_terms, invalid_amount, invalid_received_at, invalid_funding_details, step_back_message_required, invalid_decision
curl
curl -s -X POST "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/decision" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"decision":"offer","rate":2.4,"advance_pct":90,"days":60,"valid_days":7,"notes":"Subject to the notice being acknowledged"}'
JavaScript
async function offer(requestId, terms) {
  const res = await fetch(`${BASE}/v1/requests/${requestId}/decision`, {
    method: 'POST',
    headers: { ...headers, 'Content-Type': 'application/json' },
    body: JSON.stringify({ decision: 'offer', ...terms }),
  });
  const body = await res.json();
  if (res.status === 201) return body; // { decision, request_id, offer_id, expires_at, status }
  const { code, message, debtors } = body.error;
  if (code === 'debtor_not_eligible_for_funder') {
    for (const d of debtors) console.warn(d.name ?? d.debtor_key, d.reason, d.invoices);
  }
  throw new Error(`${res.status} ${code}: ${message}`);
}

await offer('4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87', { rate: 2.4, advance_pct: 90, days: 60, valid_days: 7 });
Antwort · 201
{
  "decision": "offer",
  "request_id": "4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87",
  "offer_id": "7a9e3c1b-2d4f-4e6a-8b0c-5d1e2f3a4b5c",
  "expires_at": "2026-09-30T10:30:00Z",
  "status": "terms_sent"
}
Bodies für Ablehnen, Auszahlen und Zahlungseingang
{ "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" }

Dokumente und Regeln

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.

GET/v1/requests/{id}/documents

Die 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.

NameOrtBeschreibung
id PflichtpathDie Id der Anfrage.
Scope
requests:read
Antwort
200{ request_id, seller_country, today, required_now, snapshots[], current[] }
Fehler
404not_found

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
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/documents" \
  -H "Authorization: Bearer $ADVANTA_KEY"

GET/v1/required-documents

Die 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.

Scope
requests:read
Antwort
200{ funder, required, catalogue[] }
Fehler
Nur die allgemeinen (401, 403, 500).

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
curl -s "$BASE/v1/required-documents" \
  -H "Authorization: Bearer $ADVANTA_KEY"

PUT/v1/required-documents

Ihre 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).

NameOrtBeschreibung
country PflichtbodyDas Land des Verkäufers, zwei Buchstaben.
codes PflichtbodyDokument-Codes aus dem Katalog.
notebodyBis zu 500 Zeichen.
Scope
settings:write oder decisions:write
Antwort
200{ …required documents, changed, country, codes, open_requests_not_meeting }
Fehler
422body_required, country_invalid, codes_invalid, note_invalid, country_without_catalogue, document_code_unknown
curl
curl -s -X PUT "$BASE/v1/required-documents" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"country":"PT","codes":["cert_hacienda","cert_seguridad_social","cirbe"],"note":"Credit committee of 23 September"}'

GET/v1/settings

Was 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.

Scope
requests:read
Antwort
200{ funder, debtor_consent_level, require_counsel_approved_texts, open_requests_by_level, levels, levels_by_law, texts_counsel_approved }
Fehler
Nur die allgemeinen (401, 403, 500).
curl
curl -s "$BASE/v1/settings" \
  -H "Authorization: Bearer $ADVANTA_KEY"

PUT/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.

NameOrtBeschreibung
debtor_consent_levelbodyreceipt, acknowledgment oder acceptance.
require_counsel_approved_textsbodytrue, um nur von einem Anwalt freigegebene Erklärungstexte zu zählen.
reason PflichtbodyWarum, mindestens 8 Zeichen.
Scope
settings:write oder decisions:write
Antwort
200{ …settings, changed, open_requests_keep_their_level }
Fehler
422level_invalid, invalid_flag, reason_required
curl
curl -s -X PUT "$BASE/v1/settings" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"debtor_consent_level":"acknowledgment","reason":"Credit committee decision of 22 September"}'

Programmkonditionen und Regress

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.

GET/v1/programme

Ihre 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.

Scope
requests:read
Antwort
200{ funder, bank_id, default, companies[], sellers[], requests }
Fehler
Nur die allgemeinen (401, 403, 500).

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

PUT/v1/programme

Ihren 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.

NameOrtBeschreibung
seller_idbodyDie Id eines Unternehmens aus sellers in GET /v1/programme. Fehlt sie oder ist sie null: Ihr Standard.
terms PflichtbodyDie zu ändernden Konditionen: disclosure, recourse, recourse_days, announce_overdue_days, announce_on_dispute, announce_on_kyc_lapse, bank_data; oder reset.
reason PflichtbodyWarum, mindestens 8 Zeichen.
Scope
settings:write oder decisions:write
Antwort
200{ funder, bank_id, seller_id, terms, changed, open_requests_keep_their_terms }
Fehler
422body_invalid, seller_id_invalid, terms_invalid, terms_key_unknown, reason_required, seller_not_in_programme
curl
curl -s -X PUT "$BASE/v1/programme" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"seller_id":"2f6d8a4e-1b3c-4d5e-9f70-8a1b2c3d4e5f","terms":{"disclosure":"confidential","announce_overdue_days":15,"announce_on_dispute":true,"announce_on_kyc_lapse":true,"bank_data":"required"},"reason":"Credit committee of 28 September"}'

POST/v1/requests/{id}/announce

Eine 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.

NameOrtBeschreibung
id PflichtpathDie Id der Anfrage.
reason PflichtbodyWarum, mindestens 8 Zeichen. Wird in der Nachweiskette von Advanta festgehalten.
Scope
decisions:write
Antwort
200{ request_id, disclosure, trigger, notices, sending_queued }
Fehler
403not_routed_to_you
404not_found
422body_invalid, reason_required, already_announced, request_closed
curl
curl -s -X POST "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/announce" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"reason":"Invoice 2026-118 is 20 days overdue"}'

GET/v1/requests/{id}/notices

Die 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.

NameOrtBeschreibung
id PflichtpathDie Id der Anfrage.
Scope
requests:read
Antwort
200{ request_id, count, notices[] }
Fehler
404not_found

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
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/notices" \
  -H "Authorization: Bearer $ADVANTA_KEY"

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

Was 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.

NameOrtBeschreibung
id PflichtpathDie Id der Anfrage.
Scope
requests:read
Antwort
200{ request_id, bank_data, cash_flow, bank_data_problems[], payment_alerts[] }
Fehler
404not_found

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
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/cash-flow" \
  -H "Authorization: Bearer $ADVANTA_KEY"

GET/v1/recourse

Ihre 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.

NameOrtBeschreibung
statusqueryopen, settled, withdrawn oder written_off. Fehlt er: alle Forderungen.
Scope
requests:read
Antwort
200{ funder, bank_id, currency, as_of, by_type[], claims[], list[] }
Fehler
422status_invalid

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
curl -s "$BASE/v1/recourse?status=open" \
  -H "Authorization: Bearer $ADVANTA_KEY"

POST/v1/recourse/{id}/close

Eine 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.

NameOrtBeschreibung
id PflichtpathDie Id der Forderung (claim_id).
status Pflichtbodywithdrawn oder written_off.
reason PflichtbodyWarum, mindestens 8 Zeichen.
Scope
decisions:write
Antwort
200{ claim_id, status }
Fehler
403not_your_claim
404not_found
422body_invalid, status_invalid, reason_required, close_invalid, claim_closed
curl
curl -s -X POST "$BASE/v1/recourse/$CLAIM_ID/close" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"withdrawn","reason":"Payment plan agreed with the seller on 2 October"}'

GET/v1/bank-data

Ihr 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.

Scope
requests:read
Antwort
200{ funder, bank_id, own_accounts[], sellers_sharing, payment_alerts[], charges[] }
Fehler
Nur die allgemeinen (401, 403, 500).

unit_price_eur und amount_eur sind null, bis der Preis des Anbieters feststeht.

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

Limits und Zahlungsprofil

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ß.

GET/v1/credit-limits

Ihr Buch je Schuldner: Ihr Limit und was ausstehend, zugesagt, angeboten und noch verfügbar ist, in Euro.

Scope
limits:read oder requests:read
Antwort
200{ funder, currency, count, debtors[] }
Fehler
Nur die allgemeinen (401, 403, 500).

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
curl -s "$BASE/v1/credit-limits" \
  -H "Authorization: Bearer $ADVANTA_KEY"

PUT/v1/credit-limits

Ihr 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.

NameOrtBeschreibung
debtor_tax_id PflichtbodyDie USt-IdNr. oder Steuernummer des Schuldners.
debtor_countrybodyISO 3166 Alpha-2.
debtor_namebodyDer Name des Schuldners.
amountbodyEuro, 0 oder mehr. Pflicht für ein aktives Limit.
statusbodyactive (Standard), refused oder suspended.
notebodyFreitext.
Scope
limits:write oder decisions:write
Antwort
200{ credit_limit }
Fehler
422debtor_tax_id_required, invalid_amount, invalid_limit
curl
curl -s -X PUT "$BASE/v1/credit-limits" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"debtor_tax_id":"A00000000","debtor_country":"ES","debtor_name":"Example Buyer, S.A.","amount":250000,"status":"active"}'

POST/v1/credit-limits/import

Bis 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.

NameOrtBeschreibung
rows Pflichtbody1 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).
sourcebodyimport (Ihre eigenen Limits, Standard) oder insurer (die Limits Ihres Kreditversicherers).
source_refbodyDie Datei oder der Stapel, aus dem die Limits stammen, höchstens 200 Zeichen.
Scope
limits:write oder decisions:write
Antwort
200{ funder, source, source_ref, received, written, refused, rows[] }
Fehler
413too_many_rows
422rows_required, invalid_source, source_ref_invalid, source_ref_too_long

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

GET/v1/seller-limits

Ihr Buch je Verkäufer, mit denselben Zahlen wie das Schuldnerbuch.

Scope
limits:read oder requests:read
Antwort
200{ funder, currency, count, sellers[] }
Fehler
Nur die allgemeinen (401, 403, 500).

Jeder Verkäufer enthält seller_id, seller_name, seller_nif, seller_country und dieselben Limit- und Exposure-Felder wie ein Schuldner.

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

PUT/v1/seller-limits

Ihr Limit für einen Verkäufer setzen oder ändern, oder den Verkäufer ablehnen.

NameOrtBeschreibung
seller_id PflichtbodyWie von GET /v1/seller-limits geliefert.
amountbodyEuro, 0 oder mehr.
statusbodyactive (Standard), refused oder suspended.
notebodyFreitext.
Scope
limits:write oder decisions:write
Antwort
200{ seller_limit }
Fehler
404not_found
422seller_id_required, invalid_amount, invalid_limit
curl
curl -s -X PUT "$BASE/v1/seller-limits" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"seller_id":"2f6d8a4e-1b3c-4d5e-9f70-8a1b2c3d4e5f","amount":100000,"status":"active","note":"Annual review"}'

GET/v1/payer-record

Wie 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.

NameOrtBeschreibung
tax_id PflichtqueryDie USt-IdNr. oder Steuernummer des Käufers.
countryqueryISO 3166 Alpha-2.
Scope
limits:read oder requests:read
Antwort
200{ funder, payer_record }
Fehler
404not_found (der Käufer steht auf keiner Anfrage in Ihrem Bereich und nicht auf Ihrer Schuldnerliste)
422tax_id_required

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
curl -s "$BASE/v1/payer-record?tax_id=A00000000&country=ES" \
  -H "Authorization: Bearer $ADVANTA_KEY"

GET/v1/requests/{id}/debtors

Was 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.

NameOrtBeschreibung
id PflichtpathDie Id der Anfrage.
Scope
requests:read
Antwort
200{ funder, request_id, count, debtors[] }
Fehler
404not_found

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
curl -s "$BASE/v1/requests/4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87/debtors" \
  -H "Authorization: Bearer $ADVANTA_KEY"

Kontoauszüge und Zahlungseingänge

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.

POST/v1/statements

Den 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.

NameOrtBeschreibung
file_namequeryDer Dateiname (optional).
kindquerycamt053 oder csv; wird erkannt, wenn er fehlt.
die Datei PflichtbodyDie unveränderte Datei, gesendet als application/xml oder text/csv; oder JSON { file_name, kind, content_base64 }.
Scope
statements:write oder decisions:write
Antwort
201{ import_id, file_sha256, lines, credits, duplicates, proposed, suggested, unmatched, ignored, … }
Fehler
409statement_already_imported
413file_too_large, too_many_lines
422file_required, file_unreadable, file_empty, statement_unreadable, statement_has_no_transactions, line_invalid
curl
curl -s -X POST "$BASE/v1/statements?file_name=statement-2026-10-30.xml&kind=camt053" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/xml" \
  --data-binary @statement-2026-10-30.xml

Kunden und Vermittler

Bringen 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.

GET/v1/prescribers

Ihre 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.

NameOrtBeschreibung
langqueryDie Sprache der Seite, die jeder Link öffnet: pt, es, en, fr, de, it oder nl, an seine url angehängt.
Scope
requests:read, clients:write oder decisions:write
Antwort
200{ funder, count, prescribers[] }
Fehler
422lang_invalid

Ein Sandbox-Schlüssel liest die Vermittler des Demonstrations-Finanzierers, die sich alle Demonstrationen teilen.

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

POST/v1/prescribers

Einen 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.

NameOrtBeschreibung
name Pflichtbody2 bis 120 Zeichen, eindeutig unter Ihren aktiven Vermittlern.
emailbodyOptional. Ein Sandbox-Finanzierer erfasst nur reservierte Adressen (auf .example, .invalid, .test oder .demo).
notesbodyOptional, bis zu 1.000 Zeichen.
langbodyDie Sprache der Seite, die sein Link öffnet, an seine url angehängt.
Scope
clients:write oder decisions:write
Antwort
201{ prescriber }
Fehler
409prescriber_exists
422body_required, name_required, name_invalid, email_invalid, email_not_reserved, notes_too_long, lang_invalid

Mit einem Sandbox-Schlüssel ändert das gemeinsam genutzte Demonstrationsdaten, deshalb braucht der Schlüssel decisions:write.

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

POST/v1/prescribers/{id}/disable

Einen 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.

NameOrtBeschreibung
id PflichtpathDie Id des Vermittlers.
reasonbodyDer Grund, bis zu 200 Zeichen.
Scope
clients:write oder decisions:write
Antwort
200{ prescriber, changed }
Fehler
404not_found
405method_not_allowed
422body_invalid, reason_invalid
curl
curl -s -X POST "$BASE/v1/prescribers/$PRESCRIBER_ID/disable" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"reason":"Agreement ended"}'

GET/v1/prescribers/report

Was 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.

Scope
requests:read, clients:write oder decisions:write
Antwort
200{ funder, plane, generated_at, currency, totals, groups[] }
Fehler
405method_not_allowed

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

GET/v1/client-invitations

Alle 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.

NameOrtBeschreibung
limitquery1 bis 500, Standard 200.
Scope
requests:read, clients:write oder decisions:write
Antwort
200{ funder, count, invitations[] }
Fehler
405method_not_allowed

Nur Ihre eigene Datenebene. Ein Sandbox-Schlüssel sieht die Einladungen anderer Sandbox-Schlüssel nicht.

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

Chancen des Tages

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.

GET/v1/opportunities

Die Ü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.

NameOrtBeschreibung
datequeryDer Tag der Übersicht, YYYY-MM-DD (Madrider Zeit). Fehlt er: die jüngste. Ein Tag ohne Übersicht antwortet mit date null und keinen Zeilen.
Scope
requests:read
Antwort
200{ funder, date, digest, lines[] }
Fehler
404not_found
405method_not_allowed
422invalid_date

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

Webhook-Endpunkte

Registrieren Sie die Endpunkte, die die Webhooks empfangen, rotieren Sie ihre Secrets, senden Sie einen Test und lesen Sie das Zustellprotokoll.

GET/v1/webhooks

Ihre 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.

Scope
webhooks:write, decisions:write oder requests:read
Antwort
200{ count, webhooks[], event_types[] }
Fehler
Nur die allgemeinen (401, 403, 500).
curl
curl -s "$BASE/v1/webhooks" \
  -H "Authorization: Bearer $ADVANTA_KEY"

POST/v1/webhooks

Einen Endpunkt registrieren. Die Antwort enthält sein Signatur-Secret, das nicht noch einmal angezeigt wird.

NameOrtBeschreibung
url Pflichtbodyhttps 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.
eventsbodyEine Liste von Ereignistypen, oder ["*"] für alle (Standard).
descriptionbodyBis zu 200 Zeichen.
Scope
webhooks:write oder decisions:write
Antwort
201{ webhook, secret, signature }
Fehler
409too_many_endpoints
422body_required, url_required, url_invalid, url_too_long, url_must_be_https, url_has_credentials, url_port_not_allowed, url_host_not_allowed, url_not_allowed, events_invalid, unknown_event_type, invalid_description

Höchstens 10 aktive Endpunkte.

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

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

DELETE/v1/webhooks/{id}

Einen Endpunkt stoppen. Noch ausstehende Zustellungen werden storniert und seine Secrets gelöscht.

NameOrtBeschreibung
id PflichtpathDie Id des Endpunkts.
Scope
webhooks:write oder decisions:write
Antwort
200{ id, active: false, deleted: true, cancelled_deliveries }
Fehler
404not_found
curl
curl -s -X DELETE "$BASE/v1/webhooks/$WEBHOOK_ID" \
  -H "Authorization: Bearer $ADVANTA_KEY"

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

Ein 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.

NameOrtBeschreibung
id PflichtpathDie Id des Endpunkts.
keep_previous_hoursbody0 bis 72, Standard 24.
Scope
webhooks:write oder decisions:write
Antwort
200{ webhook, secret, previous_secret_valid_until }
Fehler
404not_found
422invalid_keep_previous_hours
curl
curl -s -X POST "$BASE/v1/webhooks/$WEBHOOK_ID/rotate-secret" \
  -H "Authorization: Bearer $ADVANTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"keep_previous_hours":24}'

POST/v1/webhooks/{id}/test

Ein webhook.test-Ereignis für diesen Endpunkt einreihen. Der nächste Lauf des Dispatchers stellt es zu, in etwa einer Minute.

NameOrtBeschreibung
id PflichtpathDie Id des Endpunkts.
Scope
webhooks:write oder decisions:write
Antwort
202{ endpoint_id, event_id, delivery_id, status: "pending" }
Fehler
404not_found
curl
curl -s -X POST "$BASE/v1/webhooks/$WEBHOOK_ID/test" \
  -H "Authorization: Bearer $ADVANTA_KEY"

GET/v1/webhooks/{id}/deliveries

Das 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.

NameOrtBeschreibung
id PflichtpathDie Id des Endpunkts.
limitquery1 bis 200, Standard 50.
Scope
webhooks:write, decisions:write oder requests:read
Antwort
200{ count, deliveries[] }
Fehler
404not_found
curl
curl -s "$BASE/v1/webhooks/$WEBHOOK_ID/deliveries?limit=20" \
  -H "Authorization: Bearer $ADVANTA_KEY"

Onboarding-Links

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.

Der Export Ihrer Daten

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.

POST/v1/exports

Startet 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.

NameOrtBeschreibung
langbodyDie Sprache des README: pt, es, en, fr, de, it oder nl (Standard en).
Scope
exports:write oder decisions:write
Antwort
202{ funder, export }
Fehler
403export_live_key_required
409export_in_progress
422body_invalid, lang_invalid
429export_rate_limited

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

GET/v1/exports

Ihre Exporte, aus dem Portal und der API, die neuesten zuerst, mit Status, Größe und manifest_sha256.

NameOrtBeschreibung
limitquery1 bis 200, Standard 50.
Scope
exports:write oder decisions:write
Antwort
200{ funder, count, exports[] }
Fehler
403export_live_key_required
405method_not_allowed
curl
curl -s "$BASE/v1/exports?limit=20" \
  -H "Authorization: Bearer $ADVANTA_KEY"

GET/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.

NameOrtBeschreibung
id PflichtpathDie Export-ID, aus POST /v1/exports oder GET /v1/exports.
Scope
exports:write oder decisions:write
Antwort
200{ funder, export, files[] }
Fehler
403export_live_key_required
404not_found
405method_not_allowed

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

GET/v1/exports/{id}/documents

Wenn 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.

NameOrtBeschreibung
id PflichtpathDie Export-ID.
afterqueryDas next_after der vorigen Seite.
limitquery1 bis 200, Standard 100.
Scope
exports:write oder decisions:write
Antwort
200{ funder, export_id, documents[], next_after }
Fehler
403export_live_key_required
404not_found
409export_not_ready, export_failed
410export_expired
curl
curl -s "$BASE/v1/exports/5e1f0a2b-3c4d-4e5f-8a9b-0c1d2e3f4a5b/documents?limit=100" \
  -H "Authorization: Bearer $ADVANTA_KEY"

Webhooks

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.

Ereignisse

EreignisWanndata
request.routedDas 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.unroutedEine an Sie weitergeleitete Anfrage wurde anderswohin weitergeleitet oder zurückgezogen. Sie können nicht mehr darauf handeln.request_id, request_ref, unrouted_at
offer.acceptedIhr 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.acknowledgedEin 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.disputedEin 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.fundedEine an Sie weitergeleitete Anfrage wurde ausgezahlt.Die Anfragefelder von request.routed, dazu funded_at und advance_amount.
settlement.recordedEin 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_expiringEin 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.openedEin 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.resolvedDas 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.completedEin 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.joinedEin 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.readyEin 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.announcedEine 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.openedEine 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.settledEine 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_sellerAuf 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.dailyDie Ü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_blockedEin 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.acceptedEin 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.testDas Testereignis, das Sie mit POST /v1/webhooks/{id}/test angefordert haben.

Die Zustellung

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.
Header
POST /advanta HTTP/1.1
Host: hooks.example.com
Content-Type: application/json
Advanta-Signature: t=1790179835,v1=5f2b…
Advanta-Event-Id: 9b2f7f64-5a1c-4a57-9d8a-0f2e3c4b5a69
Advanta-Event-Type: request.funded
Body
{
  "id": "9b2f7f64-5a1c-4a57-9d8a-0f2e3c4b5a69",
  "object": "event",
  "type": "request.funded",
  "api_version": "2026-09-23",
  "created": 1790179835,
  "environment": "sandbox",
  "data": {
    "request_id": "4c1e0d2a-8f3b-4f6e-9a55-3c2b1d0e9f87",
    "request_ref": "FR-2026-0042",
    "type": "factoring",
    "status": "funded",
    "total_amount": 18450.00,
    "currency": "EUR",
    "funded_at": "2026-09-23T18:10:35Z",
    "advance_amount": 16605.00
  }
}
FeldBedeutung
idDie Id des Ereignisses, dieselbe wie Advanta-Event-Id.
objectImmer event.
typeEiner der Ereignistypen oben.
api_versionDie API-Revision, in der das Ereignis geschrieben ist.
createdWann das Ereignis erzeugt wurde, in Unix-Sekunden.
environmentlive, sandbox oder unclassified, wie in GET /v1/me.
dataDie Felder des Ereignisses, oben aufgeführt.

Zustellung und Wiederholungen

  • Antworten Sie innerhalb von 10 Sekunden mit einem beliebigen 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.
  • Eine fehlgeschlagene Zustellung wird nach 1, 2, 4, 8 … Minuten erneut versucht, jeweils verdoppelt, höchstens 6 Stunden auseinander, mit einem letzten Versuch 24 Stunden nach dem Ereignis. Danach wird sie als failed markiert und bleibt im Zustellprotokoll.
  • Die Zustellung erfolgt mindestens einmal. Speichern Sie die bereits verarbeiteten 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.

Endpunkte und Secrets

  • Die URL eines Endpunkts ist https auf einem öffentlichen Hostnamen, auf Port 443, ohne Benutzername oder Passwort. Private, Loopback- und Link-Local-Adressen werden abgelehnt.
  • Höchstens 10 aktive Endpunkte. Jeder abonniert eine Liste von Ereignistypen oder ["*"] für alle (Standard).
  • Das Signatur-Secret (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.
  • Zum Rotieren rufen Sie 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.

Signaturen prüfen

Jede Zustellung trägt Advanta-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256>. Prüfen Sie sie, bevor Sie dem Body vertrauen:

  1. Lesen Sie den rohen Request-Body, genau wie empfangen, vor jedem JSON-Parsing.
  2. Berechnen Sie HMAC-SHA256 über <t>.<raw body>, mit dem Endpunkt-Secret als Schlüssel (die ganze Zeichenkette whsec_…, als UTF-8), und kodieren Sie ihn hexadezimal.
  3. Akzeptieren Sie die Zustellung, wenn ein 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.

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

const TOLERANCE_SECONDS = 300;

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

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

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

from flask import Flask, request

TOLERANCE_SECONDS = 300


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


# Flask
app = Flask(__name__)


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

Fehler

Jeder Fehler ist JSON, mit einem stabilen code und einer message für Menschen. Entscheiden Sie nach dem Code, nie nach der Nachricht.

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

Statuscodes

StatusCodesBedeutung
400reason_requiredEine Ablehnung ohne reason oder notes.
401unauthorized, key_expiredunauthorized: Der Schlüssel fehlt, ist fehlerhaft, unbekannt, widerrufen oder inaktiv. key_expired: Der Schlüssel ist abgelaufen.
403forbidden, not_your_request, export_live_key_required, not_routed_to_you, not_your_claimforbidden: 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.
404not_foundKeine für diesen Schlüssel sichtbare Ressource, oder eine unbekannte Route.
405method_not_allowedDie Methode wird auf diesem Pfad nicht unterstützt.
409not_routed_to_you, invalid_state, credit_limit, funding_gate_failed, funding_amount_mismatch, debtor_not_eligible_for_funder, documents_missing_for_funder, level_lower, notice_already_decided, not_factoring, request_not_in_flight, statement_already_imported, too_many_endpoints, prescriber_exists, link_exists, company_already_registered, email_has_account, invitation_pending_exists, country_not_served, export_in_progress, export_not_ready, export_failedEin 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).
410export_expiredexport_expired: Die Dateien des Exports konnten 24 Stunden lang heruntergeladen werden; starten Sie einen neuen Export.
413file_too_large, too_many_lines, too_many_rowsDer 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).
422invalid_terms, invalid_amount, invalid_received_at, invalid_funding_details, step_back_message_required, invalid_decision, level_invalid, invalid_flag, reason_required, debtor_tax_id_required, seller_id_required, invalid_limit, tax_id_required, file_required, file_unreadable, file_empty, statement_unreadable, statement_has_no_transactions, line_invalid, country_invalid, codes_invalid, note_invalid, country_without_catalogue, document_code_unknown, body_required, url_required, url_invalid, url_too_long, url_must_be_https, url_has_credentials, url_port_not_allowed, url_host_not_allowed, url_not_allowed, events_invalid, unknown_event_type, invalid_description, invalid_keep_previous_hours, body_invalid, name_required, name_invalid, email_invalid, email_not_reserved, notes_too_long, lang_invalid, prescriber_id_invalid, expires_at_invalid, replace_invalid, reason_invalid, company_vat_invalid, contact_email_invalid, contact_name_invalid, company_name_invalid, company_name_required, return_url_invalid, return_url_not_allowed, metadata_invalid, locale_invalid, valid_days_invalid, prescriber_not_found, country_not_served, seller_id_invalid, terms_invalid, terms_key_unknown, seller_not_in_programme, already_announced, request_closed, status_invalid, close_invalid, claim_closed, rows_required, invalid_source, source_ref_invalid, source_ref_too_long, invalid_dateEin 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).
429rate_limited, export_rate_limitedrate_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.
500internal, query_failed, write_failed, ingest_failedBei Advanta ist etwas fehlgeschlagen. Später erneut versuchen.

debtor_not_eligible_for_funder

Wenn 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:

JSON
{
  "error": {
    "code": "debtor_not_eligible_for_funder",
    "message": "…",
    "debtors": [
      {
        "debtor_key": "A00000000",
        "name": "Example Buyer, S.A.",
        "country": "ES",
        "reason": "not_listed",
        "invoices": 2
      }
    ]
  }
}
reasonBedeutung
not_listedDer Schuldner steht nicht auf Ihrer Liste.
refusedIhr Limit für den Schuldner steht auf verweigert.
suspendedIhr Limit für den Schuldner ist ausgesetzt.
no_tax_idEiner Rechnung fehlt die Steuernummer des Käufers.
invoice_missingEine Position der Anfrage hat keine Rechnung.
no_invoicesDie Anfrage hat keine Rechnungen.

documents_missing_for_funder

Wenn 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:

JSON
{
  "error": {
    "code": "documents_missing_for_funder",
    "message": "…",
    "documents": [
      {
        "code": "cert_seguridad_social",
        "name": "…",
        "reason": "expired",
        "valid_until": "2026-09-15",
        "document_id": "5b7c9d1e-3f2a-4b6c-8d0e-1a2b3c4d5e6f"
      }
    ]
  }
}
reasonBedeutung
missingDer Verkäufer hat das Dokument nicht eingereicht.
unverifiedAdvanta hat es noch nicht geprüft.
expiredEs ist an diesem Datum nicht mehr gültig.
rejectedAdvanta hat es zurückgewiesen.
no_validity_dateEs hat kein Gültigkeitsdatum.
not_in_catalogueDer Code steht nicht im Katalog für das Land des Verkäufers.

Versionen und Limits

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.