Valufield API
The Valufield REST API. Authenticate with `Authorization: Bearer bl_live_...`. Lists are cursor paginated on `(created_at, id)` — there is no `offset`, and a `limit` above 200 is clamped rather than refused. Every response is wrapped in `{ data }`; failures return `{ error: { code, message } }` with one of `unauthorized`, `forbidden`, `not_found`, `validation_failed`, `rate_limited`, `conflict` or `server_error`. Writes accept an `Idempotency-Key` header, honoured for 24 hours.
Getting started
Base URL
https://valufield.com.au/api/v1Authentication
Send an Authorization: Bearer bl_live_… header on every request. A key carries the permissions of the person who created it and the scopes it was given.
Errors
Failures return { "error": { "code", "message" } } with a 4xx or 5xx status.
Pagination
List endpoints return { data, pagination } and page with an opaque cursor. Use ?limit= up to 200 and ?sort=-created_at.
Trying a request
There is no try-it console here on purpose: it would need a live API key in the browser, and keys are shown once and never stored. Copy the curl line under an endpoint instead.
Service
/healthLiveness, without a key
Responses: 200
curl https://valufield.com.au/api/v1/health \ -H "Authorization: Bearer bl_live_..."
/meThe organisation and key this request runs as
Use this to check a key. Requires any scope.
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/me \ -H "Authorization: Bearer bl_live_..."
Bookings
/bookingsList bookings
Requires the `read` scope and `booking.calendar.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[event_type_id] | string · query | Exact match on `event_type_id`. |
| filter[host_user_id] | string · query | Exact match on `host_user_id`. |
| filter[status] | string · query | Exact match on `status`. |
| filter[contact_id] | string · query | Exact match on `contact_id`. |
| filter[source] | string · query | Exact match on `source`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/bookings \ -H "Authorization: Bearer bl_live_..."
/bookings/{id}Fetch one bookings record
Requires the `read` scope and `booking.calendar.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/bookings/{id} \
-H "Authorization: Bearer bl_live_..."/bookings/{id}Update one bookings record
Requires the `write` scope and `booking.bookings.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| id* | string · path | The record id |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X PATCH https://valufield.com.au/api/v1/bookings/{id} \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'Companies
/companiesList companies
Requires the `read` scope and `crm.companies.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[domain] | string · query | Exact match on `domain`. |
| filter[owner_user_id] | string · query | Exact match on `owner_user_id`. |
| filter[industry] | string · query | Exact match on `industry`. |
| filter[lifecycle_stage_key] | string · query | Exact match on `lifecycle_stage_key`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/companies \ -H "Authorization: Bearer bl_live_..."
/companiesCreate a companies record
Requires the `write` scope and `crm.companies.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| Idempotency-Key | string · header | A caller-chosen key. Repeating a request with the same key within 24 hours returns the first response instead of doing the work again, and the reply carries `Idempotency-Replayed: true`. The same key with a different body is a conflict. |
Responses: 201, 400, 401, 402, 403, 404, 409, 429, 500
curl -X POST https://valufield.com.au/api/v1/companies \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/companies/{id}Fetch one companies record
Requires the `read` scope and `crm.companies.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/companies/{id} \
-H "Authorization: Bearer bl_live_..."/companies/{id}Update one companies record
Requires the `write` scope and `crm.companies.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| id* | string · path | The record id |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X PATCH https://valufield.com.au/api/v1/companies/{id} \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/companies/{id}Delete one companies record
Requires the `write` scope and `crm.companies.write`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl -X DELETE https://valufield.com.au/api/v1/companies/{id} \
-H "Authorization: Bearer bl_live_..."Contacts
/contactsList contacts
Requires the `read` scope and `crm.contacts.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[email] | string · query | Exact match on `email`. |
| filter[owner_user_id] | string · query | Exact match on `owner_user_id`. |
| filter[primary_company_id] | string · query | Exact match on `primary_company_id`. |
| filter[lifecycle_stage_key] | string · query | Exact match on `lifecycle_stage_key`. |
| filter[source] | string · query | Exact match on `source`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/contacts \ -H "Authorization: Bearer bl_live_..."
/contactsCreate a contacts record
Requires the `write` scope and `crm.contacts.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| Idempotency-Key | string · header | A caller-chosen key. Repeating a request with the same key within 24 hours returns the first response instead of doing the work again, and the reply carries `Idempotency-Replayed: true`. The same key with a different body is a conflict. |
Responses: 201, 400, 401, 402, 403, 404, 409, 429, 500
curl -X POST https://valufield.com.au/api/v1/contacts \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/contacts/{id}Fetch one contacts record
Requires the `read` scope and `crm.contacts.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/contacts/{id} \
-H "Authorization: Bearer bl_live_..."/contacts/{id}Update one contacts record
Requires the `write` scope and `crm.contacts.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| id* | string · path | The record id |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X PATCH https://valufield.com.au/api/v1/contacts/{id} \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/contacts/{id}Delete one contacts record
Requires the `write` scope and `crm.contacts.write`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl -X DELETE https://valufield.com.au/api/v1/contacts/{id} \
-H "Authorization: Bearer bl_live_..."Custom field definitions
/custom-fieldsList custom-fields
Requires the `read` scope. Every member of the organisation may read these rows.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[object_type] | string · query | Exact match on `object_type`. |
| filter[type] | string · query | Exact match on `type`. |
| filter[key] | string · query | Exact match on `key`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/custom-fields \ -H "Authorization: Bearer bl_live_..."
/custom-fields/{id}Fetch one custom-fields record
Requires the `read` scope. Every member of the organisation may read these rows.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/custom-fields/{id} \
-H "Authorization: Bearer bl_live_..."Deals
/dealsList deals
Requires the `read` scope and `crm.deals.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[pipeline_id] | string · query | Exact match on `pipeline_id`. |
| filter[stage_id] | string · query | Exact match on `stage_id`. |
| filter[status] | string · query | Exact match on `status`. |
| filter[owner_user_id] | string · query | Exact match on `owner_user_id`. |
| filter[company_id] | string · query | Exact match on `company_id`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/deals \ -H "Authorization: Bearer bl_live_..."
/dealsCreate a deals record
Requires the `write` scope and `crm.deals.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| Idempotency-Key | string · header | A caller-chosen key. Repeating a request with the same key within 24 hours returns the first response instead of doing the work again, and the reply carries `Idempotency-Replayed: true`. The same key with a different body is a conflict. |
Responses: 201, 400, 401, 402, 403, 404, 409, 429, 500
curl -X POST https://valufield.com.au/api/v1/deals \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/deals/{id}Fetch one deals record
Requires the `read` scope and `crm.deals.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/deals/{id} \
-H "Authorization: Bearer bl_live_..."/deals/{id}Update one deals record
Requires the `write` scope and `crm.deals.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| id* | string · path | The record id |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X PATCH https://valufield.com.au/api/v1/deals/{id} \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/deals/{id}Delete one deals record
Requires the `write` scope and `crm.deals.write`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl -X DELETE https://valufield.com.au/api/v1/deals/{id} \
-H "Authorization: Bearer bl_live_..."/deals/{id}/stageMove a deal to another stage of its pipeline
Requires the `write` scope and `crm.deals.write`.
Parameters
| id* | string · path | The record id |
| Idempotency-Key | string · header | A caller-chosen key. Repeating a request with the same key within 24 hours returns the first response instead of doing the work again, and the reply carries `Idempotency-Replayed: true`. The same key with a different body is a conflict. |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X POST https://valufield.com.au/api/v1/deals/{id}/stage \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'Event types
/event-typesList event-types
Requires the `read` scope and `booking.calendar.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[slug] | string · query | Exact match on `slug`. |
| filter[kind] | string · query | Exact match on `kind`. |
| filter[is_active] | string · query | Exact match on `is_active`. |
| filter[owner_user_id] | string · query | Exact match on `owner_user_id`. |
| filter[location_type] | string · query | Exact match on `location_type`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/event-types \ -H "Authorization: Bearer bl_live_..."
/event-typesCreate a event-types record
Requires the `write` scope and `booking.booking_event_types.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| Idempotency-Key | string · header | A caller-chosen key. Repeating a request with the same key within 24 hours returns the first response instead of doing the work again, and the reply carries `Idempotency-Replayed: true`. The same key with a different body is a conflict. |
Responses: 201, 400, 401, 402, 403, 404, 409, 429, 500
curl -X POST https://valufield.com.au/api/v1/event-types \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/event-types/{id}Fetch one event-types record
Requires the `read` scope and `booking.calendar.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/event-types/{id} \
-H "Authorization: Bearer bl_live_..."/event-types/{id}Update one event-types record
Requires the `write` scope and `booking.booking_event_types.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| id* | string · path | The record id |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X PATCH https://valufield.com.au/api/v1/event-types/{id} \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/event-types/{id}Delete one event-types record
Requires the `write` scope and `booking.booking_event_types.write`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl -X DELETE https://valufield.com.au/api/v1/event-types/{id} \
-H "Authorization: Bearer bl_live_..."Event log
/eventsList events
Requires the `read` scope and `core.events.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[type] | string · query | Exact match on `type`. |
| filter[object_type] | string · query | Exact match on `object_type`. |
| filter[object_id] | string · query | Exact match on `object_id`. |
| filter[actor_type] | string · query | Exact match on `actor_type`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/events \ -H "Authorization: Bearer bl_live_..."
/events/{id}Fetch one events record
Requires the `read` scope and `core.events.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/events/{id} \
-H "Authorization: Bearer bl_live_..."Files
/filesList files
Requires the `read` scope. Every member of the organisation may read these rows.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[object_type] | string · query | Exact match on `object_type`. |
| filter[object_id] | string · query | Exact match on `object_id`. |
| filter[kind] | string · query | Exact match on `kind`. |
| filter[mime] | string · query | Exact match on `mime`. |
| filter[status] | string · query | Exact match on `status`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/files \ -H "Authorization: Bearer bl_live_..."
/files/{id}Fetch one files record
Requires the `read` scope. Every member of the organisation may read these rows.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/files/{id} \
-H "Authorization: Bearer bl_live_..."/files/{id}/urlA 60 second signed download URL
Requires the `read` scope and `null`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/files/{id}/url \
-H "Authorization: Bearer bl_live_..."Form submissions
/form-submissionsList form-submissions
Requires the `read` scope and `forms.submissions.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[form_id] | string · query | Exact match on `form_id`. |
| filter[status] | string · query | Exact match on `status`. |
| filter[contact_id] | string · query | Exact match on `contact_id`. |
| filter[company_id] | string · query | Exact match on `company_id`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/form-submissions \ -H "Authorization: Bearer bl_live_..."
/form-submissions/{id}Fetch one form-submissions record
Requires the `read` scope and `forms.submissions.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/form-submissions/{id} \
-H "Authorization: Bearer bl_live_..."Forms
/formsList forms
Requires the `read` scope and `forms.forms.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[slug] | string · query | Exact match on `slug`. |
| filter[status] | string · query | Exact match on `status`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/forms \ -H "Authorization: Bearer bl_live_..."
/forms/{id}Fetch one forms record
Requires the `read` scope and `forms.forms.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/forms/{id} \
-H "Authorization: Bearer bl_live_..."Invoices
/invoicesList invoices
Requires the `read` scope and `finance.invoices.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[status] | string · query | Exact match on `status`. |
| filter[contact_id] | string · query | Exact match on `contact_id`. |
| filter[company_id] | string · query | Exact match on `company_id`. |
| filter[deal_id] | string · query | Exact match on `deal_id`. |
| filter[quote_id] | string · query | Exact match on `quote_id`. |
| filter[currency] | string · query | Exact match on `currency`. |
| filter[number] | string · query | Exact match on `number`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/invoices \ -H "Authorization: Bearer bl_live_..."
/invoices/{id}Fetch one invoices record
Requires the `read` scope and `finance.invoices.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/invoices/{id} \
-H "Authorization: Bearer bl_live_..."/invoices/{id}Update one invoices record
Requires the `write` scope and `finance.invoices.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| id* | string · path | The record id |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X PATCH https://valufield.com.au/api/v1/invoices/{id} \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/invoices/{id}/voidVoid an invoice that has taken no payment, keeping its number
Requires the `write` scope and `finance.invoices.void`.
Parameters
| id* | string · path | The record id |
| Idempotency-Key | string · header | A caller-chosen key. Repeating a request with the same key within 24 hours returns the first response instead of doing the work again, and the reply carries `Idempotency-Replayed: true`. The same key with a different body is a conflict. |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X POST https://valufield.com.au/api/v1/invoices/{id}/void \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'Notes
/notesList notes
Requires the `read` scope. Every member of the organisation may read these rows.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[object_type] | string · query | Exact match on `object_type`. |
| filter[object_id] | string · query | Exact match on `object_id`. |
| filter[pinned] | string · query | Exact match on `pinned`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/notes \ -H "Authorization: Bearer bl_live_..."
/notesCreate a notes record
Requires the `write` scope and `core.notes.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| Idempotency-Key | string · header | A caller-chosen key. Repeating a request with the same key within 24 hours returns the first response instead of doing the work again, and the reply carries `Idempotency-Replayed: true`. The same key with a different body is a conflict. |
Responses: 201, 400, 401, 402, 403, 404, 409, 429, 500
curl -X POST https://valufield.com.au/api/v1/notes \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/notes/{id}Fetch one notes record
Requires the `read` scope. Every member of the organisation may read these rows.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/notes/{id} \
-H "Authorization: Bearer bl_live_..."/notes/{id}Update one notes record
Requires the `write` scope and `core.notes.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| id* | string · path | The record id |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X PATCH https://valufield.com.au/api/v1/notes/{id} \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/notes/{id}Delete one notes record
Requires the `write` scope and `core.notes.write`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl -X DELETE https://valufield.com.au/api/v1/notes/{id} \
-H "Authorization: Bearer bl_live_..."Payments
/paymentsList payments
Requires the `read` scope and `finance.payments.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[invoice_id] | string · query | Exact match on `invoice_id`. |
| filter[contact_id] | string · query | Exact match on `contact_id`. |
| filter[status] | string · query | Exact match on `status`. |
| filter[method] | string · query | Exact match on `method`. |
| filter[currency] | string · query | Exact match on `currency`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/payments \ -H "Authorization: Bearer bl_live_..."
/payments/{id}Fetch one payments record
Requires the `read` scope and `finance.payments.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/payments/{id} \
-H "Authorization: Bearer bl_live_..."Pipelines
/pipelinesList pipelines
Requires the `read` scope and `crm.deals.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[object_type] | string · query | Exact match on `object_type`. |
| filter[is_default] | string · query | Exact match on `is_default`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/pipelines \ -H "Authorization: Bearer bl_live_..."
/pipelines/{id}Fetch one pipelines record
Requires the `read` scope and `crm.deals.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/pipelines/{id} \
-H "Authorization: Bearer bl_live_..."Products
/productsList products
Requires the `read` scope and `crm.products.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[sku] | string · query | Exact match on `sku`. |
| filter[kind] | string · query | Exact match on `kind`. |
| filter[is_active] | string · query | Exact match on `is_active`. |
| filter[currency] | string · query | Exact match on `currency`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/products \ -H "Authorization: Bearer bl_live_..."
/productsCreate a products record
Requires the `write` scope and `crm.products.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| Idempotency-Key | string · header | A caller-chosen key. Repeating a request with the same key within 24 hours returns the first response instead of doing the work again, and the reply carries `Idempotency-Replayed: true`. The same key with a different body is a conflict. |
Responses: 201, 400, 401, 402, 403, 404, 409, 429, 500
curl -X POST https://valufield.com.au/api/v1/products \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/products/{id}Fetch one products record
Requires the `read` scope and `crm.products.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/products/{id} \
-H "Authorization: Bearer bl_live_..."/products/{id}Update one products record
Requires the `write` scope and `crm.products.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| id* | string · path | The record id |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X PATCH https://valufield.com.au/api/v1/products/{id} \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/products/{id}Delete one products record
Requires the `write` scope and `crm.products.write`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl -X DELETE https://valufield.com.au/api/v1/products/{id} \
-H "Authorization: Bearer bl_live_..."Quotes
/quotesList quotes
Requires the `read` scope and `finance.quotes.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[status] | string · query | Exact match on `status`. |
| filter[contact_id] | string · query | Exact match on `contact_id`. |
| filter[company_id] | string · query | Exact match on `company_id`. |
| filter[deal_id] | string · query | Exact match on `deal_id`. |
| filter[currency] | string · query | Exact match on `currency`. |
| filter[number] | string · query | Exact match on `number`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/quotes \ -H "Authorization: Bearer bl_live_..."
/quotes/{id}Fetch one quotes record
Requires the `read` scope and `finance.quotes.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/quotes/{id} \
-H "Authorization: Bearer bl_live_..."/quotes/{id}Update one quotes record
Requires the `write` scope and `finance.quotes.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| id* | string · path | The record id |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X PATCH https://valufield.com.au/api/v1/quotes/{id} \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'Saved reports
/reportsList reports
Requires the `read` scope and `reporting.reports.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[dataset_key] | string · query | Exact match on `dataset_key`. |
| filter[chart_type] | string · query | Exact match on `chart_type`. |
| filter[visibility] | string · query | Exact match on `visibility`. |
| filter[owner_id] | string · query | Exact match on `owner_id`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/reports \ -H "Authorization: Bearer bl_live_..."
/reports/{id}Fetch one reports record
Requires the `read` scope and `reporting.reports.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/reports/{id} \
-H "Authorization: Bearer bl_live_..."/reports/{id}/runRuns the report and returns its rows
Requires the `read` scope and `reporting.reports.read`.
Parameters
| id* | string · path | The record id |
| Idempotency-Key | string · header | A caller-chosen key. Repeating a request with the same key within 24 hours returns the first response instead of doing the work again, and the reply carries `Idempotency-Replayed: true`. The same key with a different body is a conflict. |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X POST https://valufield.com.au/api/v1/reports/{id}/run \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'Tags
/tagsList tags
Requires the `read` scope. Every member of the organisation may read these rows.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[object_type] | string · query | Exact match on `object_type`. |
| filter[name] | string · query | Exact match on `name`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/tags \ -H "Authorization: Bearer bl_live_..."
/tagsCreate a tags record
Requires the `write` scope and `core.tags.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| Idempotency-Key | string · header | A caller-chosen key. Repeating a request with the same key within 24 hours returns the first response instead of doing the work again, and the reply carries `Idempotency-Replayed: true`. The same key with a different body is a conflict. |
Responses: 201, 400, 401, 402, 403, 404, 409, 429, 500
curl -X POST https://valufield.com.au/api/v1/tags \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/tags/{id}Fetch one tags record
Requires the `read` scope. Every member of the organisation may read these rows.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/tags/{id} \
-H "Authorization: Bearer bl_live_..."/tags/{id}Update one tags record
Requires the `write` scope and `core.tags.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| id* | string · path | The record id |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X PATCH https://valufield.com.au/api/v1/tags/{id} \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/tags/{id}Delete one tags record
Requires the `write` scope and `core.tags.write`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl -X DELETE https://valufield.com.au/api/v1/tags/{id} \
-H "Authorization: Bearer bl_live_..."Tasks
/tasksList tasks
Requires the `read` scope. Every member of the organisation may read these rows.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[status] | string · query | Exact match on `status`. |
| filter[priority] | string · query | Exact match on `priority`. |
| filter[assignee_user_id] | string · query | Exact match on `assignee_user_id`. |
| filter[object_type] | string · query | Exact match on `object_type`. |
| filter[object_id] | string · query | Exact match on `object_id`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/tasks \ -H "Authorization: Bearer bl_live_..."
/tasksCreate a tasks record
Requires the `write` scope and `core.tasks.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| Idempotency-Key | string · header | A caller-chosen key. Repeating a request with the same key within 24 hours returns the first response instead of doing the work again, and the reply carries `Idempotency-Replayed: true`. The same key with a different body is a conflict. |
Responses: 201, 400, 401, 402, 403, 404, 409, 429, 500
curl -X POST https://valufield.com.au/api/v1/tasks \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/tasks/{id}Fetch one tasks record
Requires the `read` scope. Every member of the organisation may read these rows.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/tasks/{id} \
-H "Authorization: Bearer bl_live_..."/tasks/{id}Update one tasks record
Requires the `write` scope and `core.tasks.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| id* | string · path | The record id |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X PATCH https://valufield.com.au/api/v1/tasks/{id} \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/tasks/{id}Delete one tasks record
Requires the `write` scope and `core.tasks.write`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl -X DELETE https://valufield.com.au/api/v1/tasks/{id} \
-H "Authorization: Bearer bl_live_..."Tickets
/ticketsList tickets
Requires the `read` scope and `crm.tickets.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[pipeline_id] | string · query | Exact match on `pipeline_id`. |
| filter[stage_id] | string · query | Exact match on `stage_id`. |
| filter[status] | string · query | Exact match on `status`. |
| filter[priority] | string · query | Exact match on `priority`. |
| filter[owner_user_id] | string · query | Exact match on `owner_user_id`. |
| filter[contact_id] | string · query | Exact match on `contact_id`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/tickets \ -H "Authorization: Bearer bl_live_..."
/ticketsCreate a tickets record
Requires the `write` scope and `crm.tickets.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| Idempotency-Key | string · header | A caller-chosen key. Repeating a request with the same key within 24 hours returns the first response instead of doing the work again, and the reply carries `Idempotency-Replayed: true`. The same key with a different body is a conflict. |
Responses: 201, 400, 401, 402, 403, 404, 409, 429, 500
curl -X POST https://valufield.com.au/api/v1/tickets \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/tickets/{id}Fetch one tickets record
Requires the `read` scope and `crm.tickets.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/tickets/{id} \
-H "Authorization: Bearer bl_live_..."/tickets/{id}Update one tickets record
Requires the `write` scope and `crm.tickets.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| id* | string · path | The record id |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X PATCH https://valufield.com.au/api/v1/tickets/{id} \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/tickets/{id}Delete one tickets record
Requires the `write` scope and `crm.tickets.write`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl -X DELETE https://valufield.com.au/api/v1/tickets/{id} \
-H "Authorization: Bearer bl_live_..."Usage
/usageList usage
Requires the `read` scope and `billing.usage.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[meter_key] | string · query | Exact match on `meter_key`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/usage \ -H "Authorization: Bearer bl_live_..."
Users
/usersList users
Requires the `read` scope and `core.members.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[role_id] | string · query | Exact match on `role_id`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/users \ -H "Authorization: Bearer bl_live_..."
/users/{id}Fetch one users record
Requires the `read` scope and `core.members.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/users/{id} \
-H "Authorization: Bearer bl_live_..."Outbound webhook endpoints
/webhooksList webhooks
Requires the `read` scope and `core.webhooks.read`.
Parameters
| limit | integer · query | Page size, 50 by default and capped at 200. |
| cursor | string · query | The `next_cursor` from the previous page. |
| sort | string · query | Sort field, prefixed with `-` for descending. |
| updated_since | string · query | Only records changed at or after this instant. ISO 8601; anything else is rejected. |
| expand | string · query | Comma-separated related objects to embed, where the resource offers any. Unknown names are ignored. |
| filter[active] | string · query | Exact match on `active`. |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/webhooks \ -H "Authorization: Bearer bl_live_..."
/webhooksCreate a webhooks record
Requires the `write` scope and `core.webhooks.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| Idempotency-Key | string · header | A caller-chosen key. Repeating a request with the same key within 24 hours returns the first response instead of doing the work again, and the reply carries `Idempotency-Replayed: true`. The same key with a different body is a conflict. |
Responses: 201, 400, 401, 402, 403, 404, 409, 429, 500
curl -X POST https://valufield.com.au/api/v1/webhooks \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/webhooks/{id}Fetch one webhooks record
Requires the `read` scope and `core.webhooks.read`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl https://valufield.com.au/api/v1/webhooks/{id} \
-H "Authorization: Bearer bl_live_..."/webhooks/{id}Update one webhooks record
Requires the `write` scope and `core.webhooks.write`. `org_id`, `id`, `created_at`, `updated_at` and any key the schema does not name are rejected.
Parameters
| id* | string · path | The record id |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X PATCH https://valufield.com.au/api/v1/webhooks/{id} \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'/webhooks/{id}Delete one webhooks record
Requires the `write` scope and `core.webhooks.write`.
Parameters
| id* | string · path | The record id |
Responses: 200, 401, 403, 404, 429, 500
curl -X DELETE https://valufield.com.au/api/v1/webhooks/{id} \
-H "Authorization: Bearer bl_live_..."/webhooks/{id}/rotate-secretReplace the signing secret and return the new one, once
Requires the `write` scope and `core.webhooks.write`.
Parameters
| id* | string · path | The record id |
| Idempotency-Key | string · header | A caller-chosen key. Repeating a request with the same key within 24 hours returns the first response instead of doing the work again, and the reply carries `Idempotency-Replayed: true`. The same key with a different body is a conflict. |
Responses: 200, 400, 401, 402, 403, 404, 409, 429, 500
curl -X POST https://valufield.com.au/api/v1/webhooks/{id}/rotate-secret \
-H "Authorization: Bearer bl_live_..." \
-H "Content-Type: application/json" \
-d '{}'Webhooks
How delivery works
Register an endpoint with POST /webhooks (an admin-scoped key), or on Settings → Developers. Every delivery is a POST of { id, type, created_at, org_id, data }. Adding a field to data is backward compatible; removing or renaming one needs a new event type.
A non-2xx reply is retried after 1, 5, 30, 120 and 480 minutes and then marked dead. A redirect counts as a failure and is never followed. Twenty consecutive failures turn the endpoint off and notify your admins.
Verifying a delivery
Each request carries a signature header over the exact bytes we sent. Verify before you parse the JSON, compare in constant time, and refuse a timestamp more than five minutes old.
Baseline-Signature: t=<unix seconds>,v1=<hex hmac-sha256>import { createHmac, timingSafeEqual } from 'node:crypto';
// Express: app.post('/hooks', express.raw({ type: 'application/json' }), ...)
// The signature covers the bytes we sent, so verify BEFORE parsing JSON.
export function verifyBaselineWebhook(rawBody, header, secret) {
const parts = Object.fromEntries(
String(header ?? '')
.split(',')
.map((part) => part.split('=', 2)),
);
const timestamp = Number(parts.t);
const signature = parts.v1;
if (!Number.isFinite(timestamp) || !signature) return false;
// Refuse anything older than five minutes, so a captured delivery
// cannot be replayed forever.
if (Math.abs(Date.now() / 1000 - timestamp) > 300) return false;
const expected = createHmac('sha256', secret)
.update(`${timestamp}.${rawBody}`)
.digest('hex');
const a = Buffer.from(expected, 'utf8');
const b = Buffer.from(signature, 'utf8');
return a.length === b.length && timingSafeEqual(a, b);
}Event catalogue
Subscribe to any of these, or to * for everything. Only the events of the modules on your plan are listed.
api_key
api_key.createdapi_key.revokedbooking
booking.cancelledbooking.completedbooking.confirmedbooking.createdbooking.no_showbooking.rescheduledcall
call.score_skippedcall.scoredcoaching
coaching.note_addedcrm
crm.company.createdcrm.company.deletedcrm.company.mergedcrm.company.updatedcrm.contact.createdcrm.contact.deletedcrm.contact.lifecycle_changedcrm.contact.mergedcrm.contact.owner_changedcrm.contact.updatedcrm.contacts.importedcrm.deal.createdcrm.deal.deletedcrm.deal.lostcrm.deal.reopenedcrm.deal.rottingcrm.deal.stage_changedcrm.deal.updatedcrm.deal.woncrm.product.archivedcrm.product.createdcrm.product.updatedcrm.sequence.completedcrm.sequence.enrolledcrm.sequence.exitedcrm.sequence.step_completedcrm.ticket.assignedcrm.ticket.closedcrm.ticket.createdcrm.ticket.first_respondedcrm.ticket.priority_changedcrm.ticket.reopenedcrm.ticket.sla_breachedcrm.ticket.stage_changedcrm.ticket.updateddashboard
dashboard.emaileddocument
document.retention.appliedfinance
finance.accounting.sync_failedfinance.credit_note.issuedfinance.invoice.createdfinance.invoice.overduefinance.invoice.paidfinance.invoice.partially_paidfinance.invoice.sentfinance.invoice.viewedfinance.invoice.voidedfinance.payment.failedfinance.payment.refundedfinance.payment.succeededfinance.quote.acceptedfinance.quote.convertedfinance.quote.createdfinance.quote.declinedfinance.quote.expiredfinance.quote.sentfinance.quote.viewedforms
forms.landing_page.publishedforms.submission.createdknowledge
knowledge.import.appliedknowledge.import.proposedknowledge.question.askedknowledge.question.ratedknowledge.section.archivedknowledge.section.publishedknowledge.space.createdportal
portal.booking.cancelledportal.booking.rescheduledportal.conversation.repliedportal.file.downloadedportal.user.invitedportal.user.logged_inpush
push.subscribedreceptionist
receptionist.call_cappedreceptionist.callback_capturedreport
report.createdtraining
training.assignment.createdtraining.assignment.reviewedtraining.session.completedtraining.sessions.abandonedwebhook
webhook.endpoint.disabledSample payload
{
"id": "evt_00000000-0000-0000-0000-0000000e4e47",
"type": "api_key.created",
"created_at": "2026-01-01T00:00:00.000Z",
"org_id": "00000000-0000-0000-0000-00000000a5a5",
"data": {
"id": "00000000-0000-0000-0000-00000000c0de",
"links": {
"self": "https://valufield.com.au/api/v1/api_keies/00000000-0000-0000-0000-00000000c0de"
}
}
}No-code connectors
Zapier
Not published yetTriggers for new and changed records, and actions to create or update a contact, a deal, a task or a note. Subscriptions are REST hooks, so a Zap fires within seconds instead of on a polling interval.
- Create an API key under Settings → Developers and copy it.
- Give the app this base URL: https://valufield.com.au/api/v1
- The connection test calls GET /me and shows the organisation it matched.
n8n
Not published yetA community node with the same resources on an action node, plus a trigger node that registers and removes its own webhook. Install it from npm on a self-hosted n8n, or from the community nodes panel.
- Create an API key under Settings → Developers and copy it.
- Give the app this base URL: https://valufield.com.au/api/v1
- Add a Baseline API credential, paste the key, and save.