EMBRK.AI

API and MCP

API v1 · OpenAPI 3.1 · MCP endpoint https://docklinehq.com/api/mcp

Overview

One EMBRK.AI account can be reached two ways with one permission model. The REST API at https://docklinehq.com/api/v1 is for your own code and integration platforms; the MCP server at https://docklinehq.com/api/mcp is for AI assistants (Claude, ChatGPT, agents you build). Both expose the same catalog of tools, both accept the same credentials, and every call runs as the person who created the credential, never wider than what that person can do in EMBRK.AI right now.

Reads return data at once. Anything that changes data is queued for a person to approve in EMBRK.AI unless the account has set that tool to run automatically. Money is read and draft only: nothing here refunds, charges or pays out on its own.

Dates are YYYY-MM-DD in the account's timezone. Money is in minor units (cents). No list returns more than 200 rows per call; use page and limit.

Authentication

Send Authorization: Bearer <credential> on every request. Credentials never go in the query string. Two kinds are accepted:

API keys

Created in EMBRK.AI under Settings → Integrations → API keys. A key looks like dk_live_…, is shown once, and is stored hashed. When you create it you pick a tier and the exact tools it may call, and — for tools that change data — whether each one asks for approval or runs automatically. Keys work on both the REST API and the MCP endpoint. Revoke a key in the same place; revocation is immediate.

OAuth 2.1 (for AI apps and hosted integrations)

EMBRK.AI is its own authorization server. Discover it at https://docklinehq.com/.well-known/oauth-authorization-server. Authorization code with PKCE (S256) is required; clients register dynamically (RFC 7591) or by a client-id metadata document URL. The person authorizing sees a consent screen listing every tool the app asked for and chooses what is on.

  • Audience rule. Every access token is bound to one resource (RFC 8707). Request resource=https://docklinehq.com/api/v1 for the REST API or resource=https://docklinehq.com/api/mcp for MCP. A token minted for one is refused by the other with 401 invalid_token.
  • Token lifetime. Access tokens last one hour. Refresh tokens last 30 days and rotate on every use; presenting an already-used refresh token disconnects the whole connection (reuse detection). A connection disconnected in EMBRK.AI stops working at once regardless of token expiry.
  • Scopes. One scope per tool, tool:<operationId>, plus dockline:connect. The token's scope list is exactly what the person switched on.
curl https://docklinehq.com/api/v1/reports/summary?from=2026-09-01&to=2026-09-30 \
  -H "Authorization: Bearer dk_live_…"

Connect an AI assistant

Point any MCP client at https://docklinehq.com/api/mcp (Streamable HTTP, POST only, spec revision 2026-07-28 with the 2025 revisions accepted). The client discovers how to authorize from the protected-resource metadata and runs the OAuth flow above; no API key needs to be pasted anywhere. Clients that cannot do OAuth can send an API key as the bearer instead.

WhatURL
MCP endpointhttps://docklinehq.com/api/mcp
Protected resource metadata (MCP)https://docklinehq.com/.well-known/oauth-protected-resource/api/mcp
Protected resource metadata (REST)https://docklinehq.com/.well-known/oauth-protected-resource/api/v1
Authorization server metadatahttps://docklinehq.com/.well-known/oauth-authorization-server
Signing keyshttps://docklinehq.com/.well-known/jwks.json
OpenAPI 3.1https://docklinehq.com/api/v1/openapi.json

What the consent screen grants

The person connecting picks a tier(Reporting, Marketing, Operations or Full), which pre-fills a set of tool toggles, then edits the toggles one by one. Only tools that are on appear in the assistant's tool list, and only tools that person can use themselves are offered. A separate checkbox grants access to customer contact detail; without it, emails and phone numbers are masked the way EMBRK.AI masks them for staff without that permission. Tools added to EMBRK.AI later arrive switched off and are listed under “New tools, off” in Settings → Integrations.

Pending actions (“Ask every time”)

Every tool that changes data has a consent mode. With Ask every time (the default) the call does not run: it creates a pending action that a person with the right permission approves or denies in Settings → Integrations → Pending actions, within 24 hours. The assistant receives a pending id and can poll get_pending_action; on REST the same call answers 202 Accepted and GET /api/v1/pending-actions/{id} reports the outcome. Approval runs the same operation with the same arguments and is audited twice: requested by the app, approved by the person. Send an Idempotency-Key header to make retries safe. With Auto the tool runs at once. Money tools have no Auto.

