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/v1for the REST API orresource=https://docklinehq.com/api/mcpfor MCP. A token minted for one is refused by the other with401 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>, plusdockline: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.
| What | URL |
|---|---|
| MCP endpoint | https://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 metadata | https://docklinehq.com/.well-known/oauth-authorization-server |
| Signing keys | https://docklinehq.com/.well-known/jwks.json |
| OpenAPI 3.1 | https://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:
- The tool must be switched on for the credential. The tier only pre-fills the toggles.
- 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.
- A tool that changes data is queued unless its consent mode is Auto. Money is always queued.
- The account a call runs against is the credential's. Ids from another account are indistinguishable from missing ones.
Tiers
| Tier | Pre-enables | Consent default |
|---|---|---|
| Reporting | Reports; bookings, customers, availability and catalog reads | n/a (reads) |
| Marketing | + segments, campaigns, reviews and AI-conversation reads; campaign and guest-message drafts | Ask every time |
| Operations | + booking create / modify / check-in / no-show / cancel-to-credit; product, schedule and pricing writes; customer edits | Ask every time |
| Full | + payouts report and refund options (read) — everything else the person can do | Ask every time |
Risk classes
| Risk | Meaning |
|---|---|
| read | Returns data. Never queued. |
| write | Changes bookings, customers or the catalog through the same services the EMBRK.AI screens use. Queued unless set to Auto. |
| messaging | Sends to guests. Not in any tier and not available yet; drafts are inert and count as write. |
| money | Refund 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.
| Status | error | When |
|---|---|---|
| 202 | status: pending | The action is waiting for approval. Body carries pendingId and expiresAt. |
| 400 | invalid_json | The body is not a JSON object. |
| 401 | invalid_token | No 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. |
| 403 | insufficient_scope | The tool is off for this credential or the creator lost the permission. The scope field (and WWW-Authenticate) names the toggle. |
| 404 | not_available | The endpoint is not enabled on this deployment yet, or nothing with that id exists in this account. |
| 413 | payload_too_large | Body over 256 KB. |
| 422 | invalid_args | Arguments failed the schema; the message names the first failing field. |
| 429 | rate_limited | Over the limit; see Retry-After. |
| 500 | tool_failed | The 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.
/reports/summarySales summaryreadtier ReportingRevenue, bookings, guests and refunds for a date range.
Scope tool:report_summary
Parameters: from (query, string, required), to (query, string, required)
/reports/financialFinancial reportreadtier ReportingCollected, fees, tax, tips and net for a date range.
Scope tool:report_financial
Parameters: from (query, string, required), to (query, string, required)
/reports/salesSales by datereadtier ReportingDaily 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)
/reports/channelsChannel mixreadtier ReportingBookings and revenue by source channel and campaign.
Scope tool:report_channel_mix
Parameters: from (query, string, required), to (query, string, required)
/reports/utilizationUtilizationreadtier ReportingSeats sold versus capacity per product and departure.
Scope tool:report_utilization
Parameters: from (query, string, required), to (query, string, required)
/reports/cancellationsCancellationsreadtier ReportingCancelled and refunded bookings with reasons.
Scope tool:report_cancellations
Parameters: from (query, string, required), to (query, string, required)
/reports/discountsDiscountsreadtier ReportingCoupon and promotion usage and the revenue given up.
Scope tool:report_discounts
Parameters: from (query, string, required), to (query, string, required)
/reports/ticket-typesTicket typesreadtier ReportingSales by ticket type (adult, child, unit, add-on).
Scope tool:report_ticket_types
Parameters: from (query, string, required), to (query, string, required)
/reports/partnersPartners and resellersreadtier ReportingBookings and commissions by partner.
Scope tool:report_partners
Parameters: from (query, string, required), to (query, string, required)
/reports/taxTax reportreadtier ReportingTax collected by rate and jurisdiction.
Scope tool:report_tax
Parameters: from (query, string, required), to (query, string, required)
/reports/payoutsPayouts and balancereadtier FullStripe payouts, balance and processing fees.
Scope tool:report_payouts
Parameters: from (query, string, required), to (query, string, required)
/reports/customersCustomer reportreadtier ReportingNew 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)
/reports/abandoned-cartsAbandoned cartsreadtier MarketingCheckouts started and not completed, with recovery status.
Scope tool:report_abandoned_carts
Parameters: from (query, string, required), to (query, string, required)
/reports/email-engagementEmail engagementreadtier MarketingOpens, 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.
/bookingsSearch bookingsreadtier ReportingBookings 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)
/bookings/{id}Booking detailreadtier ReportingOne 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)
/payment-requestsCreate a payment requestwritetier Operationscoming: 404 until enabledA 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)
/manifestManifestreadtier ReportingThe 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)
/calendarCalendarreadtier ReportingDepartures and rental blocks with load for a date range.
Scope tool:get_calendar
Parameters: from (query, string, required), to (query, string, required)
/availabilityAvailabilityreadtier ReportingBookable departures or units for a product on a date.
Scope tool:get_availability
Parameters: product (query, integer | string, required), date (query, string, required)
/quotePrice quotereadtier ReportingWhat 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)
/waiversWaiversreadtier ReportingSigned 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.
/bookingsCreate a bookingwritetier Operationscoming: 404 until enabledBook 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)
/bookings/{id}/seatsAdd seatswritetier Operationscoming: 404 until enabledAdd 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)
/bookings/{id}/unitsChange rental unitswritetier Operationscoming: 404 until enabledSet 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)
/bookings/{id}/partyChange party sizewritetier Operationscoming: 404 until enabledSet 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)
/bookings/{id}/add-onsSet an add-onwritetier Operationscoming: 404 until enabledAdd, 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)
/bookings/{id}/rescheduleReschedule a bookingwritetier Operationscoming: 404 until enabledMove 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)
/bookings/{id}/check-inCheck inwritetier Operationscoming: 404 until enabledMark 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)
/bookings/{id}/undo-check-inUndo check-inwritetier Operationscoming: 404 until enabledReverse 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)
/bookings/{id}/no-showMark no-showwritetier Operationscoming: 404 until enabledMark 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)
/bookings/{id}/cancel-to-creditCancel to creditwritetier Operationscoming: 404 until enabledCancel 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)
/customers/{id}Update a customerwritetier Operationscoming: 404 until enabledEdit 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)
/customers/{id}/notesAdd a customer notewritetier Operationscoming: 404 until enabledAppend 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)
/productsUpdate a productwritetier Operationscoming: 404 until enabledUpdate 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)
/products/{id}/scheduleSet a schedulewritetier Operationscoming: 404 until enabledAdd 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)
/pricing-rulesSet a promo codewritetier Operationscoming: 404 until enabledCreate 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.
/bookings/{id}/refund-optionsRefund optionsreadtier FullWhat 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)
/bookings/{id}/refund-draftsDraft a refundmoneytier nonecoming: 404 until enabledQueue 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.
/customersSearch customersreadtier ReportingCustomers 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)
/customers/{id}Customer detailreadtier ReportingOne 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)
/pipelineSales pipelinereadtier MarketingOpen quotes and group inquiries by stage.
Scope tool:get_pipeline
Catalog
Products, schedules and pricing.
/productsList productsreadtier ReportingPublished tours and rentals with base pricing.
Scope tool:list_products
/products/{id}Product detailreadtier ReportingOne 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.
/segmentsList segmentsreadtier MarketingSaved audiences with live counts.
Scope tool:list_segments
/segments/{id}Segment countreadtier MarketingHow 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)
/segments/{id}/customersSegment membersreadtier MarketingCustomers 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)
/campaignsList campaignsreadtier MarketingBroadcasts and automations by state.
Scope tool:list_campaigns
Parameters: view (query, string)
/campaignsDraft a campaignwritetier Marketingcoming: 404 until enabledCreate 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)
/campaigns/{id}/statsCampaign statsreadtier MarketingSends, 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)
/reviewsReviewsreadtier MarketingPublic reviews with rating and source.
Scope tool:list_reviews
Parameters: page (query, integer), limit (query, integer), minRating (query, integer)
/reviews/funnelReview-request funnelreadtier MarketingRequests sent, opened, clicked and reviews left over a window.
Scope tool:review_funnel
Parameters: days (query, integer)
/reviews/private-feedbackPrivate feedbackreadtier MarketingGuest 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.
/ai-conversationsAI conversationsreadtier MarketingRecent 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)
/messages/draftsDraft a guest messagewritetier Marketingcoming: 404 until enabledWrite 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.
/pending-actions/{id}Pending action statusreadtier ReportingWhether 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)
/openapi.jsonThis documentreadThe OpenAPI 3.1 description of the API, generated from the live catalog. No credential needed.