Developers

Everybooking REST API

A token-authenticated JSON API over your account's booking data. Every endpoint is scoped to one account, resolved from the subdomain you call and cross-checked against the token you present.

Authentication

Send your API token as a bearer credential on every request. Tokens are created per account from Settings → API Tokens and carry the permissions of the user who minted them.

curl https://acme.everybooking.com/api/v2/bookings \
  -H "Authorization: Bearer $EVERYBOOKING_TOKEN" \
  -H "Content-Type: application/json"

Conventions

Base URL
https://<your-subdomain>.everybooking.com/api/v2 — the subdomain selects the account.
Responses
Every response wraps its payload in `data`. Collections add a `pagination` block with page, per_page, total and pages.
Pagination
Pass page and per_page on any collection. per_page defaults to 25, capped at 100.
Search
Collections that support it accept `search`, matching across that resource's searchable fields.
Writes
Send fields at the top level of the JSON body. Fields not listed as writable for a resource are ignored rather than rejected.
Errors
Non-2xx responses carry { "error": "<message>" }. 401 unauthenticated, 403 wrong account, 404 not found, 405 operation unsupported for that resource, 422 validation failed.
Liquid
Text fields marked Liquid accept {{ merge_tags }} resolved at send time.

Actions

The things integrators ask for that are not records: is this available, what would it cost, send the invoice, record the payment.

GET /api/v2/availability/check Check availability

Whether a product is available over a date range, with the quantity free and the next available date when it is not.

Parameters

Name In Type Required Description
resource_id query integer yes Product id.
start_date query string no YYYY-MM-DD.
end_date query string no YYYY-MM-DD.

Returns: Availability verdict

GET /api/v2/availability/search Search availability

Find open windows for a product, or for the product behind a booking line.

Parameters

Name In Type Required Description
resource_id query integer no Product id.
booking_item_id query integer no Use the product on this booking line instead.

Returns: Available windows

POST /api/v2/quotes/build Build a quote

Price a set of lines and create the booking behind them — the same engine the funnels and the AI quote agent use, so a quote built here prices identically to one a customer builds.

Parameters

Name In Type Required Description
lines body array yes Line items to quote, each naming a product and its parameters.

Returns: The created booking with its totals

POST /api/v2/bookings/{id}/send_invoice_email Send the invoice

Email the invoice for a booking to its contact, or to recipients you name.

Parameters

Name In Type Required Description
id path integer yes Booking id.
to body string no Override the recipient. Defaults to the booking contact.

Returns: Who it was sent to

POST /api/v2/bookings/{id}/record_payment Record a payment

Book a payment against an invoice. Bookkeeping only — this records money already taken, it does not charge a card.

Parameters

Name In Type Required Description
id path integer yes Booking id.
amount body number yes Amount received.
payment_type body string no How it was paid.

Returns: The created transaction

Email templates

The reusable emails your funnels, drip sequences and automations send. Create one here, then reference it by id from a funnel button's send_email action.

How to write a template worth personalizing — anatomy, rules, and a full worked example
HOW TO WRITE AN EMAIL TEMPLATE WORTH PERSONALIZING

The AI personalizer adapts your template for the one customer who just built a quote. It cannot invent prices, dates or policies, and its rewrite is capped at 2.5x your template's length — so the template supplies the anatomy and your judgment, and personalization supplies that customer's specifics. A three-line template stays a three-line email.

ANATOMY
* Human opener — One line that sounds like the owner, referencing how this contact came about (a call, an enquiry, a funnel submission). Never "Dear valued customer".
* The quote itself — Dates, party size, then the line items as short bullets with their prices, then the total and whether tax is in it. Concrete and scannable.
* How it actually runs — The logistics in plain sentences — start times, access windows, check-in and check-out — and what they MEAN for this group. This is the section that stops the follow-up email asking "so when can we get in?".
* The honest upsell — An option they did not ask for, with the arithmetic shown and the reason it is worth it. Give the real number, including when the upgrade is cheaper per unit than they would assume.
* The honest no — Where you cannot serve them, say so plainly and name the alternative that does work. A straight "our kitchen needs 20 people, here is the restaurant next door" builds more trust than a quote they will resent.
* What else is possible — Partners, activities, add-ons — specific, with names, contact details and real starting prices. Vague "we offer many activities" is worth nothing.
* What's included free — The amenities they get anyway. Cheap to say, and it reframes the total.
* A close that asks for one decision — Name the single next step ("one night or two?"), and give a real reason to answer now — genuine scarcity only, never manufactured pressure.
* A human signature — Name, business, phone. A person, not a company.

RULES
1. Write as the owner, to one person. Short sentences. No marketing voice, no "we are pleased to", no emojis.
2. Prices, dates and quantities come from Liquid tags or the quote — never typed as literals the personalizer would have to invent or re-derive.
3. Use markdown [label](url) for links. Required when a URL contains a spaced Liquid token like {{ booking_uuid }}, because a bare URL breaks on the whitespace.
4. Write the body as PLAIN TEXT with blank lines between paragraphs. The EditorJS content and the rendered HTML are built for you.
5. Put the owner's real judgment in the template — which upsell to push, where to say no, which partner to recommend. Personalization adapts wording to the customer; it does not invent policy.
6. Aim for substance over length, but do give the writer something to work with: a template of a few sentences cannot be personalized into a letter, because the rewrite is capped at 2.5x its length.

WORKED EXAMPLE (this is the target voice and shape)

Hi {{ customer.first_name }},

Good to talk this morning, and thanks for laying it out so clearly. Here is the quote, built exactly to the plan you sent.

