Valufield
Back

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/v1

Authentication

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.

Create and revoke keys in Settings → Developers

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.

OpenAPI document

/api/v1/openapi.jsonversion 1.0.0

Service

GET/health

Liveness, without a key

Responses: 200

curl https://valufield.com.au/api/v1/health \
  -H "Authorization: Bearer bl_live_..."
GET/me

The 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

GET/bookings

List bookings

Requires the `read` scope and `booking.calendar.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[event_type_id]string · queryExact match on `event_type_id`.
filter[host_user_id]string · queryExact match on `host_user_id`.
filter[status]string · queryExact match on `status`.
filter[contact_id]string · queryExact match on `contact_id`.
filter[source]string · queryExact match on `source`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/bookings \
  -H "Authorization: Bearer bl_live_..."
GET/bookings/{id}

Fetch one bookings record

Requires the `read` scope and `booking.calendar.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/bookings/{id} \
  -H "Authorization: Bearer bl_live_..."
PATCH/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 · pathThe 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

GET/companies

List companies

Requires the `read` scope and `crm.companies.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[domain]string · queryExact match on `domain`.
filter[owner_user_id]string · queryExact match on `owner_user_id`.
filter[industry]string · queryExact match on `industry`.
filter[lifecycle_stage_key]string · queryExact 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_..."
POST/companies

Create 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-Keystring · headerA 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 '{}'
GET/companies/{id}

Fetch one companies record

Requires the `read` scope and `crm.companies.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/companies/{id} \
  -H "Authorization: Bearer bl_live_..."
PATCH/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 · pathThe 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 '{}'
DELETE/companies/{id}

Delete one companies record

Requires the `write` scope and `crm.companies.write`.

Parameters

id*string · pathThe 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

GET/contacts

List contacts

Requires the `read` scope and `crm.contacts.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[email]string · queryExact match on `email`.
filter[owner_user_id]string · queryExact match on `owner_user_id`.
filter[primary_company_id]string · queryExact match on `primary_company_id`.
filter[lifecycle_stage_key]string · queryExact match on `lifecycle_stage_key`.
filter[source]string · queryExact match on `source`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/contacts \
  -H "Authorization: Bearer bl_live_..."
POST/contacts

Create 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-Keystring · headerA 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 '{}'
GET/contacts/{id}

Fetch one contacts record

Requires the `read` scope and `crm.contacts.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/contacts/{id} \
  -H "Authorization: Bearer bl_live_..."
PATCH/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 · pathThe 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 '{}'
DELETE/contacts/{id}

Delete one contacts record

Requires the `write` scope and `crm.contacts.write`.

Parameters

id*string · pathThe 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

GET/custom-fields

List custom-fields

Requires the `read` scope. Every member of the organisation may read these rows.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[object_type]string · queryExact match on `object_type`.
filter[type]string · queryExact match on `type`.
filter[key]string · queryExact match on `key`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/custom-fields \
  -H "Authorization: Bearer bl_live_..."
GET/custom-fields/{id}

Fetch one custom-fields record

Requires the `read` scope. Every member of the organisation may read these rows.

Parameters

id*string · pathThe 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

GET/deals

List deals

Requires the `read` scope and `crm.deals.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[pipeline_id]string · queryExact match on `pipeline_id`.
filter[stage_id]string · queryExact match on `stage_id`.
filter[status]string · queryExact match on `status`.
filter[owner_user_id]string · queryExact match on `owner_user_id`.
filter[company_id]string · queryExact match on `company_id`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/deals \
  -H "Authorization: Bearer bl_live_..."
POST/deals

Create 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-Keystring · headerA 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 '{}'
GET/deals/{id}

Fetch one deals record

Requires the `read` scope and `crm.deals.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/deals/{id} \
  -H "Authorization: Bearer bl_live_..."
PATCH/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 · pathThe 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 '{}'
DELETE/deals/{id}

Delete one deals record

Requires the `write` scope and `crm.deals.write`.

Parameters

id*string · pathThe 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_..."
POST/deals/{id}/stage

Move a deal to another stage of its pipeline

Requires the `write` scope and `crm.deals.write`.

Parameters

id*string · pathThe record id
Idempotency-Keystring · headerA 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

GET/event-types

List event-types

