Documentatie

Documentatie

Genoeg om te koppelen zonder ons te bellen — en genoeg context om te begrijpen waarom het zo is opgezet.

Basisprincipe

De website van de klant is alleen de ingang. Alle prijzen, regels, AI en gegevens blijven op onze servers. De browser identificeert zich met een publieke identifier en werkt daarna met een kortlevende sessie; server-to-server gebruikt een privaat credential.

Versionering

Alle endpoints staan onder /api/v1/. Een wijziging die bestaande integraties zou breken, krijgt een nieuwe versie.

Publieke API

Voor de browser. Een sessie is enkele minuten geldig en draagt uitsluitend smalle scopes: quote:create, quote:read:self, photo:upload en ai:request. Nooit tenant- of adminbeheerrechten.

MethodeEndpointDoel
POST/api/v1/public/sessionOpent een kortlevende sessie met een publieke identifier.
GET/api/v1/public/configBranding, publieke catalogus, features en juridische links.
POST/api/v1/public/quoteMaakt of berekent een aanvraag binnen de sessie.
POST/api/v1/public/photoUploadt een foto bij het project van de sessie.
POST/api/v1/public/ai-jobStart een AI-taak: maatinschatting of visualisatie.
Sessie openen
curl -X POST "https://favium.be/api/v1/public/session" \
  -H "content-type: application/json" \
  -d '{ "public_key": "pub_live_xxxxx" }'

# antwoord
{ "session_token": "ses_…", "expires_in": 900,
  "scopes": ["quote:create", "photo:upload", "ai:request"] }

Tenant-API

Server-to-server, met een privaat credential in de authorization-header. Beschikbaar vanaf de plannen met API-toegang.

MethodeEndpointDoel
GET/api/v1/tenant/meGegevens van de omgeving, plan en entitlements.
GET/api/v1/tenant/productsDe publiceerbare catalogus.
GET/api/v1/tenant/quotesOffertes met status en totalen.
GET/api/v1/tenant/leadsLeads met score en pipelinestatus.

Webhooks

Ondertekende payloads met timestamp, idempotency-sleutel en herhaalpogingen.

  • quote.created — een aanvraag is aangemaakt
  • quote.completed — de berekening is rond
  • lead.created — er is een lead ontstaan
  • technical_review.required — er is technische controle nodig
  • subscription.updated — het abonnement is gewijzigd
  • integration.updated — een credential of domein is gewijzigd

Verifieer de handtekening met het endpoint-secret voordat u een payload verwerkt, en gebruik de idempotency-sleutel om dubbele verwerking te voorkomen.

Eigen domein

Zet één CNAME-record; de rest gebeurt automatisch.

DNS-record
# type  naam      waarde
CNAME   offerte   domains.favium.be
StatusBetekenis
DNS_PENDINGHet record is nog niet gevonden.
DNS_VERIFIEDHet record wijst correct naar het platform.
SSL_PENDINGHet certificaat wordt aangevraagd.
ACTIVEHet domein is bereikbaar en beveiligd.
FAILEDDe controle is mislukt; de melding staat bij het domein.

Fouten

Elke fout komt terug als JSON met een stabiele code.

StatusCodeBetekenis
400bad_requestOngeldige of ontbrekende invoer.
401unauthorizedGeen geldige sessie of credential.
403forbiddenOntbrekende scope, rol of niet-toegestane origin.
404not_foundOnbekend endpoint of object.
429rate_limitedTe veel aanvragen; probeer het later opnieuw.
500server_errorInterne fout; details staan in onze logs, niet in het antwoord.