Permissions

A credential is a grant: a tenant, the person who created it, a tier, per-tool toggles and consent modes. Four rules decide every call:

  1. The tool must be switched on for the credential. The tier only pre-fills the toggles.
  2. The person who created the credential must still hold the permission the tool needs, in EMBRK.AI, right now. Demote or deactivate them and their credentials shrink with them.
  3. A tool that changes data is queued unless its consent mode is Auto. Money is always queued.
  4. The account a call runs against is the credential's. Ids from another account are indistinguishable from missing ones.

Tiers

TierPre-enablesConsent default
ReportingReports; bookings, customers, availability and catalog readsn/a (reads)
Marketing+ segments, campaigns, reviews and AI-conversation reads; campaign and guest-message draftsAsk every time
Operations+ booking create / modify / check-in / no-show / cancel-to-credit; product, schedule and pricing writes; customer editsAsk every time
Full+ payouts report and refund options (read) — everything else the person can doAsk every time

Risk classes

RiskMeaning
readReturns data. Never queued.
writeChanges bookings, customers or the catalog through the same services the EMBRK.AI screens use. Queued unless set to Auto.
messagingSends to guests. Not in any tier and not available yet; drafts are inert and count as write.
moneyRefund drafts only. Always queued for a person with refund permission; nothing executes, pays out or charges through the API.

Rate limits

300 calls per 5 minutes per credential and 1500 per 5 minutes per account, across REST and MCP together. Over the limit answers 429 with a Retry-After header in seconds. Registration and token endpoints have their own per-IP limits. Request bodies are capped at 256 KB (413).

Errors

Success is { "data": … }. Errors are { "error": "<code>", "message": "<sentence>" }. The message is written for a developer to act on and never includes internals.

StatuserrorWhen
202status: pendingThe action is waiting for approval. Body carries pendingId and expiresAt.
400invalid_jsonThe body is not a JSON object.
401invalid_tokenNo credential, an invalid, expired or revoked one, a token for the other audience, or a creator who can no longer act. WWW-Authenticate names the metadata URL.
403insufficient_scopeThe tool is off for this credential or the creator lost the permission. The scope field (and WWW-Authenticate) names the toggle.
404not_availableThe endpoint is not enabled on this deployment yet, or nothing with that id exists in this account.
413payload_too_largeBody over 256 KB.
422invalid_argsArguments failed the schema; the message names the first failing field.
429rate_limitedOver the limit; see Retry-After.
500tool_failedThe operation failed inside EMBRK.AI.

Endpoints

Generated from the live catalog — the same source as the OpenAPI document and the MCP tool list. Every operation's operationId is its MCP tool name and its OAuth scope is tool:<operationId>. Paths are relative to https://docklinehq.com/api/v1.

Reporting

Sales, finance, tax, payouts and marketing reports for a date range.

GET/reports/summarySales summaryreadtier Reporting

Revenue, bookings, guests and refunds for a date range.

Scope tool:report_summary

Parameters: from (query, string, required), to (query, string, required)

GET/reports/financialFinancial reportreadtier Reporting

Collected, fees, tax, tips and net for a date range.

Scope tool:report_financial

Parameters: from (query, string, required), to (query, string, required)

GET/reports/salesSales by datereadtier Reporting

Daily sales by booking date or by tour date.

Scope tool:report_sales_by_date

Parameters: from (query, string, required), to (query, string, required), basis (query, string)

GET/reports/channelsChannel mixreadtier Reporting

Bookings and revenue by source channel and campaign.

Scope tool:report_channel_mix

Parameters: from (query, string, required), to (query, string, required)

GET/reports/utilizationUtilizationreadtier Reporting

Seats sold versus capacity per product and departure.

Scope tool:report_utilization

Parameters: from (query, string, required), to (query, string, required)

GET/reports/cancellationsCancellationsreadtier Reporting

Cancelled and refunded bookings with reasons.

Scope tool:report_cancellations

Parameters: from (query, string, required), to (query, string, required)

GET/reports/discountsDiscountsreadtier Reporting

Coupon and promotion usage and the revenue given up.

Scope tool:report_discounts