Requires the `read` scope and `booking.calendar.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[slug]string · queryExact match on `slug`.
filter[kind]string · queryExact match on `kind`.
filter[is_active]string · queryExact match on `is_active`.
filter[owner_user_id]string · queryExact match on `owner_user_id`.
filter[location_type]string · queryExact 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_..."
POST/event-types

Create 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-Keystring · headerA 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 '{}'
GET/event-types/{id}

Fetch one event-types record

Requires the `read` scope and `booking.calendar.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/event-types/{id} \
  -H "Authorization: Bearer bl_live_..."
PATCH/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 · pathThe 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 '{}'
DELETE/event-types/{id}

Delete one event-types record

Requires the `write` scope and `booking.booking_event_types.write`.

Parameters

id*string · pathThe 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

GET/events

List events

Requires the `read` scope and `core.events.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[type]string · queryExact match on `type`.
filter[object_type]string · queryExact match on `object_type`.
filter[object_id]string · queryExact match on `object_id`.
filter[actor_type]string · queryExact match on `actor_type`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/events \
  -H "Authorization: Bearer bl_live_..."
GET/events/{id}

Fetch one events record

Requires the `read` scope and `core.events.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/events/{id} \
  -H "Authorization: Bearer bl_live_..."

Files

GET/files

List files

Requires the `read` scope. Every member of the organisation may read these rows.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[object_type]string · queryExact match on `object_type`.
filter[object_id]string · queryExact match on `object_id`.
filter[kind]string · queryExact match on `kind`.
filter[mime]string · queryExact match on `mime`.
filter[status]string · queryExact match on `status`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/files \
  -H "Authorization: Bearer bl_live_..."
GET/files/{id}

Fetch one files record

Requires the `read` scope. Every member of the organisation may read these rows.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/files/{id} \
  -H "Authorization: Bearer bl_live_..."
GET/files/{id}/url

A 60 second signed download URL

Requires the `read` scope and `null`.

Parameters

id*string · pathThe 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

GET/form-submissions

List form-submissions

Requires the `read` scope and `forms.submissions.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[form_id]string · queryExact match on `form_id`.
filter[status]string · queryExact match on `status`.
filter[contact_id]string · queryExact match on `contact_id`.
filter[company_id]string · queryExact 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_..."
GET/form-submissions/{id}

Fetch one form-submissions record

Requires the `read` scope and `forms.submissions.read`.

Parameters

id*string · pathThe 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

GET/forms

List forms

Requires the `read` scope and `forms.forms.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[slug]string · queryExact match on `slug`.
filter[status]string · queryExact match on `status`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/forms \
  -H "Authorization: Bearer bl_live_..."
GET/forms/{id}

Fetch one forms record

Requires the `read` scope and `forms.forms.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/forms/{id} \
  -H "Authorization: Bearer bl_live_..."

Invoices

GET/invoices

List invoices

Requires the `read` scope and `finance.invoices.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[status]string · queryExact match on `status`.
filter[contact_id]string · queryExact match on `contact_id`.
filter[company_id]string · queryExact match on `company_id`.
filter[deal_id]string · queryExact match on `deal_id`.
filter[quote_id]string · queryExact match on `quote_id`.
filter[currency]string · queryExact match on `currency`.
filter[number]string · queryExact match on `number`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/invoices \
  -H "Authorization: Bearer bl_live_..."
GET/invoices/{id}

Fetch one invoices record

Requires the `read` scope and `finance.invoices.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/invoices/{id} \
  -H "Authorization: Bearer bl_live_..."
PATCH/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 · pathThe 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 '{}'
POST/invoices/{id}/void

Void an invoice that has taken no payment, keeping its number

Requires the `write` scope and `finance.invoices.void`.

Parameters

id*string · pathThe record id
Idempotency-Keystring · headerA 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

GET/notes

List notes

Requires the `read` scope. Every member of the organisation may read these rows.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[object_type]string · queryExact match on `object_type`.
filter[object_id]string · queryExact match on `object_id`.
filter[pinned]string · queryExact match on `pinned`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/notes \
  -H "Authorization: Bearer bl_live_..."
POST/notes

Create 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-Keystring · headerA 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 '{}'
GET/notes/{id}

Fetch one notes record

Requires the `read` scope. Every member of the organisation may read these rows.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/notes/{id} \
  -H "Authorization: Bearer bl_live_..."
PATCH/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 · pathThe 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 '{}'
DELETE/notes/{id}

Delete one notes record

Requires the `write` scope and `core.notes.write`.

Parameters

id*string · pathThe 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

GET/payments

List payments

Requires the `read` scope and `finance.payments.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[invoice_id]string · queryExact match on `invoice_id`.
filter[contact_id]string · queryExact match on `contact_id`.
filter[status]string · queryExact match on `status`.
filter[method]string · queryExact match on `method`.
filter[currency]string · queryExact match on `currency`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/payments \
  -H "Authorization: Bearer bl_live_..."