{{ booking.start_date_pretty }}–{{ booking.end_date_pretty }} — {{ booking.guests }} guests

• 8 rooms, single occupancy, one night — see the quote below
• Meeting room, yours both days
• Large flatscreen TV on a stand, plus coffee and water in the room — included

Total {{ booking.total }}, taxes in.

How the two days run

The meeting room is yours from 11:00 a.m. Thursday, and again from 8:00 a.m. Friday through your 2:30 p.m. wrap. Guest rooms open at 4:00 p.m. and check out at 10:00 a.m. — so on the last day your team can clear their rooms in the morning and keep working right through. Nobody has to sit on a suitcase.

On the second night — it is cheaper than you would guess

You mentioned possibly arriving a night early, since your team is spread out. Worth knowing: a single night prices at our one-night rate, but a two-night stay drops the nightly rate. So the extra night costs less than the first one did.

Beyond the price, an 11:00 a.m. start means anyone driving in is leaving home before 7:00 a.m. Arriving the evening before means they walk into the meeting rested instead of straight off the highway. Say the word and I will add it.

Catering

Straight answer: our kitchen runs catered service for groups of 20 and up, so for a team of your size I would be quoting you a minimum that does not make sense. What groups your size do instead is eat at the golf club restaurant — it is a 40-second drive, they handle breakfast, lunch and dinner, and your team orders off the menu and pays for what they actually eat. I will let them know you are coming. If your numbers grow past 20, tell me and I will put full catering back on the table.

If you want a real team-building day, this is the piece to talk about

Our adventure partner runs the outdoor programming here and builds it around the group rather than handing you a fixed menu. Full day or half day, which is what usually fits around a working agenda.

What works well for a team of eight:
• A 12-seat Voyageur big canoe — your entire team in one boat, with fur-trade and Indigenous and Métis heritage teaching along the way. It is the one people talk about afterward.
• Guided backcountry hikes, canoe lessons, archery
• A bannock bake and campfire to close out the day
• A mobile escape room that runs indoors or out — the sensible choice if the weather turns

Certified guides, trusted by 75+ organizations. Pricing starts at $750 a day and is set to the group and the length of the session.

Call them directly, or say the word and I will coordinate it alongside your stay so it lands on one plan. Fall dates do go, so worth deciding early.

And the free things

Sauna and hot tub until 10:00 p.m., two pool tables overlooking the river, volleyball, and a fire pit if you want one. The suspension bridge is a short walk and worth doing before dark.

To hold it

Tell me one night or two, and I will send the confirmed invoice. September is a busy month here — your dates are open right now, and I would rather lock your rooms than have you find out otherwise in three weeks.

[View your quote]({{ booking_url }})

Thanks {{ customer.first_name }},
{{ account.owner_name }}
{{ account.name }}
{{ account.phone }}
GET /api/v1/email_templates List templates

Every template on the account, newest-updated first.

Returns: Array<EmailTemplate>

GET /api/v1/email_templates/{id} Get a template

One template with its drip sequences and tags.

Parameters

Name In Type Required Description
id path integer yes Template id.

Returns: EmailTemplate

POST /api/v1/email_templates Create a template

Body fields go under an `email_template` key. Pass `body` as PLAIN TEXT — blank lines separate paragraphs and markdown [label](url) becomes a link. The rich-text content and rendered HTML are built for you.

Parameters

Name In Type Required Description
name body string yes Internal name — what the funnel editor's email-action picker displays.
subject body string yes Subject line. Liquid supported.
body body string yes Plain text or markdown. Liquid supported. Rendered to HTML for you.
from body string no Sender address.
to body string no Default recipient, usually a Liquid token like {{ customer.email }}.
footer body boolean no Append the account footer. Default true.
include_booking body boolean no Attach the booking invoice when sent. Default false.

Example request body

Hi {{ customer.first_name }},

Good to talk this morning, and thanks for laying it out so clearly. Here is the quote, built exactly to the plan you sent.

{{ booking.start_date_pretty }}–{{ booking.end_date_pretty }} — {{ booking.guests }} guests

• 8 rooms, single occupancy, one night — see the quote below
• Meeting room, yours both days
• Large flatscreen TV on a stand, plus coffee and water in the room — included

Total {{ booking.total }}, taxes in.

How the two days run

The meeting room is yours from 11:00 a.m. Thursday, and again from 8:00 a.m. Friday through your 2:30 p.m. wrap. Guest rooms open at 4:00 p.m. and check out at 10:00 a.m. — so on the last day your team can clear their rooms in the morning and keep working right through. Nobody has to sit on a suitcase.

On the second night — it is cheaper than you would guess

You mentioned possibly arriving a night early, since your team is spread out. Worth knowing: a single night prices at our one-night rate, but a two-night stay drops the nightly rate. So the extra night costs less than the first one did.

Beyond the price, an 11:00 a.m. start means anyone driving in is leaving home before 7:00 a.m. Arriving the evening before means they walk into the meeting rested instead of straight off the highway. Say the word and I will add it.

Catering

Straight answer: our kitchen runs catered service for groups of 20 and up, so for a team of your size I would be quoting you a minimum that does not make sense. What groups your size do instead is eat at the golf club restaurant — it is a 40-second drive, they handle breakfast, lunch and dinner, and your team orders off the menu and pays for what they actually eat. I will let them know you are coming. If your numbers grow past 20, tell me and I will put full catering back on the table.

If you want a real team-building day, this is the piece to talk about

Our adventure partner runs the outdoor programming here and builds it around the group rather than handing you a fixed menu. Full day or half day, which is what usually fits around a working agenda.