Parameters: from (query, string, required), to (query, string, required)

GET/reports/ticket-typesTicket typesreadtier Reporting

Sales by ticket type (adult, child, unit, add-on).

Scope tool:report_ticket_types

Parameters: from (query, string, required), to (query, string, required)

GET/reports/partnersPartners and resellersreadtier Reporting

Bookings and commissions by partner.

Scope tool:report_partners

Parameters: from (query, string, required), to (query, string, required)

GET/reports/taxTax reportreadtier Reporting

Tax collected by rate and jurisdiction.

Scope tool:report_tax

Parameters: from (query, string, required), to (query, string, required)

GET/reports/payoutsPayouts and balancereadtier Full

Stripe payouts, balance and processing fees.

Scope tool:report_payouts

Parameters: from (query, string, required), to (query, string, required)

GET/reports/customersCustomer reportreadtier Reporting

New versus returning customers and lifetime value. Contact detail masked unless PII is consented. Customer contact fields are masked unless the credential was granted PII access and its creator holds customers.pii.

Scope tool:report_customers

Parameters: from (query, string, required), to (query, string, required)

GET/reports/abandoned-cartsAbandoned cartsreadtier Marketing

Checkouts started and not completed, with recovery status.

Scope tool:report_abandoned_carts

Parameters: from (query, string, required), to (query, string, required)

GET/reports/email-engagementEmail engagementreadtier Marketing

Opens, clicks and bounces for customer email.

Scope tool:report_email_engagement

Parameters: from (query, string, required), to (query, string, required)

Bookings

Bookings, the manifest, calendar, availability, quotes and waivers.

GET/bookingsSearch bookingsreadtier Reporting

Bookings by date range, status, product or customer search. Customer contact fields are masked unless the credential was granted PII access and its creator holds customers.pii.

Scope tool:list_bookings

Parameters: page (query, integer), limit (query, integer), from (query, string), to (query, string), status (query, string), q (query, string), product (query, integer | string)

GET/bookings/{id}Booking detailreadtier Reporting

One booking by id or code, with items, payments and waivers. Customer contact fields are masked unless the credential was granted PII access and its creator holds customers.pii. The path parameter fills `booking`; a `booking` in the query is ignored.

Scope tool:get_booking

Parameters: id (path, integer | string, required)

POST/payment-requestsCreate a payment requestwritetier Operationscoming: 404 until enabled

A secure pay link (the same /pay/<code> page the ops UI uses) for an unpaid booking, so you can text or email it. The booking must be pending. No charge is made. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available.

Scope tool:create_payment_request · may answer 202 pending

Parameters: Idempotency-Key (header, string)

Body (JSON): booking (integer | string, required)

GET/manifestManifestreadtier Reporting

The run sheet for a day: departures, parties, check-in state. Customer contact fields are masked unless the credential was granted PII access and its creator holds customers.pii.

Scope tool:get_manifest

Parameters: date (query, string, required)

GET/calendarCalendarreadtier Reporting

Departures and rental blocks with load for a date range.

Scope tool:get_calendar

Parameters: from (query, string, required), to (query, string, required)

GET/availabilityAvailabilityreadtier Reporting

Bookable departures or units for a product on a date.

Scope tool:get_availability

Parameters: product (query, integer | string, required), date (query, string, required)

POST/quotePrice quotereadtier Reporting

What a booking would cost — the real quote engine, no hold placed.

Scope tool:quote

Parameters: Idempotency-Key (header, string)

Body (JSON): product (integer | string, required), date (string, required), time (string), party (object, required), coupon (string)

GET/waiversWaiversreadtier Reporting

Signed waivers by booking. Signer contact masked unless PII is consented. Customer contact fields are masked unless the credential was granted PII access and its creator holds customers.pii.

Scope tool:list_waivers

Parameters: page (query, integer), limit (query, integer), from (query, string), to (query, string)

Operations

Changes to bookings, customers and the catalog — queued for approval unless set to Auto.

POST/bookingsCreate a bookingwritetier Operationscoming: 404 until enabled

Book a departure (tour) or a rental for a guest through the walk-up path: atomic hold, real quote, confirmed with the full amount as an at-venue balance — no card is charged; the response carries the /pay link. `party` is { ticketTypeId or label: qty } (tours); `units` and `endTime` are for rentals. The guest needs a phone number. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Customer contact fields are masked unless the credential was granted PII access and its creator holds customers.pii. Available once the write tools ship; until then answers 404 not_available.