GET/payments/{id}

Fetch one payments record

Requires the `read` scope and `finance.payments.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/payments/{id} \
  -H "Authorization: Bearer bl_live_..."

Pipelines

GET/pipelines

List pipelines

Requires the `read` scope and `crm.deals.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[object_type]string · queryExact match on `object_type`.
filter[is_default]string · queryExact match on `is_default`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/pipelines \
  -H "Authorization: Bearer bl_live_..."
GET/pipelines/{id}

Fetch one pipelines record

Requires the `read` scope and `crm.deals.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/pipelines/{id} \
  -H "Authorization: Bearer bl_live_..."

Products

GET/products

List products

Requires the `read` scope and `crm.products.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[sku]string · queryExact match on `sku`.
filter[kind]string · queryExact match on `kind`.
filter[is_active]string · queryExact match on `is_active`.
filter[currency]string · queryExact match on `currency`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/products \
  -H "Authorization: Bearer bl_live_..."
POST/products

Create 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-Keystring · headerA 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 '{}'
GET/products/{id}

Fetch one products record

Requires the `read` scope and `crm.products.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/products/{id} \
  -H "Authorization: Bearer bl_live_..."
PATCH/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 · pathThe 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 '{}'
DELETE/products/{id}

Delete one products record

Requires the `write` scope and `crm.products.write`.

Parameters

id*string · pathThe 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

GET/quotes

List quotes

Requires the `read` scope and `finance.quotes.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[status]string · queryExact match on `status`.
filter[contact_id]string · queryExact match on `contact_id`.
filter[company_id]string · queryExact match on `company_id`.
filter[deal_id]string · queryExact match on `deal_id`.
filter[currency]string · queryExact match on `currency`.
filter[number]string · queryExact match on `number`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/quotes \
  -H "Authorization: Bearer bl_live_..."
GET/quotes/{id}

Fetch one quotes record

Requires the `read` scope and `finance.quotes.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/quotes/{id} \
  -H "Authorization: Bearer bl_live_..."
PATCH/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 · pathThe 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

GET/reports

List reports

Requires the `read` scope and `reporting.reports.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[dataset_key]string · queryExact match on `dataset_key`.
filter[chart_type]string · queryExact match on `chart_type`.
filter[visibility]string · queryExact match on `visibility`.
filter[owner_id]string · queryExact match on `owner_id`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/reports \
  -H "Authorization: Bearer bl_live_..."
GET/reports/{id}

Fetch one reports record

Requires the `read` scope and `reporting.reports.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/reports/{id} \
  -H "Authorization: Bearer bl_live_..."
POST/reports/{id}/run

Runs the report and returns its rows

Requires the `read` scope and `reporting.reports.read`.

Parameters

id*string · pathThe record id
Idempotency-Keystring · headerA 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

GET/tags

List tags

Requires the `read` scope. Every member of the organisation may read these rows.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[object_type]string · queryExact match on `object_type`.
filter[name]string · queryExact match on `name`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/tags \
  -H "Authorization: Bearer bl_live_..."
POST/tags

Create 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-Keystring · headerA 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 '{}'
GET/tags/{id}

Fetch one tags record

Requires the `read` scope. Every member of the organisation may read these rows.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/tags/{id} \
  -H "Authorization: Bearer bl_live_..."
PATCH/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 · pathThe 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 '{}'
DELETE/tags/{id}

Delete one tags record

Requires the `write` scope and `core.tags.write`.

Parameters

id*string · pathThe 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

GET/tasks

List tasks

Requires the `read` scope. Every member of the organisation may read these rows.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[status]string · queryExact match on `status`.
filter[priority]string · queryExact match on `priority`.
filter[assignee_user_id]string · queryExact match on `assignee_user_id`.
filter[object_type]string · queryExact match on `object_type`.
filter[object_id]string · queryExact match on `object_id`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/tasks \
  -H "Authorization: Bearer bl_live_..."
POST/tasks

Create 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-Keystring · headerA 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 '{}'
GET/tasks/{id}

Fetch one tasks record

Requires the `read` scope. Every member of the organisation may read these rows.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/tasks/{id} \
  -H "Authorization: Bearer bl_live_..."
PATCH/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 · pathThe 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 '{}'
DELETE/tasks/{id}

Delete one tasks record

Requires the `write` scope and `core.tasks.write`.

Parameters

id*string · pathThe 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

GET/tickets

List tickets

Requires the `read` scope and `crm.tickets.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[pipeline_id]string · queryExact match on `pipeline_id`.
filter[stage_id]string · queryExact match on `stage_id`.
filter[status]string · queryExact match on `status`.
filter[priority]string · queryExact match on `priority`.
filter[owner_user_id]string · queryExact match on `owner_user_id`.
filter[contact_id]string · queryExact match on `contact_id`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/tickets \
  -H "Authorization: Bearer bl_live_..."