What works well for a team of eight:
• A 12-seat Voyageur big canoe — your entire team in one boat, with fur-trade and Indigenous and Métis heritage teaching along the way. It is the one people talk about afterward.
• Guided backcountry hikes, canoe lessons, archery
• A bannock bake and campfire to close out the day
• A mobile escape room that runs indoors or out — the sensible choice if the weather turns

Certified guides, trusted by 75+ organizations. Pricing starts at $750 a day and is set to the group and the length of the session.

Call them directly, or say the word and I will coordinate it alongside your stay so it lands on one plan. Fall dates do go, so worth deciding early.

And the free things

Sauna and hot tub until 10:00 p.m., two pool tables overlooking the river, volleyball, and a fire pit if you want one. The suspension bridge is a short walk and worth doing before dark.

To hold it

Tell me one night or two, and I will send the confirmed invoice. September is a busy month here — your dates are open right now, and I would rather lock your rooms than have you find out otherwise in three weeks.

[View your quote]({{ booking_url }})

Thanks {{ customer.first_name }},
{{ account.owner_name }}
{{ account.name }}
{{ account.phone }}

Returns: EmailTemplate

PATCH /api/v1/email_templates/{id} Update a template

Partial update. Send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Template id.
name body string no Internal name — what the funnel editor's email-action picker displays.
subject body string no Subject line. Liquid supported.
body body string no Plain text or markdown. Liquid supported. Rendered to HTML for you.
from body string no Sender address.
to body string no Default recipient, usually a Liquid token like {{ customer.email }}.
footer body boolean no Append the account footer. Default true.
include_booking body boolean no Attach the booking invoice when sent. Default false.

Returns: EmailTemplate

DELETE /api/v1/email_templates/{id} Delete a template

Removes the template and its drip sequences.

Parameters

Name In Type Required Description
id path integer yes Template id.

Returns: { deleted: true }

Bookings

Bookings and invoices are the same record. Line items, payments and the payment schedule hang off a booking and are addressed through it.

GET /api/v2/bookings List bookings

Every booking on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across customer_name, customer_email, customer_phone, booking_reference.

Returns: Array<Booking>

GET /api/v2/bookings/{id} Get a booking

One booking in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Booking

POST /api/v2/bookings Create a booking

Create a booking.

Parameters

Name In Type Required Description
status_id body string no Status identifier (e.g. draft, paid, pending)
customer_name body string no Customer full name
customer_email body string no Customer email address
customer_phone body string no Customer phone number
customer_company body string no Customer company / organization name
customer_address body string no Street address
customer_city body string no City
customer_region body string no State / province / region
customer_postal_zip body string no Postal / ZIP code
customer_country body string no Country (e.g. CA, US)
customer_id body integer no Customer record ID
organization_id body integer no Organization (DEPARTMENT, never an umbrella) this invoice is billed to
start_date body string no Start date (YYYY-MM-DD). On a booking WITH line items this MOVES the whole booking: every item shifts by the same day-offset and reprices at the new dates (comped/custom line prices are re-derived by the engine — re-apply overrides after a move).
end_date body string no End date (YYYY-MM-DD). Item-derived: it follows the items, which shift with start_date. To change stay LENGTH edit the item dates via update_booking_item.
currency body string no Currency code (e.g. USD)

Returns: Booking

PATCH /api/v2/bookings/{id} Update a booking

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
status_id body string no Status identifier (e.g. draft, paid, pending)
customer_name body string no Customer full name
customer_email body string no Customer email address
customer_phone body string no Customer phone number
customer_company body string no Customer company / organization name
customer_address body string no Street address
customer_city body string no City
customer_region body string no State / province / region
customer_postal_zip body string no Postal / ZIP code
customer_country body string no Country (e.g. CA, US)
customer_id body integer no Customer record ID
organization_id body integer no Organization (DEPARTMENT, never an umbrella) this invoice is billed to
start_date body string no Start date (YYYY-MM-DD). On a booking WITH line items this MOVES the whole booking: every item shifts by the same day-offset and reprices at the new dates (comped/custom line prices are re-derived by the engine — re-apply overrides after a move).
end_date body string no End date (YYYY-MM-DD). Item-derived: it follows the items, which shift with start_date. To change stay LENGTH edit the item dates via update_booking_item.
currency body string no Currency code (e.g. USD)

Returns: Booking

DELETE /api/v2/bookings/{id} Delete a booking

Delete a booking.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/bookings/{booking_id}/items List items

Every item on the account. Scoped to the booking in the URL.

Parameters

Name In Type Required Description
booking_id path integer yes The parent booking.
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.

Returns: Array<BookingItem>

GET /api/v2/bookings/{booking_id}/items/{id} Get a item

One item in full.

Parameters

Name In Type Required Description
booking_id path integer yes The parent booking.
id path integer yes Record id.

Returns: BookingItem

PATCH /api/v2/bookings/{booking_id}/items/{id} Update a item

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
booking_id path integer yes The parent booking.
id path integer yes Record id.
status_id body string no Status identifier
start_date body string no Start date/time (ISO 8601)
end_date body string no End date/time (ISO 8601)
summary body string no Item summary

Returns: BookingItem

GET /api/v2/bookings/{booking_id}/transactions List transactions

Every transaction on the account. Scoped to the booking in the URL.

Parameters

Name In Type Required Description
booking_id path integer yes The parent booking.
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.

Returns: Array<Transaction>

GET /api/v2/bookings/{booking_id}/transactions/{id} Get a transaction

One transaction in full.

Parameters