Scope tool:create_booking · may answer 202 pending

Parameters: Idempotency-Key (header, string)

Body (JSON): product (integer | string, required), date (string, required), time (string), window (integer | string), party (object, required), units (integer), endTime (string), customer (object, required), coupon (string), notes (string)

POST/bookings/{id}/seatsAdd seatswritetier Operationscoming: 404 until enabled

Add guests to a seat line on a booking: availability is re-checked and the price delta is added to the balance (the service is add-only). `add` = extra guests, or `tickets` = { ticketTypeId: extra qty }. `item` picks the line when the booking has several. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available. The path parameter fills `booking`; a `booking` in the body is ignored.

Scope tool:modify_booking_seats · may answer 202 pending

Parameters: id (path, integer | string, required), Idempotency-Key (header, string)

Body (JSON): booking (integer | string, required), item (integer | string), add (integer), tickets (object)

POST/bookings/{id}/unitsChange rental unitswritetier Operationscoming: 404 until enabled

Set the number of units on a rental line (target count, not a delta). Adding claims inventory atomically. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available. The path parameter fills `booking`; a `booking` in the body is ignored.

Scope tool:set_rental_units · may answer 202 pending

Parameters: id (path, integer | string, required), Idempotency-Key (header, string)

Body (JSON): booking (integer | string, required), item (integer | string), units (integer, required)

POST/bookings/{id}/partyChange party sizewritetier Operationscoming: 404 until enabled

Set the headcount on a booking line (price untouched). Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available. The path parameter fills `booking`; a `booking` in the body is ignored.

Scope tool:set_party_size · may answer 202 pending

Parameters: id (path, integer | string, required), Idempotency-Key (header, string)

Body (JSON): booking (integer | string, required), leg (integer | string), riders (integer, required)

POST/bookings/{id}/add-onsSet an add-onwritetier Operationscoming: 404 until enabled

Add, change or remove a catalog add-on on a booking (quantity 0 removes). Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available. The path parameter fills `booking`; a `booking` in the body is ignored.

Scope tool:set_booking_addon · may answer 202 pending

Parameters: id (path, integer | string, required), Idempotency-Key (header, string)

Body (JSON): booking (integer | string, required), addon (integer | string, required), quantity (integer, required), size (string)

POST/bookings/{id}/rescheduleReschedule a bookingwritetier Operationscoming: 404 until enabled

Move a seat line to another departure of the same product (by date + time or window id), or shift a rental line to a new start. Inventory moves atomically. The guest is NOT notified — send that from EMBRK.AI. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available. The path parameter fills `booking`; a `booking` in the body is ignored.

Scope tool:reschedule_booking · may answer 202 pending

Parameters: id (path, integer | string, required), Idempotency-Key (header, string)

Body (JSON): booking (integer | string, required), leg (integer | string), date (string, required), time (string), window (integer | string)

POST/bookings/{id}/check-inCheck inwritetier Operationscoming: 404 until enabled

Mark a booking checked in (rentals: checked out). A required unsigned waiver blocks unless `waiverOverrideReason` is given, which is logged. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available. The path parameter fills `booking`; a `booking` in the body is ignored.

Scope tool:check_in · may answer 202 pending

Parameters: id (path, integer | string, required), Idempotency-Key (header, string)

Body (JSON): booking (integer | string, required), waiverOverrideReason (string)

POST/bookings/{id}/undo-check-inUndo check-inwritetier Operationscoming: 404 until enabled

Reverse a check-in or check-out. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available. The path parameter fills `booking`; a `booking` in the body is ignored.

Scope tool:undo_check_in · may answer 202 pending

Parameters: id (path, integer | string, required), Idempotency-Key (header, string)

Body (JSON): booking (integer | string, required)

POST/bookings/{id}/no-showMark no-showwritetier Operationscoming: 404 until enabled

Mark a booking as a no-show. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available. The path parameter fills `booking`; a `booking` in the body is ignored.

Scope tool:mark_no_show · may answer 202 pending

Parameters: id (path, integer | string, required), Idempotency-Key (header, string)

Body (JSON): booking (integer | string, required)