POST/tickets

Create 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-Keystring · headerA 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 '{}'
GET/tickets/{id}

Fetch one tickets record

Requires the `read` scope and `crm.tickets.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/tickets/{id} \
  -H "Authorization: Bearer bl_live_..."
PATCH/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 · pathThe 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 '{}'
DELETE/tickets/{id}

Delete one tickets record

Requires the `write` scope and `crm.tickets.write`.

Parameters

id*string · pathThe 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

GET/usage

List usage

Requires the `read` scope and `billing.usage.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[meter_key]string · queryExact 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

GET/users

List users

Requires the `read` scope and `core.members.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[role_id]string · queryExact match on `role_id`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/users \
  -H "Authorization: Bearer bl_live_..."
GET/users/{id}

Fetch one users record

Requires the `read` scope and `core.members.read`.

Parameters

id*string · pathThe 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

GET/webhooks

List webhooks

Requires the `read` scope and `core.webhooks.read`.

Parameters

limitinteger · queryPage size, 50 by default and capped at 200.
cursorstring · queryThe `next_cursor` from the previous page.
sortstring · querySort field, prefixed with `-` for descending.
updated_sincestring · queryOnly records changed at or after this instant. ISO 8601; anything else is rejected.
expandstring · queryComma-separated related objects to embed, where the resource offers any. Unknown names are ignored.
filter[active]string · queryExact match on `active`.

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/webhooks \
  -H "Authorization: Bearer bl_live_..."
POST/webhooks

Create 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-Keystring · headerA 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 '{}'
GET/webhooks/{id}

Fetch one webhooks record

Requires the `read` scope and `core.webhooks.read`.

Parameters

id*string · pathThe record id

Responses: 200, 401, 403, 404, 429, 500

curl https://valufield.com.au/api/v1/webhooks/{id} \
  -H "Authorization: Bearer bl_live_..."
PATCH/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 · pathThe 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 '{}'
DELETE/webhooks/{id}

Delete one webhooks record

Requires the `write` scope and `core.webhooks.write`.

Parameters

id*string · pathThe 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_..."
POST/webhooks/{id}/rotate-secret

Replace the signing secret and return the new one, once

Requires the `write` scope and `core.webhooks.write`.

Parameters

id*string · pathThe record id
Idempotency-Keystring · headerA 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.revoked

booking

booking.cancelledbooking.completedbooking.confirmedbooking.createdbooking.no_showbooking.rescheduled

call

call.score_skippedcall.scored

coaching

coaching.note_added

crm

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.updated

dashboard

dashboard.emailed

document

document.retention.applied

finance

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.viewed

forms

forms.landing_page.publishedforms.submission.created

knowledge

knowledge.import.appliedknowledge.import.proposedknowledge.question.askedknowledge.question.ratedknowledge.section.archivedknowledge.section.publishedknowledge.space.created

portal

portal.booking.cancelledportal.booking.rescheduledportal.conversation.repliedportal.file.downloadedportal.user.invitedportal.user.logged_in

push

push.subscribed

receptionist

receptionist.call_cappedreceptionist.callback_captured

report

report.created

training

training.assignment.createdtraining.assignment.reviewedtraining.session.completedtraining.sessions.abandoned

webhook

webhook.endpoint.disabled

Sample 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 yet

Triggers 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.

  1. Create an API key under Settings → Developers and copy it.
  2. Give the app this base URL: https://valufield.com.au/api/v1
  3. The connection test calls GET /me and shows the organisation it matched.

n8n

Not published yet

A 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.

  1. Create an API key under Settings → Developers and copy it.
  2. Give the app this base URL: https://valufield.com.au/api/v1
  3. Add a Baseline API credential, paste the key, and save.