Name In Type Required Description
booking_id path integer yes The parent booking.
id path integer yes Record id.

Returns: Transaction

PATCH /api/v2/bookings/{booking_id}/transactions/{id} Update a transaction

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
booking_id path integer yes The parent booking.
id path integer yes Record id.
status body string no Transaction status
payment_date body string no Payment date (ISO 8601)

Returns: Transaction

GET /api/v2/bookings/{booking_id}/schedule_payments List schedule payments

Every schedule payment on the account. Scoped to the booking in the URL.

Parameters

Name In Type Required Description
booking_id path integer yes The parent booking.
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.

Returns: Array<SchedulePayment>

GET /api/v2/bookings/{booking_id}/schedule_payments/{id} Get a schedule payment

One schedule payment in full.

Parameters

Name In Type Required Description
booking_id path integer yes The parent booking.
id path integer yes Record id.

Returns: SchedulePayment

PATCH /api/v2/bookings/{booking_id}/schedule_payments/{id} Update a schedule payment

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
booking_id path integer yes The parent booking.
id path integer yes Record id.
payment_date body string no Scheduled payment date (ISO 8601)
payment_amount body number no Amount to charge
payment_status body string no Payment status
status_id body string no Status identifier
retry_at body string no Next retry timestamp (ISO 8601)
notified body boolean no Whether customer has been notified

Returns: SchedulePayment

GET /api/v2/statuses List statuses

Every status on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across label, status_id.

Returns: Array<Status>

GET /api/v2/statuses/{id} Get a status

One status in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Status

POST /api/v2/statuses Create a status

Create a status.

Parameters

Name In Type Required Description
label body string no Display label
color body string no Hex color code
order body integer no Sort order
enabled body boolean no Whether this status is enabled

Returns: Status

PATCH /api/v2/statuses/{id} Update a status

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
label body string no Display label
color body string no Hex color code
order body integer no Sort order
enabled body boolean no Whether this status is enabled

Returns: Status

DELETE /api/v2/statuses/{id} Delete a status

Delete a status.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

Customers

The people and companies you sell to, plus the notes and tags you file against them.

GET /api/v2/customers List customers

Every customer on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across email, first_name, last_name, phone.

Returns: Array<Customer>

GET /api/v2/customers/{id} Get a customer

One customer in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Customer

POST /api/v2/customers Create a customer

Create a customer.

Parameters

Name In Type Required Description
email body string yes Customer email (unique per account)
first_name body string no First name
last_name body string no Last name
phone body string no Phone number
address body string no Street address
city body string no City
postal_zip body string no Postal/ZIP code
region body string no State/Province/Region
country body string no Country

Returns: Customer

PATCH /api/v2/customers/{id} Update a customer

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
email body string yes Customer email (unique per account)
first_name body string no First name
last_name body string no Last name
phone body string no Phone number
address body string no Street address
city body string no City
postal_zip body string no Postal/ZIP code
region body string no State/Province/Region
country body string no Country

Returns: Customer

DELETE /api/v2/customers/{id} Delete a customer

Delete a customer.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/customers/{customer_id}/addresses List addresses

Every address on the account. Scoped to the customer in the URL.

Parameters

Name In Type Required Description
customer_id path integer yes The parent customer.
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.

Returns: Array<CustomerAddress>

GET /api/v2/customers/{customer_id}/addresses/{id} Get a address

One address in full.

Parameters

Name In Type Required Description
customer_id path integer yes The parent customer.
id path integer yes Record id.

Returns: CustomerAddress

POST /api/v2/customers/{customer_id}/addresses Create a address

Create a address. Scoped to the customer in the URL.

Parameters

Name In Type Required Description
customer_id path integer yes The parent customer.
customer_id body integer yes Customer record ID
address_type body string no Type: primary, billing, shipping
is_primary body boolean no Primary address flag
address body string no Street address
city body string no City
region body string no State/Province/Region
postal_zip body string no Postal/ZIP code
country body string no Country
phone body string no Phone number
business_organization body string no Business / org name

Returns: CustomerAddress

PATCH /api/v2/customers/{customer_id}/addresses/{id} Update a address

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
customer_id path integer yes The parent customer.
id path integer yes Record id.
customer_id body integer yes Customer record ID
address_type body string no Type: primary, billing, shipping
is_primary body boolean no Primary address flag
address body string no Street address
city body string no City
region body string no State/Province/Region
postal_zip body string no Postal/ZIP code
country body string no Country
phone body string no Phone number
business_organization body string no Business / org name

Returns: CustomerAddress

DELETE /api/v2/customers/{customer_id}/addresses/{id} Delete a address

Delete a address.

Parameters

Name In Type Required Description
customer_id path integer yes The parent customer.
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/organizations List organizations

Every organization on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across name, website.

Returns: Array<Organization>

GET /api/v2/organizations/{id} Get a organization

One organization in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Organization

POST /api/v2/organizations Create a organization

Create a organization.

Parameters

Name In Type Required Description
name body string yes Organization name
status body string no active or archived
domains body array no Email domains grouping contacts into this organization, e.g. ["acme.com"]
website body string no Organization website

Returns: Organization

PATCH /api/v2/organizations/{id} Update a organization

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Organization name
status body string no active or archived
domains body array no Email domains grouping contacts into this organization, e.g. ["acme.com"]
website body string no Organization website

Returns: Organization

DELETE /api/v2/organizations/{id} Delete a organization

Delete a organization.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/notes List notes

Every note on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across content.

Returns: Array<Note>

GET /api/v2/notes/{id} Get a note

One note in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Note

