Platform
Alles wat overal doorheen loopt: de organisatiegegevens die een client als eerste ophaalt, bestanden, meldingen, automatiseringsregels, AI, eigen velden, spreadsheets en bulkbewerkingen.
279 endpoints, verdeeld over 20 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.
| Endpoint | Recht |
|---|---|
POST /ai/assist/write | ai.use |
POST /ai/assistant | ai.use |
POST /ai/assistant/transcribe | ai.use |
POST /ai/companies/{company_id}/digest | ai.use |
GET /ai/reports | ai.use |
POST /ai/reports | ai.use |
GET /ai/reports/{report_id} | ai.use |
PUT /ai/reports/{report_id} | ai.use |
DELETE /ai/reports/{report_id} | ai.use |
POST /ai/reports/generate | ai.use |
GET /ai/settings | ai.settings.manage |
PUT /ai/settings | ai.settings.manage |
DELETE /ai/settings | ai.settings.manage |
POST /ai/settings/models | ai.settings.manage |
POST /ai/settings/test | ai.settings.manage |
POST /ai/tasks/parse | ai.use |
POST /ai/tasks/transcribe | ai.use |
POST /ai/time/parse | ai.use |
POST /ai/time/reconstruct | ai.use |
POST /ai/time/transcribe | ai.use |
GET /ai/usage | ai.settings.manage |
Parameters en schema’s per endpoint
POST /api/v1/ai/assist/write
Section titled “POST /api/v1/ai/assist/write”Writing Assist
Recht: ai.use
Request body: WritingAssistRequest
Antwoord: 200
POST /api/v1/ai/assistant
Section titled “POST /api/v1/ai/assistant”Assistant
Recht: ai.use
Request body: AssistantRequest
Antwoord: 200
POST /api/v1/ai/assistant/transcribe
Section titled “POST /api/v1/ai/assistant/transcribe”Assistant Transcribe — Speech to text for the assistant’s composer.
Recht: ai.use
Request body: AssistantTranscribeRequest
Antwoord: 200 · TimeTranscribeResult
POST /api/v1/ai/companies/{company_id}/digest
Section titled “POST /api/v1/ai/companies/{company_id}/digest”Company Digest
Recht: ai.use
Padparameters: company_id
Request body: DigestRequest
Antwoord: 200
GET /api/v1/ai/reports
Section titled “GET /api/v1/ai/reports”List Reports
Recht: ai.use
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
company_id | string |
Antwoord: 200 · ReportRead[]
POST /api/v1/ai/reports
Section titled “POST /api/v1/ai/reports”Create Report
Recht: ai.use
Request body: ReportCreate
Antwoord: 201 · ReportRead
GET /api/v1/ai/reports/{report_id}
Section titled “GET /api/v1/ai/reports/{report_id}”Get Report
Recht: ai.use
Padparameters: report_id
Antwoord: 200 · ReportRead
PUT /api/v1/ai/reports/{report_id}
Section titled “PUT /api/v1/ai/reports/{report_id}”Update Report
Recht: ai.use
Padparameters: report_id
Request body: ReportUpdate
Antwoord: 200 · ReportRead
DELETE /api/v1/ai/reports/{report_id}
Section titled “DELETE /api/v1/ai/reports/{report_id}”Delete Report
Recht: ai.use
Padparameters: report_id
Antwoord: 204
POST /api/v1/ai/reports/generate
Section titled “POST /api/v1/ai/reports/generate”Generate Report
Recht: ai.use
Request body: ReportGenerateRequest
Antwoord: 200
GET /api/v1/ai/settings
Section titled “GET /api/v1/ai/settings”Get Ai Settings
Recht: ai.settings.manage
Antwoord: 200 · AISettingsRead
PUT /api/v1/ai/settings
Section titled “PUT /api/v1/ai/settings”Save Ai Settings
Recht: ai.settings.manage
Request body: AISettingsWrite
Antwoord: 200 · AISettingsRead
DELETE /api/v1/ai/settings
Section titled “DELETE /api/v1/ai/settings”Delete Ai Settings
Recht: ai.settings.manage
Antwoord: 204
POST /api/v1/ai/settings/models
Section titled “POST /api/v1/ai/settings/models”List Ai Models — Live model listing for the settings picker — a settings-page helper like the test button, so a provider failure comes back as data, never a 500.
Recht: ai.settings.manage
Request body: AIModelsRequest
Antwoord: 200 · AIModelsResult
POST /api/v1/ai/settings/test
Section titled “POST /api/v1/ai/settings/test”Test Ai Settings
Recht: ai.settings.manage
Antwoord: 200 · AITestResult
POST /api/v1/ai/tasks/parse
Section titled “POST /api/v1/ai/tasks/parse”Task Parse — One dictation into a draft task. Creates nothing (#129’s rule).
Recht: ai.use
Request body: TaskParseRequest
Antwoord: 200 · TaskParseResult
POST /api/v1/ai/tasks/transcribe
Section titled “POST /api/v1/ai/tasks/transcribe”Task Transcribe — Speech to text for the dictated-task field (#382).
Recht: ai.use
Request body: TaskTranscribeRequest
Antwoord: 200 · TimeTranscribeResult
POST /api/v1/ai/time/parse
Section titled “POST /api/v1/ai/time/parse”Time Parse
Recht: ai.use
Request body: TimeParseRequest
Antwoord: 200 · TimeParseResult
POST /api/v1/ai/time/reconstruct
Section titled “POST /api/v1/ai/time/reconstruct”Time Reconstruct
Recht: ai.use
Request body: TimeReconstructRequest
Antwoord: 200 · TimeReconstructResult
POST /api/v1/ai/time/transcribe
Section titled “POST /api/v1/ai/time/transcribe”Time Transcribe — Speech to text for the quick-add field (#246).
Recht: ai.use
Request body: TimeTranscribeRequest
Antwoord: 200 · TimeTranscribeResult
GET /api/v1/ai/usage
Section titled “GET /api/v1/ai/usage”Ai Usage
Recht: ai.settings.manage
Antwoord: 200 · AIUsageSummary
automation
Section titled “automation”| Endpoint | Recht |
|---|---|
GET /automation/catalog | automation.rule.read |
POST /automation/dry-run | automation.rule.write |
GET /automation/rules | automation.rule.read |
POST /automation/rules | automation.rule.write |
GET /automation/rules/{rule_id} | automation.rule.read |
PATCH /automation/rules/{rule_id} | automation.rule.write |
DELETE /automation/rules/{rule_id} | automation.rule.write |
GET /automation/runs | automation.run.read |
Parameters en schema’s per endpoint
GET /api/v1/automation/catalog
Section titled “GET /api/v1/automation/catalog”Get Catalog — The trigger events and action types the rule editor may offer (code-defined).
Recht: automation.rule.read
Antwoord: 200 · CatalogRead
POST /api/v1/automation/dry-run
Section titled “POST /api/v1/automation/dry-run”Dry Run — Evaluate a draft rule against a sample entity; executes nothing.
Recht: automation.rule.write
Request body: DryRunRequest
Antwoord: 200 · DryRunResult
GET /api/v1/automation/rules
Section titled “GET /api/v1/automation/rules”List Rules
Recht: automation.rule.read
Antwoord: 200 · RuleRead[]
POST /api/v1/automation/rules
Section titled “POST /api/v1/automation/rules”Create Rule
Recht: automation.rule.write
Request body: RuleCreate
Antwoord: 201 · RuleRead
GET /api/v1/automation/rules/{rule_id}
Section titled “GET /api/v1/automation/rules/{rule_id}”Get Rule
Recht: automation.rule.read
Padparameters: rule_id
Antwoord: 200 · RuleRead
PATCH /api/v1/automation/rules/{rule_id}
Section titled “PATCH /api/v1/automation/rules/{rule_id}”Update Rule
Recht: automation.rule.write
Padparameters: rule_id
Request body: RuleUpdate
Antwoord: 200 · RuleRead
DELETE /api/v1/automation/rules/{rule_id}
Section titled “DELETE /api/v1/automation/rules/{rule_id}”Delete Rule
Recht: automation.rule.write
Padparameters: rule_id
Antwoord: 204
GET /api/v1/automation/runs
Section titled “GET /api/v1/automation/runs”List Runs
Recht: automation.run.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
rule_id | string | |
limit | integer | (default 50) |
offset | integer | (default 0) |
Antwoord: 200 · Page_RunRead_
| Endpoint | Recht |
|---|---|
POST /bulk/company/delete | companies.company.delete |
POST /bulk/company/update | companies.company.write |
POST /bulk/contact/delete | contacts.contact.delete |
POST /bulk/contact/update | contacts.contact.write |
POST /bulk/domain/delete | domains.domain.delete |
POST /bulk/domain/update | domains.domain.write |
POST /bulk/interaction/delete | interactions.interaction.delete |
POST /bulk/invoice/delete | invoicing.invoice.delete |
POST /bulk/project/delete | projects.project.delete |
POST /bulk/project/update | projects.project.write |
POST /bulk/subscription/delete | subscriptions.subscription.delete |
POST /bulk/subscription/update | subscriptions.subscription.write |
POST /bulk/task/delete | tasks.task.delete |
POST /bulk/task/update | tasks.task.write |
POST /bulk/uptime_monitor/delete | uptime.monitor.write |
POST /bulk/uptime_monitor/update | uptime.monitor.write |
POST /bulk/website/delete | websites.website.delete |
POST /bulk/website/update | websites.website.write |
Parameters en schema’s per endpoint
POST /api/v1/bulk/company/delete
Section titled “POST /api/v1/bulk/company/delete”Bulk Delete Company — Delete a selection of company records. Permanent, and per row: the rows the batch could do are done, and the rest come back in failed.
Recht: companies.company.delete
Request body: BulkDeleteRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/company/update
Section titled “POST /api/v1/bulk/company/update”Bulk Update Company — Set fields on a selection of company records: status. Keys are the entity’s own stable column keys (the ones its CSV export uses). An absent key leaves every row’s own value alone; an explicit null clears it where the field allows that. Rows are independent — an ineligible one is reported in failed, never rolled back over the rest.
Recht: companies.company.write
Request body: BulkUpdateRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/contact/delete
Section titled “POST /api/v1/bulk/contact/delete”Bulk Delete Contact — Delete a selection of contact records. Permanent, and per row: the rows the batch could do are done, and the rest come back in failed.
Recht: contacts.contact.delete
Request body: BulkDeleteRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/contact/update
Section titled “POST /api/v1/bulk/contact/update”Bulk Update Contact — Set fields on a selection of contact records: company. Keys are the entity’s own stable column keys (the ones its CSV export uses). An absent key leaves every row’s own value alone; an explicit null clears it where the field allows that. Rows are independent — an ineligible one is reported in failed, never rolled back over the rest.
Recht: contacts.contact.write
Request body: BulkUpdateRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/domain/delete
Section titled “POST /api/v1/bulk/domain/delete”Bulk Delete Domain — Delete a selection of domain records. Permanent, and per row: the rows the batch could do are done, and the rest come back in failed.
Recht: domains.domain.delete
Request body: BulkDeleteRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/domain/update
Section titled “POST /api/v1/bulk/domain/update”Bulk Update Domain — Set fields on a selection of domain records: status, company, registrar_provider, dns_provider, email_provider, invoiceable, next_invoice_date, billed_until, start_date, price_override. Keys are the entity’s own stable column keys (the ones its CSV export uses). An absent key leaves every row’s own value alone; an explicit null clears it where the field allows that. Rows are independent — an ineligible one is reported in failed, never rolled back over the rest.
Recht: domains.domain.write
Request body: BulkUpdateRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/interaction/delete
Section titled “POST /api/v1/bulk/interaction/delete”Bulk Delete Interaction — Delete a selection of interaction records. Permanent, and per row: the rows the batch could do are done, and the rest come back in failed.
Recht: interactions.interaction.delete
Request body: BulkDeleteRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/invoice/delete
Section titled “POST /api/v1/bulk/invoice/delete”Bulk Delete Invoice — Delete a selection of invoice records. Permanent, and per row: the rows the batch could do are done, and the rest come back in failed.
Recht: invoicing.invoice.delete
Request body: BulkDeleteRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/project/delete
Section titled “POST /api/v1/bulk/project/delete”Bulk Delete Project — Delete a selection of project records. Permanent, and per row: the rows the batch could do are done, and the rest come back in failed.
Recht: projects.project.delete
Request body: BulkDeleteRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/project/update
Section titled “POST /api/v1/bulk/project/update”Bulk Update Project — Set fields on a selection of project records: status, company, billable_default. Keys are the entity’s own stable column keys (the ones its CSV export uses). An absent key leaves every row’s own value alone; an explicit null clears it where the field allows that. Rows are independent — an ineligible one is reported in failed, never rolled back over the rest.
Recht: projects.project.write
Request body: BulkUpdateRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/subscription/delete
Section titled “POST /api/v1/bulk/subscription/delete”Bulk Delete Subscription — Delete a selection of subscription records. Permanent, and per row: the rows the batch could do are done, and the rest come back in failed.
Recht: subscriptions.subscription.delete
Request body: BulkDeleteRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/subscription/update
Section titled “POST /api/v1/bulk/subscription/update”Bulk Update Subscription — Set fields on a selection of subscription records: status, type, company, billed_until, billed_in_advance, notes_on_invoice. Keys are the entity’s own stable column keys (the ones its CSV export uses). An absent key leaves every row’s own value alone; an explicit null clears it where the field allows that. Rows are independent — an ineligible one is reported in failed, never rolled back over the rest.
Recht: subscriptions.subscription.write
Request body: BulkUpdateRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/task/delete
Section titled “POST /api/v1/bulk/task/delete”Bulk Delete Task — Delete a selection of task records. Permanent, and per row: the rows the batch could do are done, and the rest come back in failed.
Recht: tasks.task.delete
Request body: BulkDeleteRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/task/update
Section titled “POST /api/v1/bulk/task/update”Bulk Update Task — Set fields on a selection of task records: status, assignee, priority, project, company, due_date. Keys are the entity’s own stable column keys (the ones its CSV export uses). An absent key leaves every row’s own value alone; an explicit null clears it where the field allows that. Rows are independent — an ineligible one is reported in failed, never rolled back over the rest.
Recht: tasks.task.write
Request body: BulkUpdateRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/uptime_monitor/delete
Section titled “POST /api/v1/bulk/uptime_monitor/delete”Bulk Delete Uptime Monitor — Delete a selection of uptime_monitor records. Permanent, and per row: the rows the batch could do are done, and the rest come back in failed.
Recht: uptime.monitor.write
Request body: BulkDeleteRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/uptime_monitor/update
Section titled “POST /api/v1/bulk/uptime_monitor/update”Bulk Update Uptime Monitor — Set fields on a selection of uptime_monitor records: company. Keys are the entity’s own stable column keys (the ones its CSV export uses). An absent key leaves every row’s own value alone; an explicit null clears it where the field allows that. Rows are independent — an ineligible one is reported in failed, never rolled back over the rest.
Recht: uptime.monitor.write
Request body: BulkUpdateRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/website/delete
Section titled “POST /api/v1/bulk/website/delete”Bulk Delete Website — Delete a selection of website records. Permanent, and per row: the rows the batch could do are done, and the rest come back in failed.
Recht: websites.website.delete
Request body: BulkDeleteRequest
Antwoord: 200 · BulkActionResult
POST /api/v1/bulk/website/update
Section titled “POST /api/v1/bulk/website/update”Bulk Update Website — Set fields on a selection of website records: hosting, uptime_enabled. Keys are the entity’s own stable column keys (the ones its CSV export uses). An absent key leaves every row’s own value alone; an explicit null clears it where the field allows that. Rows are independent — an ineligible one is reported in failed, never rolled back over the rest.
Recht: websites.website.write
Request body: BulkUpdateRequest
Antwoord: 200 · BulkActionResult
custom-fields
Section titled “custom-fields”| Endpoint | Recht |
|---|---|
GET /custom-fields/definitions | settings.customfields.read |
POST /custom-fields/definitions | settings.customfields.write |
PATCH /custom-fields/definitions/{definition_id} | settings.customfields.write |
DELETE /custom-fields/definitions/{definition_id} | settings.customfields.write |
GET /custom-fields/definitions/batch | settings.customfields.read |
GET /custom-fields/entity-types | settings.customfields.read |
GET /custom-fields/scopes | settings.customfields.read |
Parameters en schema’s per endpoint
GET /api/v1/custom-fields/definitions
Section titled “GET /api/v1/custom-fields/definitions”List Definitions
Recht: settings.customfields.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
entity_type | string · verplicht | |
include_inactive | boolean | (default false) |
Antwoord: 200 · CustomFieldDefinitionRead[]
POST /api/v1/custom-fields/definitions
Section titled “POST /api/v1/custom-fields/definitions”Create Definition
Recht: settings.customfields.write
Request body: CustomFieldDefinitionCreate
Antwoord: 201 · CustomFieldDefinitionRead
PATCH /api/v1/custom-fields/definitions/{definition_id}
Section titled “PATCH /api/v1/custom-fields/definitions/{definition_id}”Update Definition
Recht: settings.customfields.write
Padparameters: definition_id
Request body: CustomFieldDefinitionUpdate
Antwoord: 200 · CustomFieldDefinitionRead
DELETE /api/v1/custom-fields/definitions/{definition_id}
Section titled “DELETE /api/v1/custom-fields/definitions/{definition_id}”Delete Definition
Recht: settings.customfields.write
Padparameters: definition_id
Antwoord: 204
GET /api/v1/custom-fields/definitions/batch
Section titled “GET /api/v1/custom-fields/definitions/batch”List Definitions Batch — Several entity types’ definitions in one call, keyed by entity type.
Recht: settings.customfields.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
entity_type | string[] · verplicht | |
include_inactive | boolean | (default false) |
Antwoord: 200 · object
GET /api/v1/custom-fields/entity-types
Section titled “GET /api/v1/custom-fields/entity-types”List Entity Types
Recht: settings.customfields.read
Antwoord: 200 · array
GET /api/v1/custom-fields/scopes
Section titled “GET /api/v1/custom-fields/scopes”List Scopes — The dimensions a definition of entity_type may be narrowed to, with this tenant’s options for each (scoping.py). Empty for an entity type no module has registered a dimension for — which is what tells the settings screen not to draw the control (#253).
Recht: settings.customfields.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
entity_type | string · verplicht |
Antwoord: 200 · CustomFieldScopeRead[]
dashboard
Section titled “dashboard”| Endpoint | Recht |
|---|---|
GET /dashboard/prefs | dashboard.prefs.read |
PUT /dashboard/prefs | dashboard.prefs.write |
DELETE /dashboard/prefs | dashboard.prefs.write |
PUT /dashboard/prefs/default | settings.dashboard.manage |
Parameters en schema’s per endpoint
GET /api/v1/dashboard/prefs
Section titled “GET /api/v1/dashboard/prefs”Get Prefs — The effective layout for the current user: own row → org template → none.
Recht: dashboard.prefs.read
Antwoord: 200 · DashboardPrefs
PUT /api/v1/dashboard/prefs
Section titled “PUT /api/v1/dashboard/prefs”Set Prefs
Recht: dashboard.prefs.write
Request body: DashboardPrefsUpdate
Antwoord: 200 · DashboardPrefs
DELETE /api/v1/dashboard/prefs
Section titled “DELETE /api/v1/dashboard/prefs”Reset Prefs — Drop the personal layout; the user falls back to the org template.
Recht: dashboard.prefs.write
Antwoord: 204
PUT /api/v1/dashboard/prefs/default
Section titled “PUT /api/v1/dashboard/prefs/default”Set Default Prefs — The org-wide template that members inherit (settings.dashboard.manage).
Recht: settings.dashboard.manage
Request body: DashboardPrefsUpdate
Antwoord: 200 · DashboardPrefs
email-settings
Section titled “email-settings”| Endpoint | Recht |
|---|---|
GET /settings/email | settings.email.manage |
PUT /settings/email | settings.email.manage |
DELETE /settings/email | settings.email.manage |
GET /settings/email/templates | settings.email.manage |
PUT /settings/email/templates | settings.email.manage |
POST /settings/email/templates/test | settings.email.manage |
POST /settings/email/test | settings.email.manage |
Parameters en schema’s per endpoint
GET /api/v1/settings/email
Section titled “GET /api/v1/settings/email”Get Email Settings — The org’s stored transport and the one actually sending (epic #199).
Recht: settings.email.manage
Antwoord: 200 · EmailSettingsRead
PUT /api/v1/settings/email
Section titled “PUT /api/v1/settings/email”Save Email Settings
Recht: settings.email.manage
Request body: EmailSettingsWrite
Antwoord: 200 · EmailSettingsRead
DELETE /api/v1/settings/email
Section titled “DELETE /api/v1/settings/email”Delete Email Settings
Recht: settings.email.manage
Antwoord: 204
GET /api/v1/settings/email/templates
Section titled “GET /api/v1/settings/email/templates”List Email Templates
Recht: settings.email.manage
Antwoord: 200 · EmailTemplatesRead
PUT /api/v1/settings/email/templates
Section titled “PUT /api/v1/settings/email/templates”Save Email Template — Upsert one (kind, locale) override; blank subject and body resets it to default.
Recht: settings.email.manage
Request body: EmailTemplateWrite
Antwoord: 200 · EmailTemplateItem
POST /api/v1/settings/email/templates/test
Section titled “POST /api/v1/settings/email/templates/test”Test Email Template — Send a preview of the draft (or stored/default) to the acting admin.
Recht: settings.email.manage
Request body: EmailTemplateTest
Antwoord: 200 · EmailTestResult
POST /api/v1/settings/email/test
Section titled “POST /api/v1/settings/email/test”Test Email Settings
Recht: settings.email.manage
Antwoord: 200 · EmailTestResult
| Endpoint | Recht |
|---|---|
GET /files | Bewust open |
POST /files | files.file.write |
GET /files/{file_id} | Bewust open |
PATCH /files/{file_id} | files.file.write |
DELETE /files/{file_id} | files.file.write |
GET /files/{file_id}/public | Bewust open |
GET /files/{file_id}/thumbnail | Bewust open |
POST /files/inline | files.file.write |
Parameters en schema’s per endpoint
GET /api/v1/files
Section titled “GET /api/v1/files”List Files — The files attached to one entity (a task’s documents, a project’s documents).
Recht: Bewust open
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
entity_type | string · verplicht | |
entity_id | string · verplicht | |
include_inline | boolean | (default false) |
Antwoord: 200 · StoredFileRead[]
POST /api/v1/files
Section titled “POST /api/v1/files”Upload File — Multipart upload. Size and content type are bounded by instance config.
Recht: files.file.write
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
entity_type | string | |
entity_id | string | |
inline | boolean | (default false) |
Request body: Body_upload_file_api_v1_files_post
Antwoord: 201 · StoredFileRead
GET /api/v1/files/{file_id}
Section titled “GET /api/v1/files/{file_id}”Serve File — Stream the bytes. Cross-tenant ids read as 404 (tenant-scoped row lookup).
Recht: Bewust open
Padparameters: file_id
Antwoord: 200
PATCH /api/v1/files/{file_id}
Section titled “PATCH /api/v1/files/{file_id}”Update File — Tick or untick “the client may see this” on one attachment (the model’s client_visible). The only editable fact about a stored file: its bytes are immutable by construction (content-addressed) and its name is what the uploader gave it.
Recht: files.file.write
Padparameters: file_id
Request body: StoredFileUpdate
Antwoord: 200 · StoredFileRead
DELETE /api/v1/files/{file_id}
Section titled “DELETE /api/v1/files/{file_id}”Delete File — Remove the row and its bytes. Branding/avatar files carry extra guards (service).
Recht: files.file.write
Padparameters: file_id
Antwoord: 204
GET /api/v1/files/{file_id}/public
Section titled “GET /api/v1/files/{file_id}/public”Serve Public File — Anonymous serving for branding assets, org resolved strictly from the hostname.
Recht: Bewust open
Padparameters: file_id
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
size | integer | |
maskable | boolean | (default false) |
bg | string | (default #ffffff) |
Antwoord: 200
GET /api/v1/files/{file_id}/thumbnail
Section titled “GET /api/v1/files/{file_id}/thumbnail”Serve Thumbnail — A scaled-down preview of a stored raster image, so an attachment strip shows the screenshot rather than its filename and a client card shows the logo proof rather than a paperclip. Computed on demand, cached by ETag: the same 304 economy as the original.
Recht: Bewust open
Padparameters: file_id
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
size | integer | (default 480) |
Antwoord: 200
POST /api/v1/files/inline
Section titled “POST /api/v1/files/inline”Upload File Inline — The same upload as POST /files, carried as base64 inside a JSON body.
Recht: files.file.write
Request body: InlineUpload
Antwoord: 201 · StoredFileRead
google-analytics
Section titled “google-analytics”| Endpoint | Recht |
|---|---|
GET /google-analytics/properties | google_analytics.property.read |
GET /google-analytics/properties/{property_id} | google_analytics.property.read |
GET /google-analytics/properties/{property_id}/breakdown | google_analytics.property.read |
GET /google-analytics/properties/{property_id}/compatibility | google_analytics.report.run |
GET /google-analytics/properties/{property_id}/custom-dimensions | google_analytics.property.read |
GET /google-analytics/properties/{property_id}/custom-metrics | google_analytics.property.read |
GET /google-analytics/properties/{property_id}/data-retention | google_analytics.property.read |
GET /google-analytics/properties/{property_id}/data-streams | google_analytics.property.read |
GET /google-analytics/properties/{property_id}/firebase-links | google_analytics.property.read |
GET /google-analytics/properties/{property_id}/google-ads-links | google_analytics.property.read |
GET /google-analytics/properties/{property_id}/key-events | google_analytics.property.read |
GET /google-analytics/properties/{property_id}/metadata | google_analytics.property.read |
GET /google-analytics/properties/{property_id}/overview | google_analytics.property.read |
GET /google-analytics/properties/{property_id}/pivot | google_analytics.report.run |
GET /google-analytics/properties/{property_id}/realtime | google_analytics.property.read |
GET /google-analytics/properties/{property_id}/report | google_analytics.report.run |
GET /google-analytics/properties/{property_id}/timeseries | google_analytics.property.read |
Parameters en schema’s per endpoint
GET /api/v1/google-analytics/properties
Section titled “GET /api/v1/google-analytics/properties”List Google Analytics Properties — Every GA4 property the signed-in user’s Google account can read. Start here.
Recht: google_analytics.property.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
query | string | Filter by property name or id. |
Antwoord: 200 · GoogleAnalyticsPropertyList
GET /api/v1/google-analytics/properties/{property_id}
Section titled “GET /api/v1/google-analytics/properties/{property_id}”Get Google Analytics Property — One property’s own record: its currency, industry and reporting timezone.
Recht: google_analytics.property.read
Padparameters: property_id
Antwoord: 200 · GoogleAnalyticsProperty
GET /api/v1/google-analytics/properties/{property_id}/breakdown
Section titled “GET /api/v1/google-analytics/properties/{property_id}/breakdown”Google Analytics Breakdown — One dimension, ranked — top pages, channels, sources, devices, countries, events.
Recht: google_analytics.property.read
Padparameters: property_id
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dimension | string · verplicht | One GA4 dimension: pagePath, landingPage, sessionDefaultChannelGroup, sessionSource, sessionMedium, deviceCategory, country, city, eventName, browser, or any custom dimension from /metadata. |
metrics | string[] | Repeatable; defaults to sessions, totalUsers, keyEvents. |
period | string | The span to report on: a trailing window (30d, 90d, 365d), a preset (month, last_month, quarter, last_quarter) or a named calendar period (2026-07, 2026-Q3). An unknown value falls back to 30d. Dates are days in the property’s own reporting timezone — GET /properties/{property_id} tells you which. |
limit | integer | (default 25) |
order | string | A named metric or dimension; prefix with - for descending. |
filters | string[] | Dimension filters, repeatable: name==value (exact), name=@value (contains) or name=^value (begins with). All clauses must match. A clause that parses as none of these is refused rather than ignored. |
Antwoord: 200 · GoogleAnalyticsReport
GET /api/v1/google-analytics/properties/{property_id}/compatibility
Section titled “GET /api/v1/google-analytics/properties/{property_id}/compatibility”Google Analytics Compatibility — Which fields may still be combined with the ones named.
Recht: google_analytics.report.run
Padparameters: property_id
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dimensions | string[] | Already-chosen dimensions. |
metrics | string[] | Already-chosen metrics. |
Antwoord: 200 · GoogleAnalyticsCompatibility
GET /api/v1/google-analytics/properties/{property_id}/custom-dimensions
Section titled “GET /api/v1/google-analytics/properties/{property_id}/custom-dimensions”Google Analytics Custom Dimensions — The property’s own dimensions — the fields a report about this client can group by.
Recht: google_analytics.property.read
Padparameters: property_id
Antwoord: 200 · GoogleAnalyticsResourceList
GET /api/v1/google-analytics/properties/{property_id}/custom-metrics
Section titled “GET /api/v1/google-analytics/properties/{property_id}/custom-metrics”Google Analytics Custom Metrics — The property’s own metrics, with the unit each one is measured in.
Recht: google_analytics.property.read
Padparameters: property_id
Antwoord: 200 · GoogleAnalyticsResourceList
GET /api/v1/google-analytics/properties/{property_id}/data-retention
Section titled “GET /api/v1/google-analytics/properties/{property_id}/data-retention”Google Analytics Data Retention — How long this property keeps event-level data.
Recht: google_analytics.property.read
Padparameters: property_id
Antwoord: 200 · GoogleAnalyticsResourceList
GET /api/v1/google-analytics/properties/{property_id}/data-streams
Section titled “GET /api/v1/google-analytics/properties/{property_id}/data-streams”Google Analytics Data Streams — The web and app streams feeding this property, with their measurement IDs.
Recht: google_analytics.property.read
Padparameters: property_id
Antwoord: 200 · GoogleAnalyticsResourceList
GET /api/v1/google-analytics/properties/{property_id}/firebase-links
Section titled “GET /api/v1/google-analytics/properties/{property_id}/firebase-links”Google Analytics Firebase Links — Which Firebase projects feed this property — the app half of a client’s measurement.
Recht: google_analytics.property.read
Padparameters: property_id
Antwoord: 200 · GoogleAnalyticsResourceList
GET /api/v1/google-analytics/properties/{property_id}/google-ads-links
Section titled “GET /api/v1/google-analytics/properties/{property_id}/google-ads-links”Google Analytics Google Ads Links — Which Google Ads customers this property is linked to.
Recht: google_analytics.property.read
Padparameters: property_id
Antwoord: 200 · GoogleAnalyticsResourceList
GET /api/v1/google-analytics/properties/{property_id}/key-events
Section titled “GET /api/v1/google-analytics/properties/{property_id}/key-events”Google Analytics Key Events — The events this property counts as conversions (GA4’s own name for them is key events).
Recht: google_analytics.property.read
Padparameters: property_id
Antwoord: 200 · GoogleAnalyticsResourceList
GET /api/v1/google-analytics/properties/{property_id}/metadata
Section titled “GET /api/v1/google-analytics/properties/{property_id}/metadata”Google Analytics Metadata — Every dimension and metric this property will accept, custom ones included.
Recht: google_analytics.property.read
Padparameters: property_id
Antwoord: 200 · GoogleAnalyticsMetadata
GET /api/v1/google-analytics/properties/{property_id}/overview
Section titled “GET /api/v1/google-analytics/properties/{property_id}/overview”Google Analytics Overview — How a property did over a period, against the same period a year earlier, with the change already computed — plus the acquisition channel split.
Recht: google_analytics.property.read
Padparameters: property_id
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
period | string | The span to report on: a trailing window (30d, 90d, 365d), a preset (month, last_month, quarter, last_quarter) or a named calendar period (2026-07, 2026-Q3). An unknown value falls back to 30d. Dates are days in the property’s own reporting timezone — GET /properties/{property_id} tells you which. |
compare | string | year (default — what seasonality survives) or previous. |
Antwoord: 200 · GoogleAnalyticsOverview
GET /api/v1/google-analytics/properties/{property_id}/pivot
Section titled “GET /api/v1/google-analytics/properties/{property_id}/pivot”Google Analytics Pivot — One dimension crossed against another: channel by month, device by landing page.
Recht: google_analytics.report.run
Padparameters: property_id
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
metrics | string[] · verplicht | Repeatable GA4 metric names. At least one. |
pivot_on | string · verplicht | The dimension to spread across the columns. |
dimensions | string[] | The dimension(s) that make the rows. |
period | string | The span to report on: a trailing window (30d, 90d, 365d), a preset (month, last_month, quarter, last_quarter) or a named calendar period (2026-07, 2026-Q3). An unknown value falls back to 30d. Dates are days in the property’s own reporting timezone — GET /properties/{property_id} tells you which. |
limit | integer | (default 25) |
Antwoord: 200 · GoogleAnalyticsReport
GET /api/v1/google-analytics/properties/{property_id}/realtime
Section titled “GET /api/v1/google-analytics/properties/{property_id}/realtime”Google Analytics Realtime — Who is on the site in the last thirty minutes. There is no period here, by design — realtime answers about now and about nothing else.
Recht: google_analytics.property.read
Padparameters: property_id
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dimensions | string[] | Repeatable realtime dimensions: unifiedScreenName, country, deviceCategory. |
metrics | string[] | Repeatable; defaults to activeUsers. |
limit | integer | (default 50) |
Antwoord: 200 · GoogleAnalyticsRealtime
GET /api/v1/google-analytics/properties/{property_id}/report
Section titled “GET /api/v1/google-analytics/properties/{property_id}/report”Google Analytics Report — Any dimensions crossed with any metrics — the escape hatch for questions the curated reads do not answer.
Recht: google_analytics.report.run
Padparameters: property_id
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
metrics | string[] · verplicht | Repeatable GA4 metric names. At least one. |
dimensions | string[] | Repeatable GA4 dimension names; none is a total. |
period | string | The span to report on: a trailing window (30d, 90d, 365d), a preset (month, last_month, quarter, last_quarter) or a named calendar period (2026-07, 2026-Q3). An unknown value falls back to 30d. Dates are days in the property’s own reporting timezone — GET /properties/{property_id} tells you which. |
limit | integer | (default 25) |
offset | integer | (default 0) |
order | string | A named metric or dimension; prefix with - for descending. |
filters | string[] | Dimension filters, repeatable: name==value (exact), name=@value (contains) or name=^value (begins with). All clauses must match. A clause that parses as none of these is refused rather than ignored. |
Antwoord: 200 · GoogleAnalyticsReport
GET /api/v1/google-analytics/properties/{property_id}/timeseries
Section titled “GET /api/v1/google-analytics/properties/{property_id}/timeseries”Google Analytics Timeseries — The chosen metrics day by day, oldest first.
Recht: google_analytics.property.read
Padparameters: property_id
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
metrics | string[] | Repeatable GA4 metric names; defaults to sessions, totalUsers, keyEvents. |
period | string | The span to report on: a trailing window (30d, 90d, 365d), a preset (month, last_month, quarter, last_quarter) or a named calendar period (2026-07, 2026-Q3). An unknown value falls back to 30d. Dates are days in the property’s own reporting timezone — GET /properties/{property_id} tells you which. |
Antwoord: 200 · GoogleAnalyticsReport
google-search-console
Section titled “google-search-console”| Endpoint | Recht |
|---|---|
GET /google-search-console/ai-visibility | google_search_console.site.read |
GET /google-search-console/breakdown | google_search_console.site.read |
GET /google-search-console/hourly | google_search_console.site.read |
GET /google-search-console/inspect | google_search_console.site.read |
GET /google-search-console/movers | google_search_console.site.read |
GET /google-search-console/overview | google_search_console.site.read |
GET /google-search-console/query | google_search_console.report.run |
GET /google-search-console/search-types | google_search_console.site.read |
GET /google-search-console/site | google_search_console.site.read |
GET /google-search-console/sitemap | google_search_console.site.read |
GET /google-search-console/sitemaps | google_search_console.site.read |
GET /google-search-console/sites | google_search_console.site.read |
GET /google-search-console/timeseries | google_search_console.site.read |
Parameters en schema’s per endpoint
GET /api/v1/google-search-console/ai-visibility
Section titled “GET /api/v1/google-search-console/ai-visibility”Google Search Console Ai Visibility — How visible the site is in Google’s generative AI features — AI Overviews and AI Mode — as far as the Search Console API can say.
Recht: google_search_console.site.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
site | string · verplicht | The property exactly as GET /sites lists it: sc-domain:klant.nl for a domain property or https://www.klant.nl/ (trailing slash included) for a URL-prefix property. A bare hostname is read as the domain property. |
period | string | The span to report on: a trailing window (30d, 90d, 365d), a preset (month, last_month, quarter, last_quarter) or a named calendar period (2026-07, 2026-Q3). An unknown value falls back to 30d. Search Console keeps its days in Pacific time; the last two or three days are still being collected and are flagged as fresh. |
compare | string | year (default — what seasonality survives) or previous. |
Antwoord: 200 · GoogleSearchConsoleAiVisibility
GET /api/v1/google-search-console/breakdown
Section titled “GET /api/v1/google-search-console/breakdown”Google Search Console Breakdown — One dimension, ranked — top queries, top pages, countries, devices, or the search appearances (rich results, video, product snippets…) the site was shown with.
Recht: google_search_console.site.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
site | string · verplicht | The property exactly as GET /sites lists it: sc-domain:klant.nl for a domain property or https://www.klant.nl/ (trailing slash included) for a URL-prefix property. A bare hostname is read as the domain property. |
dimension | string | query (default), page, country, device or searchAppearance. (default query) |
period | string | The span to report on: a trailing window (30d, 90d, 365d), a preset (month, last_month, quarter, last_quarter) or a named calendar period (2026-07, 2026-Q3). An unknown value falls back to 30d. Search Console keeps its days in Pacific time; the last two or three days are still being collected and are flagged as fresh. |
search_type | string | web (default; includes AI Overviews, which cannot be split out), image, video, news, discover or googleNews. |
filters | string[] | Dimension filters, repeatable: dimension==value, dimension!=value, dimension=@value (contains), dimension!@value, dimension=~regex, dimension!~regex, on query, page, country (ISO 3166-1 alpha-3, lower case: nld), device (DESKTOP/MOBILE/TABLET) or searchAppearance. All clauses must match. A clause that parses as none of these is refused rather than ignored. |
limit | integer | (default 25) |
offset | integer | (default 0) |
order | string | Google ranks by clicks. Another metric (-impressions, -ctr, +position) is applied over the first thousand clicks-ranked rows, and the answer says so in warnings. |
Antwoord: 200 · GoogleSearchConsoleReport
GET /api/v1/google-search-console/hourly
Section titled “GET /api/v1/google-search-console/hourly”Google Search Console Hourly — Hour by hour over the last few days, today included and still moving — for “what happened this morning” and “did the launch land”. Every row may still change; there is no final hourly data, by Google’s design.
Recht: google_search_console.site.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
site | string · verplicht | The property exactly as GET /sites lists it: sc-domain:klant.nl for a domain property or https://www.klant.nl/ (trailing slash included) for a URL-prefix property. A bare hostname is read as the domain property. |
days | integer | How many days back, today included. Google keeps ten days of hourly rows. (default 2) |
search_type | string | web (default; includes AI Overviews, which cannot be split out), image, video, news, discover or googleNews. |
Antwoord: 200 · GoogleSearchConsoleReport
GET /api/v1/google-search-console/inspect
Section titled “GET /api/v1/google-search-console/inspect”Google Search Console Inspect Url — What Google’s index holds for one URL: whether it is indexed (verdict PASS) and if not why (coverage_state, indexing_state, robots_txt_state, page_fetch_state), which canonical Google chose against the one the page declares, when it was last crawled, and the rich results found. One URL per call — Google allows 2 000 inspections a day per property.
Recht: google_search_console.site.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
site | string · verplicht | The property exactly as GET /sites lists it: sc-domain:klant.nl for a domain property or https://www.klant.nl/ (trailing slash included) for a URL-prefix property. A bare hostname is read as the domain property. |
url | string · verplicht | The page to inspect. Must be under the property. |
language | string | BCP-47 code for the issue texts, e.g. nl. |
Antwoord: 200 · GoogleSearchConsoleInspection
GET /api/v1/google-search-console/movers
Section titled “GET /api/v1/google-search-console/movers”Google Search Console Movers — Which queries or pages moved most in average position between this period and the one it is compared against. change is positive for a climb. entered and dropped count what appeared or vanished entirely, which the rows cannot show.
Recht: google_search_console.site.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
site | string · verplicht | The property exactly as GET /sites lists it: sc-domain:klant.nl for a domain property or https://www.klant.nl/ (trailing slash included) for a URL-prefix property. A bare hostname is read as the domain property. |
period | string | The span to report on: a trailing window (30d, 90d, 365d), a preset (month, last_month, quarter, last_quarter) or a named calendar period (2026-07, 2026-Q3). An unknown value falls back to 30d. Search Console keeps its days in Pacific time; the last two or three days are still being collected and are flagged as fresh. |
compare | string | year (default — what seasonality survives) or previous. |
dimension | string | query (default) or page. (default query) |
limit | integer | (default 25) |
min_impressions | number | Ignore anything shown fewer times than this in either span. (default 10) |
search_type | string | web (default; includes AI Overviews, which cannot be split out), image, video, news, discover or googleNews. |
Antwoord: 200 · GoogleSearchConsoleMovers
GET /api/v1/google-search-console/overview
Section titled “GET /api/v1/google-search-console/overview”Google Search Console Overview — How a property did over a period — clicks, impressions, CTR and average position — against the same period a year earlier, with the change already computed, plus the split by device.
Recht: google_search_console.site.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
site | string · verplicht | The property exactly as GET /sites lists it: sc-domain:klant.nl for a domain property or https://www.klant.nl/ (trailing slash included) for a URL-prefix property. A bare hostname is read as the domain property. |
period | string | The span to report on: a trailing window (30d, 90d, 365d), a preset (month, last_month, quarter, last_quarter) or a named calendar period (2026-07, 2026-Q3). An unknown value falls back to 30d. Search Console keeps its days in Pacific time; the last two or three days are still being collected and are flagged as fresh. |
compare | string | year (default — what seasonality survives) or previous. |
search_type | string | web (default; includes AI Overviews, which cannot be split out), image, video, news, discover or googleNews. |
Antwoord: 200 · GoogleSearchConsoleOverview
GET /api/v1/google-search-console/query
Section titled “GET /api/v1/google-search-console/query”Google Search Console Query — Any dimensions crossed, with any filters, any aggregation and any data state — the escape hatch for questions the curated reads do not answer (query by page, page by country, branded queries by device…).
Recht: google_search_console.report.run
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
site | string · verplicht | The property exactly as GET /sites lists it: sc-domain:klant.nl for a domain property or https://www.klant.nl/ (trailing slash included) for a URL-prefix property. A bare hostname is read as the domain property. |
dimensions | string[] | Repeatable, in row-key order: query, page, country, device, searchAppearance, date, hour. None is a total. hour forces data_state hourly_all. |
period | string | The span to report on: a trailing window (30d, 90d, 365d), a preset (month, last_month, quarter, last_quarter) or a named calendar period (2026-07, 2026-Q3). An unknown value falls back to 30d. Search Console keeps its days in Pacific time; the last two or three days are still being collected and are flagged as fresh. |
search_type | string | web (default; includes AI Overviews, which cannot be split out), image, video, news, discover or googleNews. |
filters | string[] | Dimension filters, repeatable: dimension==value, dimension!=value, dimension=@value (contains), dimension!@value, dimension=~regex, dimension!~regex, on query, page, country (ISO 3166-1 alpha-3, lower case: nld), device (DESKTOP/MOBILE/TABLET) or searchAppearance. All clauses must match. A clause that parses as none of these is refused rather than ignored. |
aggregation | string | auto (default), byProperty, byPage or byNewsShowcasePanel. |
data_state | string | all (default here: includes the fresh, still-changing days), final (Google’s default: finalised data only, so the last days are missing) or hourly_all. |
limit | integer | (default 25) |
offset | integer | (default 0) |
Antwoord: 200 · GoogleSearchConsoleReport
GET /api/v1/google-search-console/search-types
Section titled “GET /api/v1/google-search-console/search-types”Google Search Console Search Types — The four metrics per Google surface — web, image, video, news, Discover, Google News — so “where is this site actually seen” is one answer. AI Overviews sit inside web and the API cannot split them out; see /ai-visibility for what it can say.
Recht: google_search_console.site.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
site | string · verplicht | The property exactly as GET /sites lists it: sc-domain:klant.nl for a domain property or https://www.klant.nl/ (trailing slash included) for a URL-prefix property. A bare hostname is read as the domain property. |
period | string | The span to report on: a trailing window (30d, 90d, 365d), a preset (month, last_month, quarter, last_quarter) or a named calendar period (2026-07, 2026-Q3). An unknown value falls back to 30d. Search Console keeps its days in Pacific time; the last two or three days are still being collected and are flagged as fresh. |
Antwoord: 200 · GoogleSearchConsoleSearchTypes
GET /api/v1/google-search-console/site
Section titled “GET /api/v1/google-search-console/site”Get Google Search Console Site — One property’s record: its kind (domain or URL prefix) and what this account may do there.
Recht: google_search_console.site.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
site | string · verplicht | The property exactly as GET /sites lists it: sc-domain:klant.nl for a domain property or https://www.klant.nl/ (trailing slash included) for a URL-prefix property. A bare hostname is read as the domain property. |
Antwoord: 200 · GoogleSearchConsoleSite
GET /api/v1/google-search-console/sitemap
Section titled “GET /api/v1/google-search-console/sitemap”Google Search Console Sitemap — One sitemap by its URL.
Recht: google_search_console.site.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
site | string · verplicht | The property exactly as GET /sites lists it: sc-domain:klant.nl for a domain property or https://www.klant.nl/ (trailing slash included) for a URL-prefix property. A bare hostname is read as the domain property. |
feedpath | string · verplicht | The sitemap’s own URL, as /sitemaps lists it. |
Antwoord: 200 · GoogleSearchConsoleSitemap
GET /api/v1/google-search-console/sitemaps
Section titled “GET /api/v1/google-search-console/sitemaps”Google Search Console Sitemaps — The sitemaps submitted for a property: when Google last read each, how many URLs it declares, and how many errors and warnings it carries. A sitemap nobody submitted, or one with errors, is the usual answer to “why are the new pages not indexed”.
Recht: google_search_console.site.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
site | string · verplicht | The property exactly as GET /sites lists it: sc-domain:klant.nl for a domain property or https://www.klant.nl/ (trailing slash included) for a URL-prefix property. A bare hostname is read as the domain property. |
Antwoord: 200 · GoogleSearchConsoleSitemapList
GET /api/v1/google-search-console/sites
Section titled “GET /api/v1/google-search-console/sites”List Google Search Console Sites — Every Search Console property the signed-in user’s Google account can read. Start here.
Recht: google_search_console.site.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
query | string | Filter by site URL. |
Antwoord: 200 · GoogleSearchConsoleSiteList
GET /api/v1/google-search-console/timeseries
Section titled “GET /api/v1/google-search-console/timeseries”Google Search Console Timeseries — The four metrics day by day, oldest first. A day with nothing shown is omitted by Google rather than answered as zero.
Recht: google_search_console.site.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
site | string · verplicht | The property exactly as GET /sites lists it: sc-domain:klant.nl for a domain property or https://www.klant.nl/ (trailing slash included) for a URL-prefix property. A bare hostname is read as the domain property. |
period | string | The span to report on: a trailing window (30d, 90d, 365d), a preset (month, last_month, quarter, last_quarter) or a named calendar period (2026-07, 2026-Q3). An unknown value falls back to 30d. Search Console keeps its days in Pacific time; the last two or three days are still being collected and are flagged as fresh. |
search_type | string | web (default; includes AI Overviews, which cannot be split out), image, video, news, discover or googleNews. |
filters | string[] | Dimension filters, repeatable: dimension==value, dimension!=value, dimension=@value (contains), dimension!@value, dimension=~regex, dimension!~regex, on query, page, country (ISO 3166-1 alpha-3, lower case: nld), device (DESKTOP/MOBILE/TABLET) or searchAppearance. All clauses must match. A clause that parses as none of these is refused rather than ignored. |
Antwoord: 200 · GoogleSearchConsoleReport
| Endpoint | Recht |
|---|---|
GET /impex/company/columns | companies.company.read |
GET /impex/company/export | impex.export, companies.company.read |
POST /impex/company/import | impex.import, companies.company.write |
POST /impex/company/inspect | impex.import, companies.company.write |
GET /impex/contact/columns | contacts.contact.read |
GET /impex/contact/export | impex.export, contacts.contact.read |
POST /impex/contact/import | impex.import, contacts.contact.write |
POST /impex/contact/inspect | impex.import, contacts.contact.write |
GET /impex/domain_tld_price/columns | domains.tld_price.read |
GET /impex/domain_tld_price/export | impex.export, domains.tld_price.read |
POST /impex/domain_tld_price/import | impex.import, domains.tld_price.manage |
POST /impex/domain_tld_price/inspect | impex.import, domains.tld_price.manage |
GET /impex/domain/columns | domains.domain.read |
GET /impex/domain/export | impex.export, domains.domain.read |
POST /impex/domain/import | impex.import, domains.domain.write |
POST /impex/domain/inspect | impex.import, domains.domain.write |
GET /impex/entities | Bewust open |
GET /impex/hosting/columns | hosting.hosting.read |
GET /impex/hosting/export | impex.export, hosting.hosting.read |
POST /impex/hosting/import | impex.import, hosting.hosting.write |
POST /impex/hosting/inspect | impex.import, hosting.hosting.write |
GET /impex/invoice/columns | invoicing.invoice.read |
GET /impex/invoice/export | impex.export, invoicing.invoice.read |
POST /impex/invoice/import | impex.import, invoicing.invoice.write |
POST /impex/invoice/inspect | impex.import, invoicing.invoice.write |
GET /impex/project/columns | projects.project.read |
GET /impex/project/export | impex.export, projects.project.read |
POST /impex/project/import | impex.import, projects.project.write |
POST /impex/project/inspect | impex.import, projects.project.write |
GET /impex/subscription_template/columns | subscriptions.subscription.read |
GET /impex/subscription_template/export | impex.export, subscriptions.subscription.read |
POST /impex/subscription_template/import | impex.import, subscriptions.template.manage |
POST /impex/subscription_template/inspect | impex.import, subscriptions.template.manage |
GET /impex/subscription_type/columns | subscriptions.subscription.read |
GET /impex/subscription_type/export | impex.export, subscriptions.subscription.read |
POST /impex/subscription_type/import | impex.import, subscriptions.type.manage |
POST /impex/subscription_type/inspect | impex.import, subscriptions.type.manage |
GET /impex/subscription/columns | subscriptions.subscription.read |
GET /impex/subscription/export | impex.export, subscriptions.subscription.read |
POST /impex/subscription/import | impex.import, subscriptions.subscription.write |
POST /impex/subscription/inspect | impex.import, subscriptions.subscription.write |
GET /impex/task/columns | tasks.task.read |
GET /impex/task/export | impex.export, tasks.task.read |
POST /impex/task/import | impex.import, tasks.task.write |
POST /impex/task/inspect | impex.import, tasks.task.write |
GET /impex/time_entry/columns | time.entry.read |
GET /impex/time_entry/export | impex.export, time.entry.read |
POST /impex/time_entry/import | impex.import, time.entry.write |
POST /impex/time_entry/inspect | impex.import, time.entry.write |
GET /impex/uptime_monitor/columns | uptime.monitor.read |
GET /impex/uptime_monitor/export | impex.export, uptime.monitor.read |
GET /impex/website/columns | websites.website.read |
GET /impex/website/export | impex.export, websites.website.read |
POST /impex/website/import | impex.import, websites.website.write |
POST /impex/website/inspect | impex.import, websites.website.write |
Parameters en schema’s per endpoint
GET /api/v1/impex/company/columns
Section titled “GET /api/v1/impex/company/columns”Impex Columns Company — Every column a company import can write into: the entity’s own, those contributed by other modules, and this organisation’s custom fields — with the labels, types and aliases a mapping UI needs.
Recht: companies.company.read
Antwoord: 200 · ImpexColumnsResponse
GET /api/v1/impex/company/export
Section titled “GET /api/v1/impex/company/export”Impex Export Company — Export the current filtered company list as CSV (UTF-8, BOM). Headers are stable column keys plus the tenant’s custom-field keys — the file re-imports into the same organisation unchanged.
Recht: impex.export, companies.company.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
q | string | Search, as on the list |
status | string | Status, as on the list |
mine | boolean | Only rows assigned to me (default false) |
sort | string | List sort key, ’-’ desc |
Antwoord: 200
POST /api/v1/impex/company/import
Section titled “POST /api/v1/impex/company/import”Impex Import Company — Import company rows from a spreadsheet, upserting on the first of client_number, name each row fills (max 2000 data rows per request). Accepts a CSV/TSV/Excel upload or a pasted block; the format is read from the content, not the filename.
Recht: impex.import, companies.company.write
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dry_run | boolean | Validate and report creates/updates/errors without writing anything. false applies the file all-or-nothing in one transaction. (default true) |
Request body: Body_impex_import_company_api_v1_impex_company_import_post
Antwoord: 200 · ImportReport
POST /api/v1/impex/company/inspect
Section titled “POST /api/v1/impex/company/inspect”Impex Inspect Company — Read an uploaded file and report what it is — format, worksheets, encoding, row count — plus each of its columns with sample cells and the suggested target column. Writes nothing and reads no records; returns a fingerprint the import repeats so a mapping cannot be applied to a different file.
Recht: impex.import, companies.company.write
Request body: Body_impex_inspect_company_api_v1_impex_company_inspect_post
Antwoord: 200 · ImpexInspectReport
GET /api/v1/impex/contact/columns
Section titled “GET /api/v1/impex/contact/columns”Impex Columns Contact — Every column a contact import can write into: the entity’s own, those contributed by other modules, and this organisation’s custom fields — with the labels, types and aliases a mapping UI needs.
Recht: contacts.contact.read
Antwoord: 200 · ImpexColumnsResponse
GET /api/v1/impex/contact/export
Section titled “GET /api/v1/impex/contact/export”Impex Export Contact — Export the current filtered contact list as CSV (UTF-8, BOM). Headers are stable column keys plus the tenant’s custom-field keys — the file re-imports into the same organisation unchanged.
Recht: impex.export, contacts.contact.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
q | string | Search, as on the list |
company_id | string | |
sort | string | List sort key, ’-’ desc |
Antwoord: 200
POST /api/v1/impex/contact/import
Section titled “POST /api/v1/impex/contact/import”Impex Import Contact — Import contact rows from a spreadsheet, upserting on the first of email each row fills (max 2000 data rows per request). Accepts a CSV/TSV/Excel upload or a pasted block; the format is read from the content, not the filename.
Recht: impex.import, contacts.contact.write
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dry_run | boolean | Validate and report creates/updates/errors without writing anything. false applies the file all-or-nothing in one transaction. (default true) |
Request body: Body_impex_import_contact_api_v1_impex_contact_import_post
Antwoord: 200 · ImportReport
POST /api/v1/impex/contact/inspect
Section titled “POST /api/v1/impex/contact/inspect”Impex Inspect Contact — Read an uploaded file and report what it is — format, worksheets, encoding, row count — plus each of its columns with sample cells and the suggested target column. Writes nothing and reads no records; returns a fingerprint the import repeats so a mapping cannot be applied to a different file.
Recht: impex.import, contacts.contact.write
Request body: Body_impex_inspect_contact_api_v1_impex_contact_inspect_post
Antwoord: 200 · ImpexInspectReport
GET /api/v1/impex/domain_tld_price/columns
Section titled “GET /api/v1/impex/domain_tld_price/columns”Impex Columns Domain Tld Price — Every column a domain_tld_price import can write into: the entity’s own, those contributed by other modules, and this organisation’s custom fields — with the labels, types and aliases a mapping UI needs.
Recht: domains.tld_price.read
Antwoord: 200 · ImpexColumnsResponse
GET /api/v1/impex/domain_tld_price/export
Section titled “GET /api/v1/impex/domain_tld_price/export”Impex Export Domain Tld Price — Export the current filtered domain_tld_price list as CSV (UTF-8, BOM). Headers are stable column keys plus the tenant’s custom-field keys — the file re-imports into the same organisation unchanged.
Recht: impex.export, domains.tld_price.read
Antwoord: 200
POST /api/v1/impex/domain_tld_price/import
Section titled “POST /api/v1/impex/domain_tld_price/import”Impex Import Domain Tld Price — Import domain_tld_price rows from a spreadsheet, create-only (no natural key) (max 2000 data rows per request). Accepts a CSV/TSV/Excel upload or a pasted block; the format is read from the content, not the filename.
Recht: impex.import, domains.tld_price.manage
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dry_run | boolean | Validate and report creates/updates/errors without writing anything. false applies the file all-or-nothing in one transaction. (default true) |
Request body: Body_impex_import_domain_tld_price_api_v1_impex_domain_tld_price_import_post
Antwoord: 200 · ImportReport
POST /api/v1/impex/domain_tld_price/inspect
Section titled “POST /api/v1/impex/domain_tld_price/inspect”Impex Inspect Domain Tld Price — Read an uploaded file and report what it is — format, worksheets, encoding, row count — plus each of its columns with sample cells and the suggested target column. Writes nothing and reads no records; returns a fingerprint the import repeats so a mapping cannot be applied to a different file.
Recht: impex.import, domains.tld_price.manage
Request body: Body_impex_inspect_domain_tld_price_api_v1_impex_domain_tld_price_inspect_post
Antwoord: 200 · ImpexInspectReport
GET /api/v1/impex/domain/columns
Section titled “GET /api/v1/impex/domain/columns”Impex Columns Domain — Every column a domain import can write into: the entity’s own, those contributed by other modules, and this organisation’s custom fields — with the labels, types and aliases a mapping UI needs.
Recht: domains.domain.read
Antwoord: 200 · ImpexColumnsResponse
GET /api/v1/impex/domain/export
Section titled “GET /api/v1/impex/domain/export”Impex Export Domain — Export the current filtered domain list as CSV (UTF-8, BOM). Headers are stable column keys plus the tenant’s custom-field keys — the file re-imports into the same organisation unchanged.
Recht: impex.export, domains.domain.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
q | string | Search, as on the list |
company_id | string | |
status | string | Status, as on the list |
registrar_provider_id | string | |
dns_provider_id | string | |
invoiceable | boolean | |
sort | string | List sort key, ’-’ desc |
Antwoord: 200
POST /api/v1/impex/domain/import
Section titled “POST /api/v1/impex/domain/import”Impex Import Domain — Import domain rows from a spreadsheet, upserting on the first of name each row fills (max 2000 data rows per request). Accepts a CSV/TSV/Excel upload or a pasted block; the format is read from the content, not the filename.
Recht: impex.import, domains.domain.write
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dry_run | boolean | Validate and report creates/updates/errors without writing anything. false applies the file all-or-nothing in one transaction. (default true) |
Request body: Body_impex_import_domain_api_v1_impex_domain_import_post
Antwoord: 200 · ImportReport
POST /api/v1/impex/domain/inspect
Section titled “POST /api/v1/impex/domain/inspect”Impex Inspect Domain — Read an uploaded file and report what it is — format, worksheets, encoding, row count — plus each of its columns with sample cells and the suggested target column. Writes nothing and reads no records; returns a fingerprint the import repeats so a mapping cannot be applied to a different file.
Recht: impex.import, domains.domain.write
Request body: Body_impex_inspect_domain_api_v1_impex_domain_inspect_post
Antwoord: 200 · ImpexInspectReport
GET /api/v1/impex/entities
Section titled “GET /api/v1/impex/entities”List Impex Entities — The entity types with CSV support, for the Instellingen → Import & export screen.
Recht: Bewust open
Antwoord: 200 · ImpexEntityInfo[]
GET /api/v1/impex/hosting/columns
Section titled “GET /api/v1/impex/hosting/columns”Impex Columns Hosting — Every column a hosting import can write into: the entity’s own, those contributed by other modules, and this organisation’s custom fields — with the labels, types and aliases a mapping UI needs.
Recht: hosting.hosting.read
Antwoord: 200 · ImpexColumnsResponse
GET /api/v1/impex/hosting/export
Section titled “GET /api/v1/impex/hosting/export”Impex Export Hosting — Export the current filtered hosting list as CSV (UTF-8, BOM). Headers are stable column keys plus the tenant’s custom-field keys — the file re-imports into the same organisation unchanged.
Recht: impex.export, hosting.hosting.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
q | string | Search, as on the list |
company_id | string | |
sort | string | List sort key, ’-’ desc |
Antwoord: 200
POST /api/v1/impex/hosting/import
Section titled “POST /api/v1/impex/hosting/import”Impex Import Hosting — Import hosting rows from a spreadsheet, upserting on the first of name each row fills (max 2000 data rows per request). Accepts a CSV/TSV/Excel upload or a pasted block; the format is read from the content, not the filename.
Recht: impex.import, hosting.hosting.write
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dry_run | boolean | Validate and report creates/updates/errors without writing anything. false applies the file all-or-nothing in one transaction. (default true) |
Request body: Body_impex_import_hosting_api_v1_impex_hosting_import_post
Antwoord: 200 · ImportReport
POST /api/v1/impex/hosting/inspect
Section titled “POST /api/v1/impex/hosting/inspect”Impex Inspect Hosting — Read an uploaded file and report what it is — format, worksheets, encoding, row count — plus each of its columns with sample cells and the suggested target column. Writes nothing and reads no records; returns a fingerprint the import repeats so a mapping cannot be applied to a different file.
Recht: impex.import, hosting.hosting.write
Request body: Body_impex_inspect_hosting_api_v1_impex_hosting_inspect_post
Antwoord: 200 · ImpexInspectReport
GET /api/v1/impex/invoice/columns
Section titled “GET /api/v1/impex/invoice/columns”Impex Columns Invoice — Every column a invoice import can write into: the entity’s own, those contributed by other modules, and this organisation’s custom fields — with the labels, types and aliases a mapping UI needs.
Recht: invoicing.invoice.read
Antwoord: 200 · ImpexColumnsResponse
GET /api/v1/impex/invoice/export
Section titled “GET /api/v1/impex/invoice/export”Impex Export Invoice — Export the current filtered invoice list as CSV (UTF-8, BOM). Headers are stable column keys plus the tenant’s custom-field keys — the file re-imports into the same organisation unchanged.
Recht: impex.export, invoicing.invoice.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
q | string | Search, as on the list |
status | string | Status, as on the list |
company_id | string | |
overdue | boolean | Only rows past their due date (default false) |
sort | string | List sort key, ’-’ desc |
Antwoord: 200
POST /api/v1/impex/invoice/import
Section titled “POST /api/v1/impex/invoice/import”Impex Import Invoice — Import invoice rows from a spreadsheet, upserting on the first of number each row fills (max 2000 data rows per request). Accepts a CSV/TSV/Excel upload or a pasted block; the format is read from the content, not the filename.
Recht: impex.import, invoicing.invoice.write
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dry_run | boolean | Validate and report creates/updates/errors without writing anything. false applies the file all-or-nothing in one transaction. (default true) |
Request body: Body_impex_import_invoice_api_v1_impex_invoice_import_post
Antwoord: 200 · ImportReport
POST /api/v1/impex/invoice/inspect
Section titled “POST /api/v1/impex/invoice/inspect”Impex Inspect Invoice — Read an uploaded file and report what it is — format, worksheets, encoding, row count — plus each of its columns with sample cells and the suggested target column. Writes nothing and reads no records; returns a fingerprint the import repeats so a mapping cannot be applied to a different file.
Recht: impex.import, invoicing.invoice.write
Request body: Body_impex_inspect_invoice_api_v1_impex_invoice_inspect_post
Antwoord: 200 · ImpexInspectReport
GET /api/v1/impex/project/columns
Section titled “GET /api/v1/impex/project/columns”Impex Columns Project — Every column a project import can write into: the entity’s own, those contributed by other modules, and this organisation’s custom fields — with the labels, types and aliases a mapping UI needs.
Recht: projects.project.read
Antwoord: 200 · ImpexColumnsResponse
GET /api/v1/impex/project/export
Section titled “GET /api/v1/impex/project/export”Impex Export Project — Export the current filtered project list as CSV (UTF-8, BOM). Headers are stable column keys plus the tenant’s custom-field keys — the file re-imports into the same organisation unchanged.
Recht: impex.export, projects.project.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
q | string | Search, as on the list |
status | string | Status, as on the list |
company_id | string | |
mine | boolean | Only rows assigned to me (default false) |
sort | string | List sort key, ’-’ desc |
burn | string |
Antwoord: 200
POST /api/v1/impex/project/import
Section titled “POST /api/v1/impex/project/import”Impex Import Project — Import project rows from a spreadsheet, upserting on the first of name each row fills (max 2000 data rows per request). Accepts a CSV/TSV/Excel upload or a pasted block; the format is read from the content, not the filename.
Recht: impex.import, projects.project.write
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dry_run | boolean | Validate and report creates/updates/errors without writing anything. false applies the file all-or-nothing in one transaction. (default true) |
Request body: Body_impex_import_project_api_v1_impex_project_import_post
Antwoord: 200 · ImportReport
POST /api/v1/impex/project/inspect
Section titled “POST /api/v1/impex/project/inspect”Impex Inspect Project — Read an uploaded file and report what it is — format, worksheets, encoding, row count — plus each of its columns with sample cells and the suggested target column. Writes nothing and reads no records; returns a fingerprint the import repeats so a mapping cannot be applied to a different file.
Recht: impex.import, projects.project.write
Request body: Body_impex_inspect_project_api_v1_impex_project_inspect_post
Antwoord: 200 · ImpexInspectReport
GET /api/v1/impex/subscription_template/columns
Section titled “GET /api/v1/impex/subscription_template/columns”Impex Columns Subscription Template — Every column a subscription_template import can write into: the entity’s own, those contributed by other modules, and this organisation’s custom fields — with the labels, types and aliases a mapping UI needs.
Recht: subscriptions.subscription.read
Antwoord: 200 · ImpexColumnsResponse
GET /api/v1/impex/subscription_template/export
Section titled “GET /api/v1/impex/subscription_template/export”Impex Export Subscription Template — Export the current filtered subscription_template list as CSV (UTF-8, BOM). Headers are stable column keys plus the tenant’s custom-field keys — the file re-imports into the same organisation unchanged.
Recht: impex.export, subscriptions.subscription.read
Antwoord: 200
POST /api/v1/impex/subscription_template/import
Section titled “POST /api/v1/impex/subscription_template/import”Impex Import Subscription Template — Import subscription_template rows from a spreadsheet, upserting on the first of name each row fills (max 2000 data rows per request). Accepts a CSV/TSV/Excel upload or a pasted block; the format is read from the content, not the filename.
Recht: impex.import, subscriptions.template.manage
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dry_run | boolean | Validate and report creates/updates/errors without writing anything. false applies the file all-or-nothing in one transaction. (default true) |
Request body: Body_impex_import_subscription_template_api_v1_impex_subscription_template_import_post
Antwoord: 200 · ImportReport
POST /api/v1/impex/subscription_template/inspect
Section titled “POST /api/v1/impex/subscription_template/inspect”Impex Inspect Subscription Template — Read an uploaded file and report what it is — format, worksheets, encoding, row count — plus each of its columns with sample cells and the suggested target column. Writes nothing and reads no records; returns a fingerprint the import repeats so a mapping cannot be applied to a different file.
Recht: impex.import, subscriptions.template.manage
Request body: Body_impex_inspect_subscription_template_api_v1_impex_subscription_template_inspect_post
Antwoord: 200 · ImpexInspectReport
GET /api/v1/impex/subscription_type/columns
Section titled “GET /api/v1/impex/subscription_type/columns”Impex Columns Subscription Type — Every column a subscription_type import can write into: the entity’s own, those contributed by other modules, and this organisation’s custom fields — with the labels, types and aliases a mapping UI needs.
Recht: subscriptions.subscription.read
Antwoord: 200 · ImpexColumnsResponse
GET /api/v1/impex/subscription_type/export
Section titled “GET /api/v1/impex/subscription_type/export”Impex Export Subscription Type — Export the current filtered subscription_type list as CSV (UTF-8, BOM). Headers are stable column keys plus the tenant’s custom-field keys — the file re-imports into the same organisation unchanged.
Recht: impex.export, subscriptions.subscription.read
Antwoord: 200
POST /api/v1/impex/subscription_type/import
Section titled “POST /api/v1/impex/subscription_type/import”Impex Import Subscription Type — Import subscription_type rows from a spreadsheet, upserting on the first of key each row fills (max 2000 data rows per request). Accepts a CSV/TSV/Excel upload or a pasted block; the format is read from the content, not the filename.
Recht: impex.import, subscriptions.type.manage
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dry_run | boolean | Validate and report creates/updates/errors without writing anything. false applies the file all-or-nothing in one transaction. (default true) |
Request body: Body_impex_import_subscription_type_api_v1_impex_subscription_type_import_post
Antwoord: 200 · ImportReport
POST /api/v1/impex/subscription_type/inspect
Section titled “POST /api/v1/impex/subscription_type/inspect”Impex Inspect Subscription Type — Read an uploaded file and report what it is — format, worksheets, encoding, row count — plus each of its columns with sample cells and the suggested target column. Writes nothing and reads no records; returns a fingerprint the import repeats so a mapping cannot be applied to a different file.
Recht: impex.import, subscriptions.type.manage
Request body: Body_impex_inspect_subscription_type_api_v1_impex_subscription_type_inspect_post
Antwoord: 200 · ImpexInspectReport
GET /api/v1/impex/subscription/columns
Section titled “GET /api/v1/impex/subscription/columns”Impex Columns Subscription — Every column a subscription import can write into: the entity’s own, those contributed by other modules, and this organisation’s custom fields — with the labels, types and aliases a mapping UI needs.
Recht: subscriptions.subscription.read
Antwoord: 200 · ImpexColumnsResponse
GET /api/v1/impex/subscription/export
Section titled “GET /api/v1/impex/subscription/export”Impex Export Subscription — Export the current filtered subscription list as CSV (UTF-8, BOM). Headers are stable column keys plus the tenant’s custom-field keys — the file re-imports into the same organisation unchanged.
Recht: impex.export, subscriptions.subscription.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
q | string | Search, as on the list |
status | string | Status, as on the list |
company_id | string | |
subscription_type_id | string | |
sort | string | List sort key, ’-’ desc |
Antwoord: 200
POST /api/v1/impex/subscription/import
Section titled “POST /api/v1/impex/subscription/import”Impex Import Subscription — Import subscription rows from a spreadsheet, upserting on the first of name each row fills (max 2000 data rows per request). Accepts a CSV/TSV/Excel upload or a pasted block; the format is read from the content, not the filename.
Recht: impex.import, subscriptions.subscription.write
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dry_run | boolean | Validate and report creates/updates/errors without writing anything. false applies the file all-or-nothing in one transaction. (default true) |
Request body: Body_impex_import_subscription_api_v1_impex_subscription_import_post
Antwoord: 200 · ImportReport
POST /api/v1/impex/subscription/inspect
Section titled “POST /api/v1/impex/subscription/inspect”Impex Inspect Subscription — Read an uploaded file and report what it is — format, worksheets, encoding, row count — plus each of its columns with sample cells and the suggested target column. Writes nothing and reads no records; returns a fingerprint the import repeats so a mapping cannot be applied to a different file.
Recht: impex.import, subscriptions.subscription.write
Request body: Body_impex_inspect_subscription_api_v1_impex_subscription_inspect_post
Antwoord: 200 · ImpexInspectReport
GET /api/v1/impex/task/columns
Section titled “GET /api/v1/impex/task/columns”Impex Columns Task — Every column a task import can write into: the entity’s own, those contributed by other modules, and this organisation’s custom fields — with the labels, types and aliases a mapping UI needs.
Recht: tasks.task.read
Antwoord: 200 · ImpexColumnsResponse
GET /api/v1/impex/task/export
Section titled “GET /api/v1/impex/task/export”Impex Export Task — Export the current filtered task list as CSV (UTF-8, BOM). Headers are stable column keys plus the tenant’s custom-field keys — the file re-imports into the same organisation unchanged.
Recht: impex.export, tasks.task.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
q | string | Search, as on the list |
status | string | Status, as on the list |
company_id | string | |
project_id | string | |
mine | boolean | Only rows assigned to me (default false) |
sort | string | List sort key, ’-’ desc |
Antwoord: 200
POST /api/v1/impex/task/import
Section titled “POST /api/v1/impex/task/import”Impex Import Task — Import task rows from a spreadsheet, create-only (no natural key) (max 2000 data rows per request). Accepts a CSV/TSV/Excel upload or a pasted block; the format is read from the content, not the filename.
Recht: impex.import, tasks.task.write
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dry_run | boolean | Validate and report creates/updates/errors without writing anything. false applies the file all-or-nothing in one transaction. (default true) |
Request body: Body_impex_import_task_api_v1_impex_task_import_post
Antwoord: 200 · ImportReport
POST /api/v1/impex/task/inspect
Section titled “POST /api/v1/impex/task/inspect”Impex Inspect Task — Read an uploaded file and report what it is — format, worksheets, encoding, row count — plus each of its columns with sample cells and the suggested target column. Writes nothing and reads no records; returns a fingerprint the import repeats so a mapping cannot be applied to a different file.
Recht: impex.import, tasks.task.write
Request body: Body_impex_inspect_task_api_v1_impex_task_inspect_post
Antwoord: 200 · ImpexInspectReport
GET /api/v1/impex/time_entry/columns
Section titled “GET /api/v1/impex/time_entry/columns”Impex Columns Time Entry — Every column a time_entry import can write into: the entity’s own, those contributed by other modules, and this organisation’s custom fields — with the labels, types and aliases a mapping UI needs.
Recht: time.entry.read
Antwoord: 200 · ImpexColumnsResponse
GET /api/v1/impex/time_entry/export
Section titled “GET /api/v1/impex/time_entry/export”Impex Export Time Entry — Export the current filtered time_entry list as CSV (UTF-8, BOM). Headers are stable column keys plus the tenant’s custom-field keys — the file re-imports into the same organisation unchanged.
Recht: impex.export, time.entry.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
mine | boolean | Only rows assigned to me (default false) |
user_id | string | |
company_id | string | |
project_id | string | |
task_id | string | |
date_from | string | Rows on/after this day |
date_to | string | Rows on/before this day |
sort | string | List sort key, ’-’ desc |
Antwoord: 200
POST /api/v1/impex/time_entry/import
Section titled “POST /api/v1/impex/time_entry/import”Impex Import Time Entry — Import time_entry rows from a spreadsheet, create-only (no natural key) (max 2000 data rows per request). Accepts a CSV/TSV/Excel upload or a pasted block; the format is read from the content, not the filename.
Recht: impex.import, time.entry.write
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dry_run | boolean | Validate and report creates/updates/errors without writing anything. false applies the file all-or-nothing in one transaction. (default true) |
Request body: Body_impex_import_time_entry_api_v1_impex_time_entry_import_post
Antwoord: 200 · ImportReport
POST /api/v1/impex/time_entry/inspect
Section titled “POST /api/v1/impex/time_entry/inspect”Impex Inspect Time Entry — Read an uploaded file and report what it is — format, worksheets, encoding, row count — plus each of its columns with sample cells and the suggested target column. Writes nothing and reads no records; returns a fingerprint the import repeats so a mapping cannot be applied to a different file.
Recht: impex.import, time.entry.write
Request body: Body_impex_inspect_time_entry_api_v1_impex_time_entry_inspect_post
Antwoord: 200 · ImpexInspectReport
GET /api/v1/impex/uptime_monitor/columns
Section titled “GET /api/v1/impex/uptime_monitor/columns”Impex Columns Uptime Monitor — Every column a uptime_monitor import can write into: the entity’s own, those contributed by other modules, and this organisation’s custom fields — with the labels, types and aliases a mapping UI needs.
Recht: uptime.monitor.read
Antwoord: 200 · ImpexColumnsResponse
GET /api/v1/impex/uptime_monitor/export
Section titled “GET /api/v1/impex/uptime_monitor/export”Impex Export Uptime Monitor — Export the current filtered uptime_monitor list as CSV (UTF-8, BOM). Headers are stable column keys plus the tenant’s custom-field keys — the file re-imports into the same organisation unchanged.
Recht: impex.export, uptime.monitor.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
q | string | Search, as on the list |
company_id | string |
Antwoord: 200
GET /api/v1/impex/website/columns
Section titled “GET /api/v1/impex/website/columns”Impex Columns Website — Every column a website import can write into: the entity’s own, those contributed by other modules, and this organisation’s custom fields — with the labels, types and aliases a mapping UI needs.
Recht: websites.website.read
Antwoord: 200 · ImpexColumnsResponse
GET /api/v1/impex/website/export
Section titled “GET /api/v1/impex/website/export”Impex Export Website — Export the current filtered website list as CSV (UTF-8, BOM). Headers are stable column keys plus the tenant’s custom-field keys — the file re-imports into the same organisation unchanged.
Recht: impex.export, websites.website.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
q | string | Search, as on the list |
company_id | string | |
hosting_id | string | |
uptime_enabled | boolean | |
sort | string | List sort key, ’-’ desc |
Antwoord: 200
POST /api/v1/impex/website/import
Section titled “POST /api/v1/impex/website/import”Impex Import Website — Import website rows from a spreadsheet, upserting on the first of domain each row fills (max 2000 data rows per request). Accepts a CSV/TSV/Excel upload or a pasted block; the format is read from the content, not the filename.
Recht: impex.import, websites.website.write
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
dry_run | boolean | Validate and report creates/updates/errors without writing anything. false applies the file all-or-nothing in one transaction. (default true) |
Request body: Body_impex_import_website_api_v1_impex_website_import_post
Antwoord: 200 · ImportReport
POST /api/v1/impex/website/inspect
Section titled “POST /api/v1/impex/website/inspect”Impex Inspect Website — Read an uploaded file and report what it is — format, worksheets, encoding, row count — plus each of its columns with sample cells and the suggested target column. Writes nothing and reads no records; returns a fingerprint the import repeats so a mapping cannot be applied to a different file.
Recht: impex.import, websites.website.write
Request body: Body_impex_inspect_website_api_v1_impex_website_inspect_post
Antwoord: 200 · ImpexInspectReport
meetings
Section titled “meetings”| Endpoint | Recht |
|---|---|
GET /meetings | meetings.meeting.read |
POST /meetings | meetings.meeting.write |
GET /meetings/{meeting_id} | meetings.meeting.read |
PATCH /meetings/{meeting_id} | meetings.meeting.write |
DELETE /meetings/{meeting_id} | meetings.meeting.delete |
POST /meetings/{meeting_id}/ai/revise | meetings.meeting.write |
POST /meetings/{meeting_id}/ai/transcribe | meetings.meeting.write |
DELETE /meetings/{meeting_id}/audio | meetings.meeting.write |
POST /meetings/{meeting_id}/chunks | meetings.meeting.write |
POST /meetings/{meeting_id}/confirm | meetings.meeting.write |
POST /meetings/{meeting_id}/finish | meetings.meeting.write |
PUT /meetings/{meeting_id}/minutes | meetings.meeting.write |
PUT /meetings/{meeting_id}/participants | meetings.meeting.write |
GET /meetings/{meeting_id}/pdf | meetings.meeting.read |
GET /meetings/{meeting_id}/preview | meetings.meeting.read |
POST /meetings/{meeting_id}/redraft | meetings.meeting.write |
POST /meetings/{meeting_id}/retry | meetings.meeting.write |
GET /meetings/{meeting_id}/status | meetings.meeting.read |
GET /meetings/{meeting_id}/transcript | meetings.meeting.read |
GET /meetings/policy | meetings.meeting.write |
GET /meetings/settings | meetings.settings.manage |
PUT /meetings/settings | meetings.settings.manage |
GET /meetings/settings/designs/{design}/source | meetings.settings.manage |
POST /meetings/settings/preview | meetings.settings.manage |
GET /meetings/settings/sections | meetings.settings.manage |
Parameters en schema’s per endpoint
GET /api/v1/meetings
Section titled “GET /api/v1/meetings”List Meetings
Recht: meetings.meeting.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
company_id | string | |
project_id | string | |
status | string | Comma-separated set; absent means every status |
q | string | |
limit | integer | (default 50) |
offset | integer | (default 0) |
count | boolean | (default true) |
Antwoord: 200 · MeetingList
POST /api/v1/meetings
Section titled “POST /api/v1/meetings”Create Meeting — Open a recording. Refused unless the caller states the participants were told.
Recht: meetings.meeting.write
Request body: MeetingCreate
Antwoord: 201 · MeetingDetail
GET /api/v1/meetings/{meeting_id}
Section titled “GET /api/v1/meetings/{meeting_id}”Get Meeting
Recht: meetings.meeting.read
Padparameters: meeting_id
Antwoord: 200 · MeetingDetail
PATCH /api/v1/meetings/{meeting_id}
Section titled “PATCH /api/v1/meetings/{meeting_id}”Update Meeting
Recht: meetings.meeting.write
Padparameters: meeting_id
Request body: MeetingUpdate
Antwoord: 200 · MeetingDetail
DELETE /api/v1/meetings/{meeting_id}
Section titled “DELETE /api/v1/meetings/{meeting_id}”Delete Meeting
Recht: meetings.meeting.delete
Padparameters: meeting_id
Antwoord: 204
POST /api/v1/meetings/{meeting_id}/ai/revise
Section titled “POST /api/v1/meetings/{meeting_id}/ai/revise”Revise Meeting With Ai — One typed instruction, applied to the meeting as the caller: the title, client, project, kind and date, the roster and its speaker labels, and — while under review — every part of the minutes. The answer is a diff; what the instruction did not mention stays.
Recht: meetings.meeting.write
Padparameters: meeting_id
Request body: MeetingReviseRequest
Antwoord: 200 · MeetingReviseResult
POST /api/v1/meetings/{meeting_id}/ai/transcribe
Section titled “POST /api/v1/meetings/{meeting_id}/ai/transcribe”Transcribe Revise Instruction — Speech to text for the revise box: an instruction spoken instead of typed. Nothing is written; the words come back to be read first.
Recht: meetings.meeting.write
Padparameters: meeting_id
Request body: MeetingTranscribeRequest
Antwoord: 200 · TimeTranscribeResult
DELETE /api/v1/meetings/{meeting_id}/audio
Section titled “DELETE /api/v1/meetings/{meeting_id}/audio”Delete Audio — Drop the recording now rather than at the retention date; the words stay.
Recht: meetings.meeting.write
Padparameters: meeting_id
Antwoord: 200 · MeetingDetail
POST /api/v1/meetings/{meeting_id}/chunks
Section titled “POST /api/v1/meetings/{meeting_id}/chunks”Add Chunk — One piece of the recording, base64 in JSON, while it is still being recorded.
Recht: meetings.meeting.write
Padparameters: meeting_id
Request body: MeetingChunk
Antwoord: 200 · object
POST /api/v1/meetings/{meeting_id}/confirm
Section titled “POST /api/v1/meetings/{meeting_id}/confirm”Confirm Meeting — The minutes become a contact moment and the ticked action items become tasks.
Recht: meetings.meeting.write
Padparameters: meeting_id
Request body: MeetingConfirm
Antwoord: 200 · MeetingConfirmResult
POST /api/v1/meetings/{meeting_id}/finish
Section titled “POST /api/v1/meetings/{meeting_id}/finish”Finish Meeting — The recorder stopped: the worker folds, transcribes and drafts.
Recht: meetings.meeting.write
Padparameters: meeting_id
Request body: MeetingFinish
Antwoord: 200 · MeetingDetail
PUT /api/v1/meetings/{meeting_id}/minutes
Section titled “PUT /api/v1/meetings/{meeting_id}/minutes”Save Minutes — The reviewer’s edits to the draft, kept without confirming.
Recht: meetings.meeting.write
Padparameters: meeting_id
Request body: MinutesDraft
Antwoord: 200 · MeetingDetail
PUT /api/v1/meetings/{meeting_id}/participants
Section titled “PUT /api/v1/meetings/{meeting_id}/participants”Set Participants — Who was in the meeting — a colleague, a contact of the client, or a name — and which speaker label (S1, S2 …) each of them is. Replaces the whole roster.
Recht: meetings.meeting.write
Padparameters: meeting_id
Request body: MeetingParticipants
Antwoord: 200 · MeetingDetail
GET /api/v1/meetings/{meeting_id}/pdf
Section titled “GET /api/v1/meetings/{meeting_id}/pdf”Meeting Pdf — The minutes as a PDF, with the chapters the caller ticked (the transcript is off unless asked for). A read, so it survives an expired licence.
Recht: meetings.meeting.read
Padparameters: meeting_id
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
sections | string | Comma-separated chapters; absent = the org’s defaults |
Antwoord: 200
GET /api/v1/meetings/{meeting_id}/preview
Section titled “GET /api/v1/meetings/{meeting_id}/preview”Preview Meeting — The minutes document as HTML — the same artefact the PDF prints.
Recht: meetings.meeting.read
Padparameters: meeting_id
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
sections | string | Comma-separated chapters; absent = the org’s defaults |
Antwoord: 200
POST /api/v1/meetings/{meeting_id}/redraft
Section titled “POST /api/v1/meetings/{meeting_id}/redraft”Redraft Meeting — Draft the minutes again over the transcript already here — after naming the speakers, so the action items land on the people who took them on. No new transcription.
Recht: meetings.meeting.write
Padparameters: meeting_id
Antwoord: 200 · MeetingDetail
POST /api/v1/meetings/{meeting_id}/retry
Section titled “POST /api/v1/meetings/{meeting_id}/retry”Retry Meeting
Recht: meetings.meeting.write
Padparameters: meeting_id
Antwoord: 200 · MeetingDetail
GET /api/v1/meetings/{meeting_id}/status
Section titled “GET /api/v1/meetings/{meeting_id}/status”Meeting Status — The one column the detail page polls while a worker holds the row.
Recht: meetings.meeting.read
Padparameters: meeting_id
Antwoord: 200 · MeetingStatusRead
GET /api/v1/meetings/{meeting_id}/transcript
Section titled “GET /api/v1/meetings/{meeting_id}/transcript”Meeting Transcript — The transcript, whole: as JSON (every line with its speaker’s name and the seconds it was said at — what an agent reads), or as a .txt, .md, .srt or .vtt file.
Recht: meetings.meeting.read
Padparameters: meeting_id
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
format | string | (default json) |
Antwoord: 200
GET /api/v1/meetings/policy
Section titled “GET /api/v1/meetings/policy”Meeting Policy — What the recorder asks before it records: readable by whoever may record.
Recht: meetings.meeting.write
Antwoord: 200 · MeetingPolicy
GET /api/v1/meetings/settings
Section titled “GET /api/v1/meetings/settings”Get Settings — The org’s meetings settings: the consent statement, the minutes document, the house writing instructions. No saved row means the defaults.
Recht: meetings.settings.manage
Antwoord: 200 · MeetingSettingsRead
PUT /api/v1/meetings/settings
Section titled “PUT /api/v1/meetings/settings”Update Settings
Recht: meetings.settings.manage
Request body: MeetingSettingsUpdate
Antwoord: 200 · MeetingSettingsRead
GET /api/v1/meetings/settings/designs/{design}/source
Section titled “GET /api/v1/meetings/settings/designs/{design}/source”Design Source — A shipped design’s own HTML and CSS, to start a custom minutes template from.
Recht: meetings.settings.manage
Padparameters: design
Antwoord: 200 · MeetingDesignSource
POST /api/v1/meetings/settings/preview
Section titled “POST /api/v1/meetings/settings/preview”Preview Settings — Render an unsaved design over the org’s latest minuted meeting — the editor’s preview.
Recht: meetings.settings.manage
Request body: MeetingSettingsPreviewRequest
Antwoord: 200
GET /api/v1/meetings/settings/sections
Section titled “GET /api/v1/meetings/settings/sections”Section Catalog — Every chapter a minutes document can carry, with the org’s default for each.
Recht: meetings.settings.manage
Antwoord: 200 · MeetingSectionCatalogEntry[]
| Endpoint | Recht |
|---|---|
GET /meta/domain-probe | Bewust open |
GET /meta/instance | Bewust open |
GET /meta/mcp | Bewust open |
GET /meta/me | Bewust open |
PATCH /meta/me | Bewust open |
GET /meta/modules | Bewust open |
GET /meta/tenant | Bewust open |
PATCH /meta/tenant | settings.branding.write |
GET /meta/tenant/domain | settings.domain.read |
POST /meta/tenant/domain | settings.domain.write |
DELETE /meta/tenant/domain | settings.domain.write |
POST /meta/tenant/domain/check | settings.domain.write |
GET /health | Geen recht vereist |
GET /health/ready | Geen recht vereist |
Parameters en schema’s per endpoint
GET /api/v1/meta/domain-probe
Section titled “GET /api/v1/meta/domain-probe”Domain Probe — Answer, to whoever can reach this hostname, that this instance serves that org.
Recht: Bewust open
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
nonce | string · verplicht |
Antwoord: 200 · DomainProbe
GET /api/v1/meta/instance
Section titled “GET /api/v1/meta/instance”Deployment Meta
Recht: Bewust open
Antwoord: 200 · InstanceMeta
GET /api/v1/meta/mcp
Section titled “GET /api/v1/meta/mcp”Mcp Meta — The section catalog, read off the mounted server rather than rebuilt.
Recht: Bewust open
Antwoord: 200 · McpMeta
GET /api/v1/meta/me
Section titled “GET /api/v1/meta/me”Me
Recht: Bewust open
Antwoord: 200 · MeInfo
PATCH /api/v1/meta/me
Section titled “PATCH /api/v1/meta/me”Update Me — Update the current user’s own profile/preferences.
Recht: Bewust open
Request body: MeUpdate
Antwoord: 200 · MeInfo
GET /api/v1/meta/modules
Section titled “GET /api/v1/meta/modules”Modules
Recht: Bewust open
Antwoord: 200 · ModulesMeta
GET /api/v1/meta/tenant
Section titled “GET /api/v1/meta/tenant”Tenant Branding
Recht: Bewust open
Antwoord: 200 · TenantBranding
PATCH /api/v1/meta/tenant
Section titled “PATCH /api/v1/meta/tenant”Update Tenant Branding — Update the org’s white-label settings. Applied on next render.
Recht: settings.branding.write
Request body: TenantBrandingUpdate
Antwoord: 200 · TenantBranding
GET /api/v1/meta/tenant/domain
Section titled “GET /api/v1/meta/tenant/domain”Domain Status
Recht: settings.domain.read
Antwoord: 200 · app__core__domainflow__DomainStatus
POST /api/v1/meta/tenant/domain
Section titled “POST /api/v1/meta/tenant/domain”Claim Domain
Recht: settings.domain.write
Request body: DomainClaim
Antwoord: 200 · app__core__domainflow__DomainStatus
DELETE /api/v1/meta/tenant/domain
Section titled “DELETE /api/v1/meta/tenant/domain”Clear Domain — Remove the custom domain (and any pending claim). The org keeps resolving via <slug>.<base_domain> — the UI warns that this changes the org’s address.
Recht: settings.domain.write
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
pending_only | boolean | (default false) |
Antwoord: 200 · app__core__domainflow__DomainStatus
POST /api/v1/meta/tenant/domain/check
Section titled “POST /api/v1/meta/tenant/domain/check”Check Domain — Probe the current stage’s DNS/edge conditions, advance whatever they satisfy, and report each layer separately (ownership TXT, traffic DNS, hostname, certificate).
Recht: settings.domain.write
Antwoord: 200 · DomainCheckReport
GET /health
Section titled “GET /health”Health — Liveness. Must stay cheap, dependency-free and unauthenticated: orchestrators poll it, and a probe that touches Postgres would restart a healthy API when the database blips. Readiness is a different question — see /health/ready.
Recht: Geen recht vereist
Antwoord: 200 · object
GET /health/ready
Section titled “GET /health/ready”Health Ready — Readiness: can this instance actually serve? Checks Postgres, Redis and Alembic.
Recht: Geen recht vereist
Antwoord: 200
microsoft
Section titled “microsoft”| Endpoint | Recht |
|---|---|
GET /microsoft/calendar/calendars | microsoft.connection.manage |
PUT /microsoft/calendar/calendars | microsoft.connection.manage |
GET /microsoft/calendar/channels | microsoft.calendar.read |
GET /microsoft/calendar/events | microsoft.calendar.read |
POST /microsoft/calendar/webhook | Bewust open |
GET /microsoft/connections | microsoft.settings.manage |
GET /microsoft/connections/me | microsoft.connection.manage |
PATCH /microsoft/connections/me | microsoft.connection.manage |
POST /microsoft/connections/me/disconnect | microsoft.connection.manage |
GET /microsoft/oauth/callback | microsoft.connection.manage |
GET /microsoft/oauth/connect | microsoft.connection.manage |
GET /microsoft/onedrive/browse | microsoft.onedrive.read |
DELETE /microsoft/onedrive/files/{drive_id}/{item_id} | microsoft.onedrive.write |
PUT /microsoft/onedrive/folder | microsoft.onedrive.write |
POST /microsoft/onedrive/folders | microsoft.onedrive.write |
GET /microsoft/onedrive/links | microsoft.onedrive.read |
POST /microsoft/onedrive/links | microsoft.onedrive.write |
DELETE /microsoft/onedrive/links/{link_id} | microsoft.onedrive.write |
POST /microsoft/onedrive/provision | microsoft.onedrive.write |
POST /microsoft/onedrive/provision-all | microsoft.settings.manage |
GET /microsoft/onedrive/state | microsoft.onedrive.read |
POST /microsoft/onedrive/upload-session | microsoft.onedrive.write |
POST /microsoft/outlook/import | interactions.interaction.write |
GET /microsoft/outlook/lookup | microsoft.connection.manage |
POST /microsoft/outlook/refresh | microsoft.connection.manage |
GET /microsoft/outlook/search | microsoft.connection.manage |
GET /microsoft/outlook/status | microsoft.connection.manage |
GET /microsoft/outlook/threads/{conversation_id} | microsoft.connection.manage |
GET /microsoft/settings | microsoft.settings.manage |
PUT /microsoft/settings | microsoft.settings.manage |
Parameters en schema’s per endpoint
GET /api/v1/microsoft/calendar/calendars
Section titled “GET /api/v1/microsoft/calendar/calendars”Microsoft Calendar List — The viewer’s own calendars — the selection UI’s read. Briefly cached; the existing Calendars.ReadWrite scope covers it, so no re-consent is needed.
Recht: microsoft.connection.manage
Antwoord: 200 · MicrosoftCalendarListEntry[]
PUT /api/v1/microsoft/calendar/calendars
Section titled “PUT /api/v1/microsoft/calendar/calendars”Microsoft Set Calendar Selection — Choose which extra calendars sync for the viewer. Deselecting removes the calendar’s cached events on the spot; selecting queues a sync so the agenda fills without waiting.
Recht: microsoft.connection.manage
Request body: MicrosoftCalendarSelection
Antwoord: 200 · MicrosoftCalendarListEntry[]
GET /api/v1/microsoft/calendar/channels
Section titled “GET /api/v1/microsoft/calendar/channels”Microsoft Calendar Channels — The viewer’s selection off the database alone — what the Agenda’s feeds menu reads on every open, so it never costs a Graph call.
Recht: microsoft.calendar.read
Antwoord: 200 · MicrosoftSelectedCalendar[]
GET /api/v1/microsoft/calendar/events
Section titled “GET /api/v1/microsoft/calendar/events”Microsoft Calendar Events — The viewer’s own cached Outlook events. Reads the local cache, never Graph live.
Recht: microsoft.calendar.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
date_from | string · verplicht | |
date_to | string · verplicht |
Antwoord: 200 · MicrosoftCalendarFeedItem[]
POST /api/v1/microsoft/calendar/webhook
Section titled “POST /api/v1/microsoft/calendar/webhook”Microsoft Calendar Webhook
Recht: Bewust open
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
validationToken | string |
Antwoord: 200
GET /api/v1/microsoft/connections
Section titled “GET /api/v1/microsoft/connections”List Connections
Recht: microsoft.settings.manage
Antwoord: 200 · MicrosoftConnectionRead[]
GET /api/v1/microsoft/connections/me
Section titled “GET /api/v1/microsoft/connections/me”My Connection
Recht: microsoft.connection.manage
Antwoord: 200 · MyMicrosoftConnectionRead
PATCH /api/v1/microsoft/connections/me
Section titled “PATCH /api/v1/microsoft/connections/me”Update My Connection
Recht: microsoft.connection.manage
Request body: MyMicrosoftConnectionUpdate
Antwoord: 200 · MyMicrosoftConnectionRead
POST /api/v1/microsoft/connections/me/disconnect
Section titled “POST /api/v1/microsoft/connections/me/disconnect”Disconnect My Connection
Recht: microsoft.connection.manage
Antwoord: 204
GET /api/v1/microsoft/oauth/callback
Section titled “GET /api/v1/microsoft/oauth/callback”Microsoft Oauth Callback — Store the grant and land the browser back where the connect started.
Recht: microsoft.connection.manage
Antwoord: 200
GET /api/v1/microsoft/oauth/connect
Section titled “GET /api/v1/microsoft/oauth/connect”Oauth Connect — 302 to Microsoft’s consent screen, asking exactly the enabled surfaces’ scopes.
Recht: microsoft.connection.manage
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
include_outlook | boolean | (default false) |
next | string | (default “) |
Antwoord: 200
GET /api/v1/microsoft/onedrive/browse
Section titled “GET /api/v1/microsoft/onedrive/browse”Browse — Live folder contents as the viewing user — Graph’s permissions are authoritative.
Recht: microsoft.onedrive.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
drive_id | string | |
folder_id | string | |
q | string | |
refresh | boolean | (default false) |
Antwoord: 200 · OneDriveBrowseResult
DELETE /api/v1/microsoft/onedrive/files/{drive_id}/{item_id}
Section titled “DELETE /api/v1/microsoft/onedrive/files/{drive_id}/{item_id}”Trash Item — Move an item to the drive’s recycle bin — the other half of unlink. Runs as the viewing user; drops every link naming the item, org-wide; refuses a non-empty folder.
Recht: microsoft.onedrive.write
Padparameters: drive_id, item_id
Antwoord: 204
PUT /api/v1/microsoft/onedrive/folder
Section titled “PUT /api/v1/microsoft/onedrive/folder”Set Folder — Point a record at an existing folder — the picker’s target. The service adds microsoft.onedrive.manage when the record already has a folder (§15’s two layers).
Recht: microsoft.onedrive.write
Request body: OneDriveFolderSet
Antwoord: 200 · OneDriveLinkRead
POST /api/v1/microsoft/onedrive/folders
Section titled “POST /api/v1/microsoft/onedrive/folders”Create Folder — Create a subfolder inside the folder being browsed, as the viewing user.
Recht: microsoft.onedrive.write
Request body: OneDriveFolderCreate
Antwoord: 201 · OneDriveFolder
GET /api/v1/microsoft/onedrive/links
Section titled “GET /api/v1/microsoft/onedrive/links”List Links
Recht: microsoft.onedrive.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
entity_type | string · verplicht | |
entity_id | string · verplicht | |
rollup | boolean | (default false) |
limit | integer |
Antwoord: 200 · OneDriveLinkRead[]
POST /api/v1/microsoft/onedrive/links
Section titled “POST /api/v1/microsoft/onedrive/links”Create Link
Recht: microsoft.onedrive.write
Request body: OneDriveLinkCreate
Antwoord: 201 · OneDriveLinkRead
DELETE /api/v1/microsoft/onedrive/links/{link_id}
Section titled “DELETE /api/v1/microsoft/onedrive/links/{link_id}”Delete Link — Unlink only. The item is never touched (the dialog says so too).
Recht: microsoft.onedrive.write
Padparameters: link_id
Antwoord: 204
POST /api/v1/microsoft/onedrive/provision
Section titled “POST /api/v1/microsoft/onedrive/provision”Provision Entity — Queue one entity’s folder — the panel’s “create folder” button.
Recht: microsoft.onedrive.write
Request body: OneDriveProvisionRequest
Antwoord: 202
POST /api/v1/microsoft/onedrive/provision-all
Section titled “POST /api/v1/microsoft/onedrive/provision-all”Provision All — Backfill: a folder for every client that has none (Instellingen → Microsoft 365).
Recht: microsoft.settings.manage
Antwoord: 200 · OneDriveBulkProvisionResult
GET /api/v1/microsoft/onedrive/state
Section titled “GET /api/v1/microsoft/onedrive/state”Onedrive State
Recht: microsoft.onedrive.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
entity_type | string | |
entity_id | string |
Antwoord: 200 · OneDriveStateRead
POST /api/v1/microsoft/onedrive/upload-session
Section titled “POST /api/v1/microsoft/onedrive/upload-session”Create Upload Session
Recht: microsoft.onedrive.write
Request body: OneDriveUploadSessionCreate
Antwoord: 200 · OneDriveUploadSession
POST /api/v1/microsoft/outlook/import
Section titled “POST /api/v1/microsoft/outlook/import”Import Outlook Message — Log one message the poller skipped, filed where the caller says. The declared key is the one for the row this writes; reaching into the mailbox is asked for in the service.
Recht: interactions.interaction.write
Request body: OutlookImportRequest
Antwoord: 201 · OutlookImportResult
GET /api/v1/microsoft/outlook/lookup
Section titled “GET /api/v1/microsoft/outlook/lookup”Lookup Outlook Message — Resolve a pasted reference to the conversation it names, in the caller’s own mailbox.
Recht: microsoft.connection.manage
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
reference | string · verplicht | An Outlook on the web link, a Graph message id, or an RFC-822 Message-ID |
Antwoord: 200 · OutlookLookupResult
POST /api/v1/microsoft/outlook/refresh
Section titled “POST /api/v1/microsoft/outlook/refresh”Refresh Outlook — Poll this mailbox once, now — rate-limited to one manual poll per minute.
Recht: microsoft.connection.manage
Antwoord: 200 · OutlookRefreshResult
GET /api/v1/microsoft/outlook/search
Section titled “GET /api/v1/microsoft/outlook/search”Search Outlook — Find a message in the caller’s own mailbox, by who it was with and when — named fields, never raw KQL, so a colon in an address cannot become an operator.
Recht: microsoft.connection.manage
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
participant | string | |
subject | string | |
after | string | |
before | string |
Antwoord: 200 · OutlookSearchResult
GET /api/v1/microsoft/outlook/status
Section titled “GET /api/v1/microsoft/outlook/status”Read Outlook Status — When this mailbox was last polled, and whether asking for another one is worth it.
Recht: microsoft.connection.manage
Antwoord: 200 · OutlookSyncStatus
GET /api/v1/microsoft/outlook/threads/{conversation_id}
Section titled “GET /api/v1/microsoft/outlook/threads/{conversation_id}”Read Outlook Thread — Every message of one conversation, marked with what is already on the timeline.
Recht: microsoft.connection.manage
Padparameters: conversation_id
Antwoord: 200 · OutlookLookupResult
GET /api/v1/microsoft/settings
Section titled “GET /api/v1/microsoft/settings”Get Settings
Recht: microsoft.settings.manage
Antwoord: 200 · MicrosoftSettingsRead
PUT /api/v1/microsoft/settings
Section titled “PUT /api/v1/microsoft/settings”Save Settings
Recht: microsoft.settings.manage
Request body: MicrosoftSettingsWrite
Antwoord: 200 · MicrosoftSettingsRead
| Endpoint | Recht |
|---|---|
GET /nav/prefs | nav.prefs.read |
PUT /nav/prefs | nav.prefs.write |
DELETE /nav/prefs | nav.prefs.write |
PUT /nav/prefs/default | settings.nav.manage |
Parameters en schema’s per endpoint
GET /api/v1/nav/prefs
Section titled “GET /api/v1/nav/prefs”Get Prefs — The effective layout for the current user: own row → org default → none.
Recht: nav.prefs.read
Antwoord: 200 · NavPrefs
PUT /api/v1/nav/prefs
Section titled “PUT /api/v1/nav/prefs”Set Prefs — A member’s personal order/visibility. Labels/groups are org config — stripped here.
Recht: nav.prefs.write
Request body: NavPrefsUpdate
Antwoord: 200 · NavPrefs
DELETE /api/v1/nav/prefs
Section titled “DELETE /api/v1/nav/prefs”Reset Prefs — Drop the personal layout; the user falls back to the org default.
Recht: nav.prefs.write
Antwoord: 204
PUT /api/v1/nav/prefs/default
Section titled “PUT /api/v1/nav/prefs/default”Set Default Prefs — The org-wide default that members inherit, plus tenant item/group labels (settings.nav.manage).
Recht: settings.nav.manage
Request body: NavPrefsUpdate
Antwoord: 200 · NavPrefs
notifications
Section titled “notifications”| Endpoint | Recht |
|---|---|
GET /notifications | notifications.notification.read |
PATCH /notifications/{notification_id} | notifications.notification.write |
GET /notifications/activity | notifications.notification.read |
GET /notifications/channels | notifications.channels.manage_own |
POST /notifications/channels | notifications.channels.manage_own |
PATCH /notifications/channels/{channel_id} | notifications.channels.manage_own |
DELETE /notifications/channels/{channel_id} | notifications.channels.manage_own |
POST /notifications/channels/{channel_id}/test | notifications.channels.manage_own |
POST /notifications/mark-all-read | notifications.notification.write |
GET /notifications/preferences | notifications.notification.read |
PUT /notifications/preferences | notifications.notification.write |
GET /notifications/preferences/defaults | notifications.defaults.manage |
PUT /notifications/preferences/defaults | notifications.defaults.manage |
GET /notifications/push/config | notifications.notification.read |
GET /notifications/push/subscriptions | notifications.notification.read |
POST /notifications/push/subscriptions | notifications.notification.write |
DELETE /notifications/push/subscriptions/{subscription_id} | notifications.notification.write |
POST /notifications/push/test | notifications.notification.write |
POST /notifications/push/unsubscribe | notifications.notification.write |
GET /notifications/unread-count | notifications.notification.read |
GET /notifications/watch | notifications.notification.read |
PUT /notifications/watch | notifications.notification.write |
Parameters en schema’s per endpoint
GET /api/v1/notifications
Section titled “GET /api/v1/notifications”List Notifications
Recht: notifications.notification.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
limit | integer | (default 50) |
offset | integer | (default 0) |
unread | boolean | true = unread only, false = read only |
entity_type | task · project · company · leave_request · timesheet · interaction | |
sort | string | created_at, ’-’ desc |
count | boolean | false skips the count query (docs/PERFORMANCE.md) (default true) |
Antwoord: 200 · Page_NotificationRead_
PATCH /api/v1/notifications/{notification_id}
Section titled “PATCH /api/v1/notifications/{notification_id}”Set Read — Reversible: read and unread are the same non-destructive toggle (docs/UX.md).
Recht: notifications.notification.write
Padparameters: notification_id
Request body: ReadUpdate
Antwoord: 200 · NotificationRead
GET /api/v1/notifications/activity
Section titled “GET /api/v1/notifications/activity”Activity
Recht: notifications.notification.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
entity_type | task · project · company · leave_request · timesheet · interaction · verplicht | |
entity_id | string · verplicht | |
limit | integer | (default 20) |
Antwoord: 200 · app__modules__notifications__schemas__ActivityItem[]
GET /api/v1/notifications/channels
Section titled “GET /api/v1/notifications/channels”List Channels
Recht: notifications.channels.manage_own
Antwoord: 200 · ChannelRead[]
POST /api/v1/notifications/channels
Section titled “POST /api/v1/notifications/channels”Create Channel
Recht: notifications.channels.manage_own
Request body: ChannelCreate
Antwoord: 201 · ChannelRead
PATCH /api/v1/notifications/channels/{channel_id}
Section titled “PATCH /api/v1/notifications/channels/{channel_id}”Update Channel
Recht: notifications.channels.manage_own
Padparameters: channel_id
Request body: ChannelUpdate
Antwoord: 200 · ChannelRead
DELETE /api/v1/notifications/channels/{channel_id}
Section titled “DELETE /api/v1/notifications/channels/{channel_id}”Delete Channel
Recht: notifications.channels.manage_own
Padparameters: channel_id
Antwoord: 204
POST /api/v1/notifications/channels/{channel_id}/test
Section titled “POST /api/v1/notifications/channels/{channel_id}/test”Test Channel — Send a test message and report the provider’s real error (#17).
Recht: notifications.channels.manage_own
Padparameters: channel_id
Antwoord: 200 · ChannelTestResult
POST /api/v1/notifications/mark-all-read
Section titled “POST /api/v1/notifications/mark-all-read”Mark All Read
Recht: notifications.notification.write
Antwoord: 200 · MarkAllResult
GET /api/v1/notifications/preferences
Section titled “GET /api/v1/notifications/preferences”Get Preferences — My effective matrix: what will actually happen on both channels, and who decided it.
Recht: notifications.notification.read
Antwoord: 200 · PreferenceMatrix
PUT /api/v1/notifications/preferences
Section titled “PUT /api/v1/notifications/preferences”Set Preferences
Recht: notifications.notification.write
Request body: PreferenceUpdate
Antwoord: 200 · PreferenceMatrix
GET /api/v1/notifications/preferences/defaults
Section titled “GET /api/v1/notifications/preferences/defaults”Get Default Preferences — What a member inherits before they override anything (org-wide), plus the shared rooms.
Recht: notifications.defaults.manage
Antwoord: 200 · PreferenceMatrix
PUT /api/v1/notifications/preferences/defaults
Section titled “PUT /api/v1/notifications/preferences/defaults”Set Default Preferences
Recht: notifications.defaults.manage
Request body: PreferenceUpdate
Antwoord: 200 · PreferenceMatrix
GET /api/v1/notifications/push/config
Section titled “GET /api/v1/notifications/push/config”Push Config — The org’s VAPID public key, minting the keypair on first use.
Recht: notifications.notification.read
Antwoord: 200 · PushConfig
GET /api/v1/notifications/push/subscriptions
Section titled “GET /api/v1/notifications/push/subscriptions”List Push Subscriptions — This person’s registered devices. The endpoint and key material never come back — the row exists to be recognised and revoked, and returning it would hand any XSS a push target.
Recht: notifications.notification.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
endpoint | string | the calling browser’s own endpoint, so its row can be marked current |
Antwoord: 200 · PushSubscriptionRead[]
POST /api/v1/notifications/push/subscriptions
Section titled “POST /api/v1/notifications/push/subscriptions”Register Push Subscription — Register (or refresh) the calling browser. Idempotent on the endpoint: the client re-presents it every session because endpoints rotate silently, and a rotated endpoint that nobody re-registered is a device that has stopped receiving without saying so.
Recht: notifications.notification.write
Request body: PushSubscriptionCreate
Antwoord: 201 · PushSubscriptionRead
DELETE /api/v1/notifications/push/subscriptions/{subscription_id}
Section titled “DELETE /api/v1/notifications/push/subscriptions/{subscription_id}”Revoke Push Subscription
Recht: notifications.notification.write
Padparameters: subscription_id
Antwoord: 204
POST /api/v1/notifications/push/test
Section titled “POST /api/v1/notifications/push/test”Test Push — Push a test notification to every device this person has registered.
Recht: notifications.notification.write
Antwoord: 200 · PushTestResult
POST /api/v1/notifications/push/unsubscribe
Section titled “POST /api/v1/notifications/push/unsubscribe”Unsubscribe Push — Drop the device by the endpoint the browser itself holds — the only identifier it has after PushSubscription.unsubscribe(). Scoped to the caller, and silent on a miss: unsubscribing twice is not an error.
Recht: notifications.notification.write
Request body: PushUnsubscribe
Antwoord: 204
GET /api/v1/notifications/unread-count
Section titled “GET /api/v1/notifications/unread-count”Unread Count — The bell’s badge. Comes from the API, never from counting the loaded page.
Recht: notifications.notification.read
Antwoord: 200 · UnreadCount
GET /api/v1/notifications/watch
Section titled “GET /api/v1/notifications/watch”Get Watch
Recht: notifications.notification.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
entity_type | task · project · company · leave_request · timesheet · interaction · verplicht | |
entity_id | string · verplicht |
Antwoord: 200 · WatchRead
PUT /api/v1/notifications/watch
Section titled “PUT /api/v1/notifications/watch”Set Watch
Recht: notifications.notification.write
Request body: WatchUpdate
Antwoord: 200 · WatchRead
| Endpoint | Recht |
|---|---|
GET /prefs | Bewust open |
PUT /prefs | Bewust open |
Parameters en schema’s per endpoint
GET /api/v1/prefs
Section titled “GET /api/v1/prefs”Get Prefs
Recht: Bewust open
Antwoord: 200 · UserPrefs
PUT /api/v1/prefs
Section titled “PUT /api/v1/prefs”Set Prefs
Recht: Bewust open
Request body: UserPrefsUpdate
Antwoord: 200 · UserPrefs
providers
Section titled “providers”| Endpoint | Recht |
|---|---|
GET /providers | settings.providers.read |
POST /providers | settings.providers.manage |
GET /providers/{provider_id} | settings.providers.read |
PATCH /providers/{provider_id} | settings.providers.manage |
DELETE /providers/{provider_id} | settings.providers.manage |
Parameters en schema’s per endpoint
GET /api/v1/providers
Section titled “GET /api/v1/providers”List Providers
Recht: settings.providers.read
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
kind | ProviderKind | |
include_inactive | boolean | (default false) |
Antwoord: 200 · ProviderRead[]
POST /api/v1/providers
Section titled “POST /api/v1/providers”Create Provider
Recht: settings.providers.manage
Request body: ProviderCreate
Antwoord: 201 · ProviderRead
GET /api/v1/providers/{provider_id}
Section titled “GET /api/v1/providers/{provider_id}”Get Provider
Recht: settings.providers.read
Padparameters: provider_id
Antwoord: 200 · ProviderRead
PATCH /api/v1/providers/{provider_id}
Section titled “PATCH /api/v1/providers/{provider_id}”Update Provider
Recht: settings.providers.manage
Padparameters: provider_id
Request body: ProviderUpdate
Antwoord: 200 · ProviderRead
DELETE /api/v1/providers/{provider_id}
Section titled “DELETE /api/v1/providers/{provider_id}”Delete Provider
Recht: settings.providers.manage
Padparameters: provider_id
Antwoord: 204
system
Section titled “system”| Endpoint | Recht |
|---|---|
GET /system/info | settings.system.read |
Parameters en schema’s per endpoint
GET /api/v1/system/info
Section titled “GET /api/v1/system/info”System Info — Diagnostics for the Settings → System screen (settings.system.read).
Recht: settings.system.read
Antwoord: 200 · SystemInfo
timeon
Section titled “timeon”| Endpoint | Recht |
|---|---|
GET /timeon/accounts | timeon.settings.manage |
POST /timeon/accounts | timeon.settings.manage |
PATCH /timeon/accounts/{account_id} | timeon.settings.manage |
DELETE /timeon/accounts/{account_id} | timeon.settings.manage |
POST /timeon/accounts/{account_id}/sync | timeon.sync.run |
POST /timeon/accounts/{account_id}/verify | timeon.settings.manage |
GET /timeon/accounts/options | timeon.sync.run |
GET /timeon/conflicts | timeon.sync.run |
POST /timeon/conflicts/{conflict_id}/resolve | timeon.sync.write |
GET /timeon/links | timeon.sync.run |
DELETE /timeon/links/{link_id} | timeon.sync.write |
GET /timeon/runs | timeon.sync.run |
GET /timeon/workspace | timeon.sync.run |
Parameters en schema’s per endpoint
GET /api/v1/timeon/accounts
Section titled “GET /api/v1/timeon/accounts”List Accounts — Connected Timeon organisations. The API key is never part of the response.
Recht: timeon.settings.manage
Antwoord: 200 · TimeonAccountRead[]
POST /api/v1/timeon/accounts
Section titled “POST /api/v1/timeon/accounts”Create Account — Store a credential. Both directions start at off: a connection that began syncing the moment a key was pasted would be an irreversible act performed by a form.
Recht: timeon.settings.manage
Request body: TimeonAccountCreate
Antwoord: 201 · TimeonAccountRead
PATCH /api/v1/timeon/accounts/{account_id}
Section titled “PATCH /api/v1/timeon/accounts/{account_id}”Update Account — Rename, rotate the key, or change what the sync does. An omitted key keeps the stored one.
Recht: timeon.settings.manage
Padparameters: account_id
Request body: TimeonAccountUpdate
Antwoord: 200 · TimeonAccountRead
DELETE /api/v1/timeon/accounts/{account_id}
Section titled “DELETE /api/v1/timeon/accounts/{account_id}”Delete Account — Forget the connection. Pairings, conflicts and runs go with it; time entries do not — a pulled entry is schakl’s record of work somebody did, and removing a credential is not a statement about whether that work happened.
Recht: timeon.settings.manage
Padparameters: account_id
Antwoord: 204
POST /api/v1/timeon/accounts/{account_id}/sync
Section titled “POST /api/v1/timeon/accounts/{account_id}/sync”Run Sync — Run one sync and answer with its report.
Recht: timeon.sync.run
Padparameters: account_id
Request body: TimeonSyncRequest
Antwoord: 200 · TimeonSyncRunRead
POST /api/v1/timeon/accounts/{account_id}/verify
Section titled “POST /api/v1/timeon/accounts/{account_id}/verify”Verify Account — Ask Timeon which organisation this key opens, and how big it is.
Recht: timeon.settings.manage
Padparameters: account_id
Antwoord: 200 · TimeonVerifyResult
GET /api/v1/timeon/accounts/options
Section titled “GET /api/v1/timeon/accounts/options”Account Options — The connections a sync may run against.
Recht: timeon.sync.run
Antwoord: 200 · TimeonAccountRead[]
GET /api/v1/timeon/conflicts
Section titled “GET /api/v1/timeon/conflicts”List Conflicts — The queue. Readable on sync.run — seeing what needs deciding must not require the power to decide it.
Recht: timeon.sync.run
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
account_id | string | |
status | string | (default open) |
limit | integer | (default 50) |
offset | integer | (default 0) |
Antwoord: 200 · TimeonConflictRead[]
POST /api/v1/timeon/conflicts/{conflict_id}/resolve
Section titled “POST /api/v1/timeon/conflicts/{conflict_id}/resolve”Resolve Conflict — Settle one conflict: keep schakl’s version, keep Timeon’s, or record that they may differ.
Recht: timeon.sync.write
Padparameters: conflict_id
Request body: TimeonConflictResolve
Antwoord: 200 · TimeonConflictRead
GET /api/v1/timeon/links
Section titled “GET /api/v1/timeon/links”List Links — The pairings, filterable by what is wrong with them.
Recht: timeon.sync.run
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
account_id | string | |
kind | string | |
status | string | |
limit | integer | (default 50) |
offset | integer | (default 0) |
Antwoord: 200 · TimeonLinkRead[]
DELETE /api/v1/timeon/links/{link_id}
Section titled “DELETE /api/v1/timeon/links/{link_id}”Unpair — Forget one pairing without touching either record.
Recht: timeon.sync.write
Padparameters: link_id
Antwoord: 204
GET /api/v1/timeon/runs
Section titled “GET /api/v1/timeon/runs”List Runs — What the last runs did, and what they could not do.
Recht: timeon.sync.run
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
account_id | string | |
limit | integer | (default 25) |
offset | integer | (default 0) |
Antwoord: 200 · TimeonSyncRunRead[]
GET /api/v1/timeon/workspace
Section titled “GET /api/v1/timeon/workspace”Workspace — Everything the sync page’s shell draws, in one round trip.
Recht: timeon.sync.run
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
account_id | string |
Antwoord: 200 · TimeonWorkspaceRead
| Endpoint | Recht |
|---|---|
GET /trash/company | companies.company.delete |
GET /trash/company/{entity_id} | companies.company.delete |
DELETE /trash/company/{entity_id} | companies.company.delete |
GET /trash/company/{entity_id}/preview | companies.company.delete |
POST /trash/company/{entity_id}/restore | companies.company.delete |
Parameters en schema’s per endpoint
GET /api/v1/trash/company
Section titled “GET /api/v1/trash/company”Trash List Company — The company records in the trash: who deleted each, when, when it will be purged, and what hangs off it. A record with anything in blocking is kept past the retention window until somebody restores it.
Recht: companies.company.delete
Queryparameters:
| Naam | Type | Betekenis |
|---|---|---|
limit | integer | (default 50) |
offset | integer | (default 0) |
Antwoord: 200 · TrashPage
GET /api/v1/trash/company/{entity_id}
Section titled “GET /api/v1/trash/company/{entity_id}”Trash Get Company — One trashed company record. 404 for a live record: to this surface a row that is not in the trash does not exist.
Recht: companies.company.delete
Padparameters: entity_id
Antwoord: 200 · TrashItem
DELETE /api/v1/trash/company/{entity_id}
Section titled “DELETE /api/v1/trash/company/{entity_id}”Trash Purge Company — Delete a trashed company record for good. Irreversible; refused (409) while anything in blocking still hangs off it. The nightly sweep does this by itself after the retention window.
Recht: companies.company.delete
Padparameters: entity_id
Antwoord: 204
GET /api/v1/trash/company/{entity_id}/preview
Section titled “GET /api/v1/trash/company/{entity_id}/preview”Trash Preview Company — What deleting a live company record would do: blocking lists the records that stop it (issued invoices, domains, agreements, projects, hours — these outlive a client, so a client holding any is archived rather than deleted), taken_along what hides with it and goes when it is purged. Read this before calling DELETE.
Recht: companies.company.delete
Padparameters: entity_id
Antwoord: 200 · TrashPreview
POST /api/v1/trash/company/{entity_id}/restore
Section titled “POST /api/v1/trash/company/{entity_id}/restore”Trash Restore Company — Bring a trashed company record back exactly as it was, with everything that hid with it.
Recht: companies.company.delete
Padparameters: entity_id
Antwoord: 204