POST/bookings/{id}/cancel-to-creditCancel to creditwritetier Operationscoming: 404 until enabled

Cancel a booking and issue store credit for what was collected (or `amountMinor`); inventory is released. Card refunds are not available here — use draft_refund. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available. The path parameter fills `booking`; a `booking` in the body is ignored.

Scope tool:cancel_booking_to_credit · may answer 202 pending

Parameters: id (path, integer | string, required), Idempotency-Key (header, string)

Body (JSON): booking (integer | string, required), amountMinor (integer), reason (string)

POST/customers/{id}Update a customerwritetier Operationscoming: 404 until enabled

Edit a customer’s name, tags, notes or VIP flag. Email and phone are identity keys and cannot be changed through the API. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Customer contact fields are masked unless the credential was granted PII access and its creator holds customers.pii. Available once the write tools ship; until then answers 404 not_available. The path parameter fills `customer`; a `customer` in the body is ignored.

Scope tool:update_customer · may answer 202 pending

Parameters: id (path, integer | string, required), Idempotency-Key (header, string)

Body (JSON): customer (integer | string, required), patch (object, required)

POST/customers/{id}/notesAdd a customer notewritetier Operationscoming: 404 until enabled

Append a note to a customer’s notes log. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available. The path parameter fills `customer`; a `customer` in the body is ignored.

Scope tool:add_customer_note · may answer 202 pending

Parameters: id (path, integer | string, required), Idempotency-Key (header, string)

Body (JSON): customer (integer | string, required), note (string, required)

POST/productsUpdate a productwritetier Operationscoming: 404 until enabled

Update an existing product’s listing, pricing and booking settings through the catalog service (publishes on save). Creating products is not available through the API. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available.

Scope tool:save_product · may answer 202 pending

Parameters: Idempotency-Key (header, string)

Body (JSON): product (integer | string, required), patch (object, required)

POST/products/{id}/scheduleSet a schedulewritetier Operationscoming: 404 until enabled

Add one departure, generate departures over a date range, or edit a departure’s capacity/status — for a tour product. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available. The path parameter fills `product`; a `product` in the body is ignored.

Scope tool:set_schedule · may answer 202 pending

Parameters: id (path, integer | string, required), Idempotency-Key (header, string)

Body (JSON): product (integer | string, required), add (object), generate (object), update (object)

POST/pricing-rulesSet a promo codewritetier Operationscoming: 404 until enabled

Create or update a promo code (coupon). Pricing-engine rules are managed in EMBRK.AI only. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available.

Scope tool:set_pricing_rule · may answer 202 pending

Parameters: Idempotency-Key (header, string)

Body (JSON): rule (integer | string), patch (object, required)

Money

Refund reads and drafts. Nothing here moves money on its own.

GET/bookings/{id}/refund-optionsRefund optionsreadtier Full

What the refund engine would do for a booking — amount, fees, policy. Read only. The path parameter fills `booking`; a `booking` in the query is ignored.

Scope tool:get_refund_options

Parameters: id (path, integer | string, required)

POST/bookings/{id}/refund-draftsDraft a refundmoneytier nonecoming: 404 until enabled

Queue a refund for a person with refund permission to approve in EMBRK.AI. Never executes on its own. Money: always queued as a pending action for a person with refund permission to approve — never auto-approved. Available once the write tools ship; until then answers 404 not_available. The path parameter fills `booking`; a `booking` in the body is ignored.

Scope tool:draft_refund · may answer 202 pending

Parameters: id (path, integer | string, required), Idempotency-Key (header, string)

Body (JSON): booking (integer | string, required), amountMinor (integer, required), reason (string, required)

Customers

Customer records and the sales pipeline.

GET/customersSearch customersreadtier Reporting

Customers by name, tag or recency. Contact detail masked unless PII is consented. Customer contact fields are masked unless the credential was granted PII access and its creator holds customers.pii.

Scope tool:list_customers

Parameters: page (query, integer), limit (query, integer), q (query, string), tag (query, string)

GET/customers/{id}Customer detailreadtier Reporting

One customer with bookings, notes and tags. Customer contact fields are masked unless the credential was granted PII access and its creator holds customers.pii. The path parameter fills `customer`; a `customer` in the query is ignored.

Scope tool:get_customer

Parameters: id (path, integer | string, required)