POST /api/v2/notes Create a note

Create a note.

Parameters

Name In Type Required Description
content body string yes Note body
notable_type body string yes Polymorphic parent class (e.g. Booking, Customer)
notable_id body integer yes Polymorphic parent record ID
user_id body integer yes User who authored the note

Returns: Note

PATCH /api/v2/notes/{id} Update a note

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
content body string yes Note body
notable_type body string yes Polymorphic parent class (e.g. Booking, Customer)
notable_id body integer yes Polymorphic parent record ID
user_id body integer yes User who authored the note

Returns: Note

DELETE /api/v2/notes/{id} Delete a note

Delete a note.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/tags List tags

Every tag on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across name.

Returns: Array<Tag>

GET /api/v2/tags/{id} Get a tag

One tag in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Tag

POST /api/v2/tags Create a tag

Create a tag.

Parameters

Name In Type Required Description
name body string yes Tag name

Returns: Tag

PATCH /api/v2/tags/{id} Update a tag

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Tag name

Returns: Tag

DELETE /api/v2/tags/{id} Delete a tag

Delete a tag.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

Catalog

What you sell and how it is priced. Parameters are the options on a product (quantity, adults, nights) and carry the prices; a parameter assignment is what attaches one to a product.

GET /api/v2/products List products

Every product on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across name, sku.

Returns: Array<Product>

GET /api/v2/products/{id} Get a product

One product in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Product

POST /api/v2/products Create a product

Create a product.

Parameters

Name In Type Required Description
name body string yes Product name
sku body string no SKU identifier
description body string no Full description
summary body string no Short summary
stock body integer no Available stock quantity
category_id body integer no Category ID
booking_unit body string no Booking unit type (Days, Nights, Timeslots, Unit, 1H, 30M)
archived body boolean no Whether the product is archived (soft-delete)
status body string no Calendar status: available, unavailable, or disabled

Returns: Product

PATCH /api/v2/products/{id} Update a product

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Product name
sku body string no SKU identifier
description body string no Full description
summary body string no Short summary
stock body integer no Available stock quantity
category_id body integer no Category ID
booking_unit body string no Booking unit type (Days, Nights, Timeslots, Unit, 1H, 30M)
archived body boolean no Whether the product is archived (soft-delete)
status body string no Calendar status: available, unavailable, or disabled

Returns: Product

DELETE /api/v2/products/{id} Delete a product

Delete a product.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/products/{product_id}/parameter_assignments List parameter assignments

Every parameter assignment on the account. Scoped to the product in the URL.

Parameters

Name In Type Required Description
product_id path integer yes The parent product.
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.

Returns: Array<ParameterAssignment>

GET /api/v2/products/{product_id}/parameter_assignments/{id} Get a parameter assignment

One parameter assignment in full.

Parameters

Name In Type Required Description
product_id path integer yes The parent product.
id path integer yes Record id.

Returns: ParameterAssignment

POST /api/v2/products/{product_id}/parameter_assignments Create a parameter assignment

Create a parameter assignment. Scoped to the product in the URL.

Parameters

Name In Type Required Description
product_id path integer yes The parent product.
resource_id body integer yes Resource/Product ID
parameter_id body integer yes Parameter ID
position body integer no Sort position
parent_id body integer no Parent parameter assignment ID (for nesting)
unique_items body boolean no Whether this controls unique inventory items

Returns: ParameterAssignment

PATCH /api/v2/products/{product_id}/parameter_assignments/{id} Update a parameter assignment

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
product_id path integer yes The parent product.
id path integer yes Record id.
resource_id body integer yes Resource/Product ID
parameter_id body integer yes Parameter ID
position body integer no Sort position
parent_id body integer no Parent parameter assignment ID (for nesting)
unique_items body boolean no Whether this controls unique inventory items

Returns: ParameterAssignment

DELETE /api/v2/products/{product_id}/parameter_assignments/{id} Delete a parameter assignment

Delete a parameter assignment.

Parameters

Name In Type Required Description
product_id path integer yes The parent product.
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/categories List categories

Every category on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across name.

Returns: Array<Category>

GET /api/v2/categories/{id} Get a category

One category in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Category

POST /api/v2/categories Create a category

Create a category.

Parameters

Name In Type Required Description
name body string yes Category name
description body string no Category description
pos body integer no Sort position

Returns: Category

PATCH /api/v2/categories/{id} Update a category

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Category name
description body string no Category description
pos body integer no Sort position

Returns: Category

DELETE /api/v2/categories/{id} Delete a category

Delete a category.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/parameters List parameters

Every parameter on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.

Returns: Array<Parameter>

GET /api/v2/parameters/{id} Get a parameter

One parameter in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Parameter

POST /api/v2/parameters Create a parameter

Create a parameter.

Parameters

Name In Type Required Description
name body string yes Parameter name
description body string no Parameter description
input_type body string no Input type (number, text, etc.)
default_value body string no Default value
required body boolean no Whether this parameter is required
pricing body boolean no Whether this parameter affects pricing

Returns: Parameter

PATCH /api/v2/parameters/{id} Update a parameter

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Parameter name
description body string no Parameter description
input_type body string no Input type (number, text, etc.)
default_value body string no Default value
required body boolean no Whether this parameter is required
pricing body boolean no Whether this parameter affects pricing

Returns: Parameter

DELETE /api/v2/parameters/{id} Delete a parameter

Delete a parameter.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/fees List fees

Every fee on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.

Returns: Array<Fee>

GET /api/v2/fees/{id} Get a fee

One fee in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Fee

POST /api/v2/fees Create a fee

