Selecteer de taal
F-Register API v1
API documentatie en kennisbank
Koppel F-Register veilig aan Teamleader, facturatiepakketten, BI-tools of eigen software. Deze pagina geeft een praktisch overzicht van authenticatie, rechten, endpoints, webhooks en veelvoorkomende integraties.
Vertrouwd door installatiebedrijven in Nederland en België
curl -X POST "https://bedrijf.f-register.nl/api/v1/customers" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer fr_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-d '{
"name": "Hotel Havenzicht",
"contact_name": "Jan de Vries",
"address": "Prinsengracht",
"house_number": "211",
"postal_code": "1015 DT",
|"city": "Amsterdam",
"email": "techniek@example.nl",
"phone": "0201234567"
}'
Basis
Tenant per klant
Elke klantomgeving heeft een eigen subdomein. De API-basis-URL is daarom altijd de URL van de betreffende omgeving, bijvoorbeeld:
https://bedrijf.f-register.nl/api/v1
Token per koppeling
Gebruik per extern systeem een eigen API-token met alleen de rechten die nodig zijn. Tokens kunnen verlopen, beperkt worden op IP-adres en later worden geroteerd.
Veilig en GDPR-bewust
API-calls, inkomende webhooks en uitgaande events worden gelogd. Gebruik zo min mogelijk persoonsgegevens en beperk toegang tot de klantomgeving die echt nodig is.
Authenticatie
Authenticatie met Bearer token
Een API-token wordt aangemaakt in de klantomgeving via Instellingen > API & Webhooks. Bewaar het token direct veilig; F-Register toont de volledige waarde alleen bij aanmaken of roteren. Een API-token wordt aangemaakt in de klantomgeving via Instellingen > API & Webhooks. Bewaar het token direct veilig; F-Register toont de volledige waarde alleen bij aanmaken of roteren.
curl "https://bedrijf.f-register.nl/api/v1/customers?q=havenzicht&limit=25" \
-H "Accept: application/json" \
-H "Authorization: Bearer fr_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Als alternatief kan de header X-F-Register-Api-Key gebruikt worden, maar Authorization: Bearer heeft de voorkeur.
Rechten
Rechten per API-client
Geef een koppeling alleen toegang tot wat deze nodig heeft. Een facturatiepakket heeft bijvoorbeeld vaak genoeg aan afgeronde werkbonnen, terwijl Teamleader bij een gewonnen deal klanten en locaties mag aanmaken.
Endpoint overzicht
Belangrijkste API-endpoints
Methode | Endpoint | Recht | Gebruik |
|---|---|---|---|
GET | /api/v1/openapi.json | - | Machineleesbare OpenAPI-basis met endpoints en eventinformatie. |
GET | /api/v1/me | customers.read | Controle van token, rechten en actieve koppeling. |
GET | /api/v1/customers | customers.read | Klanten zoeken en pagineren. Query: q , limit , page |
POST | /api/v1/customers | customers.write | Klant aanmaken vanuit extern CRM of salesflow. |
GET | /api/v1/customers/{id} | customers.read | Klantdetails inclusief locaties en voertuigen. |
GET | /api/v1/locations | locations.read | Installatieadressen ophalen. Query: customer_id , q , limit , page . |
POST | /api/v1/locations | locations.write | Nieuw installatieadres aanmaken. |
GET | /api/v1/installations | installations.read | Koelinstallaties en warmtepompen ophalen per locatie of zoekterm. |
GET | /api/v1/combustion-appliances | combustion.read | Verbrandingstoestellen ophalen per locatie of zoekterm. |
GET | /api/v1/vehicles | vehicles.read | Voertuigen ophalen per klant of zoekterm. |
GET | /api/v1/work-orders | work_orders.read | Werkbonnen zoeken. Query: customer_id , status , q , limit , page . |
POST | /api/v1/work-orders | work_orders.write | Nieuwe conceptwerkbon aanmaken. |
GET | /api/v1/work-orders/completed | work_orders.completed | Uitgevoerde werkbonnen ophalen voor facturatie. Query: since , limit , page . |
GET | /api/v1/work-orders/{id} | work_orders.read | Werkbondetails inclusief klant, objecten, planning, materialen en handelingen. |
GET | /api/v1/documents | documents.read | Documentmetadata ophalen. Query: customer_id , installation_id , limit , page . |
POST | /api/v1/inbound/{source}/{event} | webhooks.receive | Inkomende webhookpayload auditbaar opslaan. |
Voorbeelden
Veelgebruikte requests
Klant zoeken
curl "https://bedrijf.f-register.nl/api/v1/customers?q=havenzicht&limit=25" \
-H "Accept: application/json" \
-H "Authorization: Bearer fr_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Nieuwe klant aanmaken
curl -X POST "https://bedrijf.f-register.nl/api/v1/customers" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer fr_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-d '{
"name": "Hotel Havenzicht",
"contact_name": "Jan de Vries",
"address": "Prinsengracht",
"house_number": "211",
"postal_code": "1015 DT",
"city": "Amsterdam",
"email": "techniek@example.nl",
"phone": "0201234567"
}'
Uitgevoerde werkbonnen voor facturatie
curl "https://bedrijf.f-register.nl/api/v1/work-orders/completed?since=2026-05-01&limit=100" \
-H "Accept: application/json" \
-H "Authorization: Bearer fr_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Webhooks en events
Uitgaande events
F-Register kan events naar externe systemen sturen. De payload heeft altijd de vorm { event, sent_at, data } . De headers bevatten onder andere X-F-Register-Event , X-F-Register-Webhook en X-F-Register-Signature .
Event | Trigger | Payload |
|---|---|---|
test.ping | Handmatige test vanuit API & Webhooks. | Testbericht met tenant URL. |
customer.created | Nieuwe klant aangemaakt via UI of API. | Klantobject. |
customer.created | Nieuw installatieadres aangemaakt via UI of API. | Installatieadresobject. |
work_order.completed | Status wordt Uitgevoerd of Uitgevoerd, met vervolg. | Werkbonobject inclusief uitvoeringsgegevens. |
work_order.ready_for_invoice | Werkbon is afgerond en klaar voor facturatie. | Werkbonobject voor facturatiepakket. |
document.created | Document toegevoegd aan F-Register. | Documentmetadata. |
* | Wildcard subscription. | Afhankelijk van het concrete event. |
Webhook signature controleren
hash_hmac('sha256', $rawJsonBody, $webhookSecret)
Teamleader en salespakketten
Voorbeeldflow: deal gewonnen naar werkvoorraad
Â
Offerte wordt geaccepteerd in Teamleader; de deal krijgt status gewonnen.
Â
Â
Teamleader stuurt deal.won naar F-Register.
Â
F-Register leest klant, contact, installatieadres en dealvelden uit.
Als de klant nog niet bestaat, wordt deze aangemaakt.
Het installatieadres wordt aangemaakt of bijgewerkt.
Afhankelijk van de mapping wordt een installatie, verbrandingstoestel, voertuig of conceptwerkbon klaargezet.
Na uitvoering kan het facturatiepakket via /work-orders/completed of via work_order.ready_for_invoice de afgeronde werkbon ophalen.
Kennisbank
Praktische artikelen
Welke rechten geef ik een koppeling?
Gebruik read-only rechten voor rapportage, work_orders.completed voor facturatie en write-rechten alleen voor systemen die echt records mogen aanmaken.
Hoe koppel ik Teamleader?
Maak een Teamleader OAuth-koppeling, registreer de deal.won webhook en leg per custom field vast welke F-Register waarde gevuld moet worden.
Hoe voorkom ik dubbele klanten?
Gebruik e-mail, klantnaam, postcode en huisnummer als controlepunten. Bewaar externe IDs in je koppeling, zodat updates naar hetzelfde record blijven wijzen.
Hoe werkt facturatie?
Laat F-Register leidend zijn voor uitgevoerde werkzaamheden. Het facturatiepakket haalt afgeronde werkbonnen, uren, materialen en rapportlinks op.
Hoe werken webhooks veilig?
Gebruik HTTPS, controleer X-F-Register-Signature , accepteer alleen bekende events en log de ontvangen event-id of payload-hash.
Wat bij GDPR/export?
Gebruik API-toegang alleen voor noodzakelijke data. Voor volledige klant-export en opzegging is een aparte exportmodule bedoeld, inclusief documentenbestand.
Foutcodes
Veelvoorkomende responses
First Name | Last Name | Countries |
|---|---|---|
401 | Token ontbreekt, is ongeldig, inactief of verlopen. | Controleer token, rotatie en vervaldatum. |
403 | Geen recht voor dit endpoint of IP-adres niet toegestaan. | Controleer rechten en IP-whitelist van de API-client. |
404 | Endpoint of record niet gevonden, of module staat uit. | Controleer URL, tenant, module en record-id. |
422 | Validatie mislukt. | Controleer verplichte velden, datums, e-mailadressen en datatypes. |
429 | Rate limit bereikt. | Verlaag call-frequentie of verhoog de limiet in overleg. |
500 | Serverfout. | Bewaar request-id/tijdstip en meld dit bij support. |

EN