Klanten en contactpersonen
De spil waar elke andere module aan hangt: het klantrecord, de mensen bij die klant, het spoor van wat er veranderd is, en de adresopzoeker die de formulieren gebruiken.
33 endpoints, verdeeld over 4 groepen. Een recht geschreven als module.resource.action:own heeft een bereik: :own dekt rijen die van jou zijn, :any die van iedereen, en :any voldoet aan een controle op :own.
companies
Section titled “companies”| Endpoint | Recht |
|---|---|
GET /companies | companies.company.read |
POST /companies | companies.company.write |
GET /companies/{company_id} | companies.company.read |
PATCH /companies/{company_id} | companies.company.write |
DELETE /companies/{company_id} | companies.company.delete |
GET /companies/{company_id}/logo | companies.company.read |
POST /companies/{company_id}/logo | companies.company.write |
DELETE /companies/{company_id}/logo | companies.company.write |
GET /companies/{company_id}/panels | companies.company.read |
GET /companies/{company_id}/summary | companies.company.read |
GET /companies/groups | companies.group.manage |
POST /companies/groups | companies.group.manage |
PATCH /companies/groups/{group_id} | companies.group.manage |
DELETE /companies/groups/{group_id} | companies.group.manage |
PUT /companies/groups/{group_id}/companies | companies.group.manage |
PUT /companies/groups/{group_id}/memberships | companies.group.manage |
GET /companies/settings | companies.settings.manage |
PUT /companies/settings | companies.settings.manage |
POST /companies/settings/backfill-client-numbers | companies.settings.manage |
Parameters en schema’s per endpoint
GET /api/v1/companies
Section titled “GET /api/v1/companies”List Companies
Recht: companies.company.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
limit | integer | (default 50) |
offset | integer | (default 0) |
q | string | |
status | string | Lifecycle status; comma-separate for several (‘lead,onboarding,active’). Absent means every status, the archived ones included — the screen picks its own default, this endpoint does not. |
mine | boolean | Only clients I’m assigned to (primary or not) (default false) |
sort | string | name | client_number | status | created_at | updated_at, ’-’ desc. Default: name |
hours | boolean | Include the budget roll-up; costs three grouped queries (default false) |
count | boolean | Compute total; set false for name-only lookups (default true) |
Antwoord: 200 · Page_CompanyRead_
POST /api/v1/companies
Section titled “POST /api/v1/companies”Create Company
Recht: companies.company.write
Request body: CompanyCreate
Antwoord: 201 · CompanyRead
GET /api/v1/companies/{company_id}
Section titled “GET /api/v1/companies/{company_id}”Get Company
Recht: companies.company.read
Padparameters: company_id
Antwoord: 200 · CompanyRead
PATCH /api/v1/companies/{company_id}
Section titled “PATCH /api/v1/companies/{company_id}”Update Company
Recht: companies.company.write
Padparameters: company_id
Request body: CompanyUpdate
Antwoord: 200 · CompanyRead
DELETE /api/v1/companies/{company_id}
Section titled “DELETE /api/v1/companies/{company_id}”Delete Company
Recht: companies.company.delete
Padparameters: company_id
Antwoord: 204
GET /api/v1/companies/{company_id}/logo
Section titled “GET /api/v1/companies/{company_id}/logo”Serve Company Logo — The logo bytes — behind the same tenant + horizon check as the company itself, so a portal login only ever sees logos of companies in their horizon (#191/#193).
Recht: companies.company.read
Padparameters: company_id
Antwoord: 200
POST /api/v1/companies/{company_id}/logo
Section titled “POST /api/v1/companies/{company_id}/logo”Upload Company Logo — Upload or replace the client’s logo. Images only, bounded by the instance caps.
Recht: companies.company.write
Padparameters: company_id
Request body: Body_upload_company_logo_api_v1_companies__company_id__logo_post
Antwoord: 200 · CompanyRead
DELETE /api/v1/companies/{company_id}/logo
Section titled “DELETE /api/v1/companies/{company_id}/logo”Remove Company Logo
Recht: companies.company.write
Padparameters: company_id
Antwoord: 200 · CompanyRead
GET /api/v1/companies/{company_id}/panels
Section titled “GET /api/v1/companies/{company_id}/panels”Company Panels — Compose the detail-view panels contributed by every enabled module (the hub).
Recht: companies.company.read
Padparameters: company_id
Antwoord: 200 · PanelData[]
GET /api/v1/companies/{company_id}/summary
Section titled “GET /api/v1/companies/{company_id}/summary”Company Summary — The client’s vital signs (#364) — openstaand, uren, open taken, laatste contact, verlenging.
Recht: companies.company.read
Padparameters: company_id
Antwoord: 200 · SummaryData[]
GET /api/v1/companies/groups
Section titled “GET /api/v1/companies/groups”List Groups
Recht: companies.group.manage
Antwoord: 200 · GroupRead[]
POST /api/v1/companies/groups
Section titled “POST /api/v1/companies/groups”Create Group
Recht: companies.group.manage
Request body: GroupCreate
Antwoord: 201 · GroupRead
PATCH /api/v1/companies/groups/{group_id}
Section titled “PATCH /api/v1/companies/groups/{group_id}”Update Group
Recht: companies.group.manage
Padparameters: group_id
Request body: GroupUpdate
Antwoord: 200 · GroupRead
DELETE /api/v1/companies/groups/{group_id}
Section titled “DELETE /api/v1/companies/groups/{group_id}”Delete Group
Recht: companies.group.manage
Padparameters: group_id
Antwoord: 204
PUT /api/v1/companies/groups/{group_id}/companies
Section titled “PUT /api/v1/companies/groups/{group_id}/companies”Set Group Companies
Recht: companies.group.manage
Padparameters: group_id
Request body: GroupCompanies
Antwoord: 204
PUT /api/v1/companies/groups/{group_id}/memberships
Section titled “PUT /api/v1/companies/groups/{group_id}/memberships”Set Group Memberships
Recht: companies.group.manage
Padparameters: group_id
Request body: GroupMemberships
Antwoord: 204
GET /api/v1/companies/settings
Section titled “GET /api/v1/companies/settings”Get Company Settings — How this organisation numbers its clients (klantnummer format + sequence).
Recht: companies.settings.manage
Antwoord: 200 · CompanyNumberingRead
PUT /api/v1/companies/settings
Section titled “PUT /api/v1/companies/settings”Update Company Settings
Recht: companies.settings.manage
Request body: CompanyNumberingWrite
Antwoord: 200 · CompanyNumberingRead
POST /api/v1/companies/settings/backfill-client-numbers
Section titled “POST /api/v1/companies/settings/backfill-client-numbers”Backfill Client Numbers — Number every client that has no number yet, oldest first.
Recht: companies.settings.manage
Antwoord: 200 · ClientNumberBackfillResult
contacts
Section titled “contacts”| Endpoint | Recht |
|---|---|
GET /contacts | contacts.contact.read |
POST /contacts | contacts.contact.write |
GET /contacts/{contact_id} | contacts.contact.read |
PATCH /contacts/{contact_id} | contacts.contact.write |
DELETE /contacts/{contact_id} | contacts.contact.delete |
POST /contacts/{contact_id}/links | contacts.link.write |
PATCH /contacts/{contact_id}/links/{company_id} | contacts.link.write |
DELETE /contacts/{contact_id}/links/{company_id} | contacts.link.write |
GET /contacts/types | contacts.type.read |
POST /contacts/types | contacts.type.manage |
PATCH /contacts/types/{type_id} | contacts.type.manage |
DELETE /contacts/types/{type_id} | contacts.type.manage |
Parameters en schema’s per endpoint
GET /api/v1/contacts
Section titled “GET /api/v1/contacts”List Contacts
Recht: contacts.contact.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
limit | integer | (default 50) |
offset | integer | (default 0) |
company_id | string | |
contact_type_id | string | |
q | string | |
sort | string | first_name | last_name | email | job_title | company | …, ’-’ desc |
count | boolean | Compute the total. False for pickers and name-only lookups. (default true) |
Antwoord: 200 · Page_ContactRead_
POST /api/v1/contacts
Section titled “POST /api/v1/contacts”Create Contact
Recht: contacts.contact.write
Request body: ContactCreate
Antwoord: 201 · ContactRead
GET /api/v1/contacts/{contact_id}
Section titled “GET /api/v1/contacts/{contact_id}”Get Contact
Recht: contacts.contact.read
Padparameters: contact_id
Antwoord: 200 · ContactRead
PATCH /api/v1/contacts/{contact_id}
Section titled “PATCH /api/v1/contacts/{contact_id}”Update Contact
Recht: contacts.contact.write
Padparameters: contact_id
Request body: ContactUpdate
Antwoord: 200 · ContactRead
DELETE /api/v1/contacts/{contact_id}
Section titled “DELETE /api/v1/contacts/{contact_id}”Delete Contact
Recht: contacts.contact.delete
Padparameters: contact_id
Antwoord: 204
POST /api/v1/contacts/{contact_id}/links
Section titled “POST /api/v1/contacts/{contact_id}/links”Link Contact To Company
Recht: contacts.link.write
Padparameters: contact_id
Request body: ContactLinkCreate
Antwoord: 201 · ContactRead
PATCH /api/v1/contacts/{contact_id}/links/{company_id}
Section titled “PATCH /api/v1/contacts/{contact_id}/links/{company_id}”Update Contact Company Link
Recht: contacts.link.write
Padparameters: contact_id, company_id
Request body: ContactLinkUpdate
Antwoord: 200 · ContactRead
DELETE /api/v1/contacts/{contact_id}/links/{company_id}
Section titled “DELETE /api/v1/contacts/{contact_id}/links/{company_id}”Unlink Contact From Company
Recht: contacts.link.write
Padparameters: contact_id, company_id
Antwoord: 204
GET /api/v1/contacts/types
Section titled “GET /api/v1/contacts/types”List Contact Types
Recht: contacts.type.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
include_inactive | boolean | (default false) |
Antwoord: 200 · ContactTypeRead[]
POST /api/v1/contacts/types
Section titled “POST /api/v1/contacts/types”Create Contact Type
Recht: contacts.type.manage
Request body: ContactTypeCreate
Antwoord: 201 · ContactTypeRead
PATCH /api/v1/contacts/types/{type_id}
Section titled “PATCH /api/v1/contacts/types/{type_id}”Update Contact Type
Recht: contacts.type.manage
Padparameters: type_id
Request body: ContactTypeUpdate
Antwoord: 200 · ContactTypeRead
DELETE /api/v1/contacts/types/{type_id}
Section titled “DELETE /api/v1/contacts/types/{type_id}”Delete Contact Type
Recht: contacts.type.manage
Padparameters: type_id
Antwoord: 204
activity
Section titled “activity”| Endpoint | Recht |
|---|---|
GET /activity | activity.read |
Parameters en schema’s per endpoint
GET /api/v1/activity
Section titled “GET /api/v1/activity”Entity Activity
Recht: activity.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
entity_type | string · verplicht | |
entity_id | string · verplicht | |
limit | integer | (default 20) |
Antwoord: 200 · app__core__activity__schemas__ActivityItem[]
addresslookup
Section titled “addresslookup”| Endpoint | Recht |
|---|---|
GET /addresslookup | addresslookup.lookup |
Parameters en schema’s per endpoint
GET /api/v1/addresslookup
Section titled “GET /api/v1/addresslookup”Lookup Address
Recht: addresslookup.lookup
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
postal_code | string · verplicht | |
house_number | string · verplicht |
Antwoord: 200 · AddressLookupResponse