Create a fee.

Parameters

Name In Type Required Description
name body string yes Fee name
amount body number yes Fee amount
amount_type body string no Amount type (fixed or percentage)
account_number body string no Accounting reference number
apply_fee_to body string no What the fee applies to
default body boolean no Whether this is a default fee

Returns: Fee

PATCH /api/v2/fees/{id} Update a fee

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Fee name
amount body number yes Fee amount
amount_type body string no Amount type (fixed or percentage)
account_number body string no Accounting reference number
apply_fee_to body string no What the fee applies to
default body boolean no Whether this is a default fee

Returns: Fee

DELETE /api/v2/fees/{id} Delete a fee

Delete a fee.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/discounts List discounts

Every discount on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.

Returns: Array<Discount>

GET /api/v2/discounts/{id} Get a discount

One discount in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Discount

POST /api/v2/discounts Create a discount

Create a discount.

Parameters

Name In Type Required Description
name body string yes Discount name
discount_code body string no Discount code (optional)
discount_type body string no Type of discount (e.g. percent, fixed)
enabled body boolean no Whether discount is active
dynamic_rate body number no Dynamic discount rate
start_date body string no Start date (YYYY-MM-DD)
end_date body string no End date (YYYY-MM-DD)
apply_to body array yes Resource (product) ids the discount applies to. Required + must contain at least one id. Pass an empty array only when paired with rules.
discount_amount body object yes Hash payload like {"type":"percent","value":10} or {"type":"fixed","value":25}. Required.
rules body array no Rule ids that gate this discount (optional).

Returns: Discount

PATCH /api/v2/discounts/{id} Update a discount

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Discount name
discount_code body string no Discount code (optional)
discount_type body string no Type of discount (e.g. percent, fixed)
enabled body boolean no Whether discount is active
dynamic_rate body number no Dynamic discount rate
start_date body string no Start date (YYYY-MM-DD)
end_date body string no End date (YYYY-MM-DD)
apply_to body array yes Resource (product) ids the discount applies to. Required + must contain at least one id. Pass an empty array only when paired with rules.
discount_amount body object yes Hash payload like {"type":"percent","value":10} or {"type":"fixed","value":25}. Required.
rules body array no Rule ids that gate this discount (optional).

Returns: Discount

DELETE /api/v2/discounts/{id} Delete a discount

Delete a discount.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/gift_certificates List gift certificates

Every gift certificate on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.

Returns: Array<GiftCertificate>

GET /api/v2/gift_certificates/{id} Get a gift certificate

One gift certificate in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: GiftCertificate

POST /api/v2/gift_certificates Create a gift certificate

Create a gift certificate.

Parameters

Name In Type Required Description
name body string yes Certificate name
sku body string no SKU code
description body string no Description
price body number no Price
balance body number no Current balance
to body string no Recipient name
from body string no Sender name
recipient_email body string no Recipient email
message body string no Gift message
expires body boolean no Whether the certificate expires
expiry_date body string no Expiry date (YYYY-MM-DD)
category_id body integer no Category ID

Returns: GiftCertificate

PATCH /api/v2/gift_certificates/{id} Update a gift certificate

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Certificate name
sku body string no SKU code
description body string no Description
price body number no Price
balance body number no Current balance
to body string no Recipient name
from body string no Sender name
recipient_email body string no Recipient email
message body string no Gift message
expires body boolean no Whether the certificate expires
expiry_date body string no Expiry date (YYYY-MM-DD)
category_id body integer no Category ID

Returns: GiftCertificate

DELETE /api/v2/gift_certificates/{id} Delete a gift certificate

Delete a gift certificate.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/rules List rules

Every rule on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across name.

Returns: Array<Rule>

GET /api/v2/rules/{id} Get a rule

One rule in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Rule

POST /api/v2/rules Create a rule

Create a rule.

Parameters

Name In Type Required Description
name body string yes Rule set name
enabled_rules body object no Map of rule key => enabled boolean (or rule config). The Truths system stores its toggles here.

Returns: Rule

PATCH /api/v2/rules/{id} Update a rule

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Rule set name
enabled_rules body object no Map of rule key => enabled boolean (or rule config). The Truths system stores its toggles here.

Returns: Rule

DELETE /api/v2/rules/{id} Delete a rule

Delete a rule.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/product_events List product events

Every product event on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across name.

Returns: Array<ResourceEvent>

GET /api/v2/product_events/{id} Get a product event

One product event in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: ResourceEvent

POST /api/v2/product_events Create a product event

Create a product event.

Parameters

Name In Type Required Description
name body string yes Event name
event_type body string no Type: seasonal, special, or time
inventory_status body string no Inventory status: available, unavailable, or maintenance
start_date body string no Start date/time (ISO 8601)
end_date body string no End date/time (ISO 8601)
enabled body boolean no Whether the event is active
apply_to body object no Scope (exact semantics): {"all": true} = every product; {"<category_id>": []} = every product in that category, present and future; {"<category_id>": ["<resource_id>", ...]} = ONLY the listed products (resource ids as STRINGS). A non-empty list never means the whole category.
applicable_times body array no Applicable time slots
recurrence body object no Recurrence configuration (JSON)
price_source body object no Price override configuration (JSON)
visible_on_calendar body boolean no Show on calendar
force_to_date body boolean no Force to specific date
rules_id body integer no Associated rule ID
weather_dependent body boolean no Tour: auto-flag if forecast is poor
weather_notice_hours body integer no Tour: hours before to notify on weather
lead_time_hours body integer no Coaching/Consulting/Tour: minimum hours of booking notice
cancellation_deadline_hours body integer no Hours before start when cancellation forfeits deposit
setup_buffer_minutes body integer no Events/Wedding: setup buffer in minutes
breakdown_buffer_minutes body integer no Events/Wedding: breakdown buffer in minutes
min_party_size body integer no Tour/Events: minimum party size
max_party_size body integer no Tour/Events: maximum party size