GET/pipelineSales pipelinereadtier Marketing

Open quotes and group inquiries by stage.

Scope tool:get_pipeline

Catalog

Products, schedules and pricing.

GET/productsList productsreadtier Reporting

Published tours and rentals with base pricing.

Scope tool:list_products

GET/products/{id}Product detailreadtier Reporting

One product with tickets, add-ons and schedule. The path parameter fills `product`; a `product` in the query is ignored.

Scope tool:get_product

Parameters: id (path, integer | string, required)

Marketing

Segments, campaigns and reviews.

GET/segmentsList segmentsreadtier Marketing

Saved audiences with live counts.

Scope tool:list_segments

GET/segments/{id}Segment countreadtier Marketing

How many customers match a segment right now. The path parameter fills `segment`; a `segment` in the query is ignored.

Scope tool:count_segment

Parameters: id (path, integer | string, required)

GET/segments/{id}/customersSegment membersreadtier Marketing

Customers in a segment. Contact masked unless PII is consented. Customer contact fields are masked unless the credential was granted PII access and its creator holds customers.pii. The path parameter fills `segment`; a `segment` in the query is ignored.

Scope tool:list_segment_customers

Parameters: id (path, integer | string, required), page (query, integer), limit (query, integer)

GET/campaignsList campaignsreadtier Marketing

Broadcasts and automations by state.

Scope tool:list_campaigns

Parameters: view (query, string)

POST/campaignsDraft a campaignwritetier Marketingcoming: 404 until enabled

Create an email broadcast as a DRAFT in Marketing → Campaigns. Pass full `html` for a custom design, or `headline` + `body` for the standard template. Never schedules or sends. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Available once the write tools ship; until then answers 404 not_available.

Scope tool:draft_campaign · may answer 202 pending

Parameters: Idempotency-Key (header, string)

Body (JSON): name (string, required), subject (string, required), html (string), preheader (string), headline (string), body (string), segment (integer | string)

GET/campaigns/{id}/statsCampaign statsreadtier Marketing

Sends, opens, clicks, bookings attributed for one campaign. The path parameter fills `campaign`; a `campaign` in the query is ignored.

Scope tool:campaign_stats

Parameters: id (path, integer | string, required)

GET/reviewsReviewsreadtier Marketing

Public reviews with rating and source.

Scope tool:list_reviews

Parameters: page (query, integer), limit (query, integer), minRating (query, integer)

GET/reviews/funnelReview-request funnelreadtier Marketing

Requests sent, opened, clicked and reviews left over a window.

Scope tool:review_funnel

Parameters: days (query, integer)

GET/reviews/private-feedbackPrivate feedbackreadtier Marketing

Guest feedback that stayed private, by resolution state. Customer contact fields are masked unless the credential was granted PII access and its creator holds customers.pii.

Scope tool:list_private_feedback

Parameters: status (query, string)

Comms

Guest messaging and the AI concierge.

GET/ai-conversationsAI conversationsreadtier Marketing

Recent website-chat and phone conversations handled by the concierge. Customer contact fields are masked unless the credential was granted PII access and its creator holds customers.pii.

Scope tool:list_ai_conversations

Parameters: page (query, integer), limit (query, integer), channel (query, string)

POST/messages/draftsDraft a guest messagewritetier Marketingcoming: 404 until enabled

Write an SMS or email to a guest into their inbox thread as a DRAFT note for a person to send. Nothing is sent. Mutating: with consent mode "Ask every time" (the default) the call returns 202 and a person approves it in EMBRK.AI; with "Auto" it runs at once. Customer contact fields are masked unless the credential was granted PII access and its creator holds customers.pii. Available once the write tools ship; until then answers 404 not_available.

Scope tool:draft_guest_message · may answer 202 pending

Parameters: Idempotency-Key (header, string)

Body (JSON): customer (integer | string, required), channel (string, required), body (string, required), subject (string)

System

Pending-action status and this document.

GET/pending-actions/{id}Pending action statusreadtier Reporting

Whether a queued action was approved, denied or is still waiting. The path parameter fills `id`; a `id` in the query is ignored.

Scope tool:get_pending_action

Parameters: id (path, string, required)

GET/openapi.jsonThis documentread

The OpenAPI 3.1 description of the API, generated from the live catalog. No credential needed.