Returns: ResourceEvent

PATCH /api/v2/product_events/{id} Update a product event

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Event name
event_type body string no Type: seasonal, special, or time
inventory_status body string no Inventory status: available, unavailable, or maintenance
start_date body string no Start date/time (ISO 8601)
end_date body string no End date/time (ISO 8601)
enabled body boolean no Whether the event is active
apply_to body object no Scope (exact semantics): {"all": true} = every product; {"<category_id>": []} = every product in that category, present and future; {"<category_id>": ["<resource_id>", ...]} = ONLY the listed products (resource ids as STRINGS). A non-empty list never means the whole category.
applicable_times body array no Applicable time slots
recurrence body object no Recurrence configuration (JSON)
price_source body object no Price override configuration (JSON)
visible_on_calendar body boolean no Show on calendar
force_to_date body boolean no Force to specific date
rules_id body integer no Associated rule ID
weather_dependent body boolean no Tour: auto-flag if forecast is poor
weather_notice_hours body integer no Tour: hours before to notify on weather
lead_time_hours body integer no Coaching/Consulting/Tour: minimum hours of booking notice
cancellation_deadline_hours body integer no Hours before start when cancellation forfeits deposit
setup_buffer_minutes body integer no Events/Wedding: setup buffer in minutes
breakdown_buffer_minutes body integer no Events/Wedding: breakdown buffer in minutes
min_party_size body integer no Tour/Events: minimum party size
max_party_size body integer no Tour/Events: maximum party size

Returns: ResourceEvent

DELETE /api/v2/product_events/{id} Delete a product event

Delete a product event.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

Payment configuration

Deposit rules, payment types, and the quote and terms templates applied to invoices.

GET /api/v2/deposit_settings List deposit settings

Every deposit setting on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.

Returns: Array<DepositSetting>

GET /api/v2/deposit_settings/{id} Get a deposit setting

One deposit setting in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: DepositSetting

POST /api/v2/deposit_settings Create a deposit setting

Create a deposit setting.

Parameters

Name In Type Required Description
name body string yes Payment setting name
deposit_mode body object no Deposit mode configuration (JSON)
change_booking_status body integer no Status to change booking to after payment
schedule_payments body boolean no Enable scheduled payments
payment_frequency body string no Installment cadence. Use 'custom' together with `installments` for N equal payments.
final_payment body object no Final payment configuration (JSON)

Returns: DepositSetting

PATCH /api/v2/deposit_settings/{id} Update a deposit setting

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Payment setting name
deposit_mode body object no Deposit mode configuration (JSON)
change_booking_status body integer no Status to change booking to after payment
schedule_payments body boolean no Enable scheduled payments
payment_frequency body string no Installment cadence. Use 'custom' together with `installments` for N equal payments.
final_payment body object no Final payment configuration (JSON)

Returns: DepositSetting

DELETE /api/v2/deposit_settings/{id} Delete a deposit setting

Delete a deposit setting.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/payment_types List payment types

Every payment type on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.

Returns: Array<PaymentType>

GET /api/v2/payment_types/{id} Get a payment type

One payment type in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: PaymentType

DELETE /api/v2/payment_types/{id} Delete a payment type

Delete a payment type.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/payment_methods List payment methods

Every payment method on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across card_last4, name_on_card.

Returns: Array<PaymentMethod>

GET /api/v2/payment_methods/{id} Get a payment method

One payment method in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: PaymentMethod

GET /api/v2/quote_templates List quote templates

Every quote template on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across name.

Returns: Array<QuoteTemplate>

GET /api/v2/quote_templates/{id} Get a quote template

One quote template in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: QuoteTemplate

POST /api/v2/quote_templates Create a quote template

Create a quote template.

Parameters

Name In Type Required Description
name body string yes Template name
template_type body string no Template type (default: basic)
layout body object no Layout configuration (JSON)
data body object no Template data (JSON)

Returns: QuoteTemplate

PATCH /api/v2/quote_templates/{id} Update a quote template

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Template name
template_type body string no Template type (default: basic)
layout body object no Layout configuration (JSON)
data body object no Template data (JSON)

Returns: QuoteTemplate

DELETE /api/v2/quote_templates/{id} Delete a quote template

Delete a quote template.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/terms_templates List terms templates

Every terms template on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across name.

Returns: Array<TermsTemplate>

GET /api/v2/terms_templates/{id} Get a terms template

One terms template in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: TermsTemplate

POST /api/v2/terms_templates Create a terms template

Create a terms template.

Parameters

Name In Type Required Description
name body string yes Template label, e.g. 'Workforce Accommodation Agreement'
body body string no Contract / terms text (HTML or plain text)
archived body boolean no Archive without deleting
position body integer no Sort order

Returns: TermsTemplate

PATCH /api/v2/terms_templates/{id} Update a terms template

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Template label, e.g. 'Workforce Accommodation Agreement'
body body string no Contract / terms text (HTML or plain text)
archived body boolean no Archive without deleting
position body integer no Sort order

Returns: TermsTemplate

DELETE /api/v2/terms_templates/{id} Delete a terms template

Delete a terms template.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

Funnels

Booking funnels and what customers submitted through them.

GET /api/v2/funnels List funnels

Every funnel on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across name, slug.

Returns: Array<Funnel>

GET /api/v2/funnels/{id} Get a funnel

One funnel in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Funnel

PATCH /api/v2/funnels/{id} Update a funnel

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string no Funnel name
description body string no Funnel description. Doubles as the AI-reading guidance any AI injects when reading this funnel's saved answers (e.g. 'the activity SKUs are auto-added options shown to every guest, NOT selections; focus on the event type, room + meal needs, and the stated biggest concern').
draft body boolean no Whether funnel is in draft mode
archived body boolean no Whether funnel is archived
template body boolean no Flag this funnel as a gallery FunnelTemplate (pair with template_slug)
template_slug body string no Unique slug for the template gallery page (/funnel-templates/<slug>). Required for the funnel to appear in the template API.

Returns: Funnel

GET /api/v2/survey_responses List survey responses

Every survey response on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.

Returns: Array<SurveyResponse>

GET /api/v2/survey_responses/{id} Get a survey response

One survey response in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: SurveyResponse

PATCH /api/v2/survey_responses/{id} Update a survey response

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
status body string no Response status

Returns: SurveyResponse

Content

Images and files, and the collections they belong to.

GET /api/v2/assets List assets

Every asset on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across name, description.

Returns: Array<Asset>

GET /api/v2/assets/{id} Get a asset

One asset in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Asset

PATCH /api/v2/assets/{id} Update a asset

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string no Asset name
description body string no Asset description
weight body integer no Sort weight

Returns: Asset

GET /api/v2/asset_collections List asset collections

Every asset collection on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across name.

Returns: Array<AssetCollection>

GET /api/v2/asset_collections/{id} Get a asset collection

One asset collection in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: AssetCollection

POST /api/v2/asset_collections Create a asset collection

Create a asset collection.

Parameters

Name In Type Required Description
name body string yes Collection name
asset_ids body array no Array of Asset IDs in this collection

Returns: AssetCollection

PATCH /api/v2/asset_collections/{id} Update a asset collection

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Collection name
asset_ids body array no Array of Asset IDs in this collection

Returns: AssetCollection

DELETE /api/v2/asset_collections/{id} Delete a asset collection

Delete a asset collection.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

Sales & support

Deals in the pipeline and customer support tickets.

GET /api/v2/deals List deals

Every deal on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.

Returns: Array<Deal>

GET /api/v2/deals/{id} Get a deal

One deal in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Deal

GET /api/v2/support_tickets List support tickets

Every support ticket on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across name, email, message.

Returns: Array<SupportTicket>

GET /api/v2/support_tickets/{id} Get a support ticket

One support ticket in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: SupportTicket

POST /api/v2/support_tickets Create a support ticket

Create a support ticket.

Parameters

Name In Type Required Description
name body string yes Submitter name
email body string yes Submitter email
message body string yes Ticket message body
status body string no Status: new, open, closed
url body string no Page URL where ticket was opened
metadata body object no Additional metadata (JSON)

Returns: SupportTicket

PATCH /api/v2/support_tickets/{id} Update a support ticket

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Submitter name
email body string yes Submitter email
message body string yes Ticket message body
status body string no Status: new, open, closed
url body string no Page URL where ticket was opened
metadata body object no Additional metadata (JSON)

Returns: SupportTicket

DELETE /api/v2/support_tickets/{id} Delete a support ticket

Delete a support ticket.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

Reporting & knowledge

Saved reports, and the knowledge-base entries the AI answers questions from.

GET /api/v2/reports List reports

Every report on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.
search query string no Matches across name, slug.

Returns: Array<Report>

GET /api/v2/reports/{id} Get a report

One report in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Report

POST /api/v2/reports Create a report

Create a report.

Parameters

Name In Type Required Description
name body string yes Report name
report_type body string yes Report type identifier
slug body string yes Slug (unique within account)
parameters body object no Report parameters (JSON)
expires_at body string no Expiration timestamp (ISO 8601)

Returns: Report

PATCH /api/v2/reports/{id} Update a report

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
name body string yes Report name
report_type body string yes Report type identifier
slug body string yes Slug (unique within account)
parameters body object no Report parameters (JSON)
expires_at body string no Expiration timestamp (ISO 8601)

Returns: Report

DELETE /api/v2/reports/{id} Delete a report

Delete a report.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }

GET /api/v2/knowledge_base_entries List knowledge base entries

Every knowledge base entry on the account.

Parameters

Name In Type Required Description
page query integer no Page number. Default 1.
per_page query integer no Results per page. Default 25, max 100.

Returns: Array<Datapoint>

GET /api/v2/knowledge_base_entries/{id} Get a knowledge base entry

One knowledge base entry in full.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: Datapoint

POST /api/v2/knowledge_base_entries Create a knowledge base entry

Create a knowledge base entry.

Parameters

Name In Type Required Description
source_type body string yes Source type: user, url, or category
source body string yes Source identifier
content body string yes Datapoint content
metadata body object no Additional metadata (JSON)

Returns: Datapoint

PATCH /api/v2/knowledge_base_entries/{id} Update a knowledge base entry

Partial update — send only the fields you are changing.

Parameters

Name In Type Required Description
id path integer yes Record id.
source_type body string yes Source type: user, url, or category
source body string yes Source identifier
content body string yes Datapoint content
metadata body object no Additional metadata (JSON)

Returns: Datapoint

DELETE /api/v2/knowledge_base_entries/{id} Delete a knowledge base entry

Delete a knowledge base entry.

Parameters

Name In Type Required Description
id path integer yes Record id.

Returns: { deleted: true }