SA
Portal
API reference

Build on the ServiceAgent API platform.

Use this page as the human-friendly API entry point for installs, widgets, CRM, booking, communications, AI agents, workflows, integrations, webhooks, realtime voice, and MCP. For machine-readable context, pair it with the curated public OpenAPI spec, llms.txt, and llms-full.txt.

Base URLs

Runtime API base: https://process.serviceagent.ai

Docs base: https://docs.serviceagent.ai

Voice stream: wss://process.serviceagent.ai/v1/voice/stream

What this page covers

Public and authenticated developer APIs that support real integrations.

CRM, scheduling, communications, AI agents, knowledge, workflows, payments, surveys, and reviews.

MCP and voice entry points used by AI tools and realtime apps.

Platform areas

The public API is organized by what developers want to build: embedded customer experiences, CRM sync, scheduling, AI agent operations, automation, communications, and revenue workflows. Use the generated reference below for exact paths and schemas.

Embed and onboard

Provision demo workspaces, claim installs, fetch widget config, and create public chat or booking sessions.

CRM system of record

Manage companies, contacts, deals, activities, tasks, imports, filters, enrichment, and customer intelligence.

Scheduling operations

Build around appointments, staff, locations, availability, conflicts, rescheduling, and calendar exports.

AI agents and knowledge

Create agents, configure channels and voice settings, sync knowledge, run tests, and publish customer-facing agents.

Inbox and communications

Read and act on inbox threads, messages, emails, templates, calls, transcripts, recordings, and communication analytics.

Integrations and automation

Connect third-party CRMs/calendars/task systems, map fields, sync data, generate workflows, and inspect workflow runs.

Revenue and reputation

Use payments, invoices, payment links, subscriptions, credits, reviews, review requests, and surveys.

Webhooks, MCP, and AI tools

Subscribe to events, inspect deliveries, replay failures, and let Cursor, Claude, or ChatGPT operate through MCP.

Generated public OpenAPI reference

This section is generated from the curated public OpenAPI export, not a hand-maintained endpoint list. The full backend contract remains separate for FE codegen and contract checks; the public export includes the stable and beta surfaces intended for external developers and AI codegen tools.

Public spec

1.0

430 operations across 25 groups.

Download

openapi.public.json

Use for SDK generation, docs rendering, and AI codegen.

Generation policy

Explicit allowlist only. Internal, admin, telemetry, and inbound provider webhook routes stay out.

CRM Activities

MethodPathStabilitySummary
GET/v1/activitiesstableGet all activities
POST/v1/activitiesstableCreate a new activity
GET/v1/activities/{id}stableGet activity by ID
PATCH/v1/activities/{id}stableUpdate activity
DELETE/v1/activities/{id}stableDelete activity

AI Agents

MethodPathStabilitySummary
GET/v1/agentsbetaList unified agents
POST/v1/agentsbetaCreate a unified agent
GET/v1/agents/persona-templatesbetaList persona templates available for voice agent creation
GET/v1/agents/persona-templates/{id}betaFetch one persona template by id
GET/v1/agents/post-call-rules/catalogbetaList the post-call rules catalog for the rules editor
GET/v1/agents/post-call-rules/templatesbetaList pre-curated post-call rule templates
POST/v1/agents/post-call-rules/templates/{templateId}/apply-to-orgbetaApply a post-call rule template to one or more agents
GET/v1/agents/tool-catalogbetaList the tool catalog for operator tool-scope UI
DELETE/v1/agents/unified/{id}betaLegacy alias: delete a unified agent (soft delete)
GET/v1/agents/voice-configsbetaLegacy alias for voice config lookup (compat: GET /v1/agents/voice-configs?agentId=...)
GET/v1/agents/{id}betaGet a unified agent
PUT/v1/agents/{id}betaUpdate a unified agent
DELETE/v1/agents/{id}betaDelete a unified agent (soft delete)
GET/v1/agents/{id}/analyticsbetaGet agent analytics
POST/v1/agents/{id}/channels/chat/disablebetaDisable chat channel for an agent
POST/v1/agents/{id}/channels/chat/enablebetaEnable chat channel for an agent
POST/v1/agents/{id}/channels/voice/disablebetaDisable voice channel for an agent
POST/v1/agents/{id}/channels/voice/enablebetaEnable voice channel for an agent
PUT/v1/agents/{id}/channels/{channel}betaUpdate a channel configuration
GET/v1/agents/{id}/post-call-rule-executionsbetaGet a call's post-call rule execution log
GET/v1/agents/{id}/post-call-rulesbetaList post-call rules for a voice agent
PUT/v1/agents/{id}/post-call-rulesbetaReplace post-call rules for a voice agent
POST/v1/agents/{id}/publishbetaPublish an agent
POST/v1/agents/{id}/sample-runbetaRun a deterministic voice agent sample call
GET/v1/agents/{id}/sample-runs/{runId}betaFetch a deterministic voice agent sample-call result
POST/v1/agents/{id}/sync-knowledgebetaSync knowledge base to enabled channels
POST/v1/agents/{id}/test-callbetaInitiate a test call to the user’s phone
GET/v1/agents/{id}/test-call/{callId}betaGet test call status
POST/v1/agents/{id}/test-call/{callId}/endbetaEnd an ongoing test call (best effort)
GET/v1/agents/{id}/voice-configbetaGet voice agent config for a unified agent
PUT/v1/agents/{id}/voice-configbetaCreate or update voice agent config for a unified agent
POST/v1/agents/{id}/voice-config/dry-runbetaTest Drive: rehearse a single turn against the agent config
POST/v1/agents/{id}/voice-config/prompt-previewbetaInspect the compiled AIVA voice prompt for a unified agent
POST/v1/agents/{id}/voice-config/publishbetaPublish voice agent config
GET/v1/agents/{id}/voice-config/publish-previewbetaCustomer-facing publish preview summary
GET/v1/agents/{id}/voice-config/published-snapshotbetaGet the last published prompt snapshot for this agent
POST/v1/agents/{id}/voice-config/published-snapshotbetaUpsert the published prompt snapshot baseline
GET/v1/agents/{id}/voice-config/readinessbetaGet publish-readiness report for a unified agent voice config
GET/v1/ai/agentsbetaGet all AI agents for the organization
POST/v1/ai/agentsbetaCreate a new AI agent
GET/v1/ai/agents/templates/{industry}betaGet industry-specific agent templates
GET/v1/ai/agents/{id}betaGet a specific AI agent by ID
PATCH/v1/ai/agents/{id}betaUpdate an AI agent
DELETE/v1/ai/agents/{id}betaDelete an AI agent
GET/v1/ai/agents/{id}/callsbetaGet AI agent call history
GET/v1/ai/agents/{id}/performancebetaGet AI agent performance metrics
POST/v1/ai/agents/{id}/testbetaTest an AI agent with sample input

AI Brain

MethodPathStabilitySummary
GET/v1/ai/brain/contextbetaGet AI Brain context for chat/voice
POST/v1/ai/brain/knowledge/searchbetaSearch knowledge base with hybrid summary + chunk results
GET/v1/ai/brain/profilebetaGet business profile with coverage metrics
PUT/v1/ai/brain/profilebetaUpdate business profile and trigger AI sync
GET/v1/ai/brain/profile/gapsbetaAnalyze profile and return improvement suggestions
POST/v1/ai/brain/profile/syncbetaForce re-sync of AI Brain without changing profile
POST/v1/ai/brain/sync-servicesbetaSync service offerings into AI Brain profile

Knowledge

MethodPathStabilitySummary
GET/v1/ai/config/kbbetaGet all knowledge base articles
POST/v1/ai/config/kbbetaCreate a knowledge base article
GET/v1/ai/config/kb/search/{query}betaSearch knowledge base
GET/v1/ai/config/kb/{id}betaGet a knowledge base article by ID
PATCH/v1/ai/config/kb/{id}betaUpdate a knowledge base article
DELETE/v1/ai/config/kb/{id}betaDelete a knowledge base article
GET/v1/knowledge-basebetaAlias: list knowledge base articles
POST/v1/knowledge-basebetaAlias: create knowledge base article
GET/v1/knowledge-base/analyticsbetaKnowledge base analytics + recent queries
GET/v1/knowledge-base/articlesbetaList org knowledge base articles (for agent picker)
PATCH/v1/knowledge-base/{id}betaAlias: update knowledge base article
DELETE/v1/knowledge-base/{id}betaAlias: delete knowledge base article
GET/v1/knowledge-basesbetaList knowledge bases
POST/v1/knowledge-basesbetaCreate knowledge base
GET/v1/knowledge-bases/{id}betaGet knowledge base details
DELETE/v1/knowledge-bases/{id}betaDelete knowledge base
POST/v1/knowledge-bases/{id}/documentsbetaUpload a knowledge base document (url/text/fileUrl)
DELETE/v1/knowledge-bases/{id}/documents/{docId}betaRemove a knowledge base document
POST/v1/knowledge-bases/{id}/syncbetaTrigger re-indexing (embedding regeneration) for a knowledge base

Widget

MethodPathStabilitySummary
GET/v1/api/widget/{widgetKey}/configstableFetch public configuration for an embeddable chat widget.
POST/v1/api/widget/{widgetKey}/sessionstableCreate a widget chat session.
GET/v1/api/widget/{widgetKey}/session/{sessionId}stableRead a widget chat session.
POST/v1/api/widget/{widgetKey}/session/{sessionId}/attachmentsbetaUpload an attachment for a widget chat session.
POST/v1/api/widget/{widgetKey}/session/{sessionId}/messagesstableSend a message into a widget chat session.
POST/v1/api/widget/{widgetKey}/session/{sessionId}/presence/readbetaMark widget session messages as read.
POST/v1/api/widget/{widgetKey}/session/{sessionId}/presence/typingbetaSend widget typing presence.

Calendar

MethodPathStabilitySummary
GET/v1/appointmentsbetaGet all appointments
POST/v1/appointmentsbetaCreate a new appointment
GET/v1/appointments/analytics/by-servicebetaTop services by bookings / completed / revenue
GET/v1/appointments/analytics/by-staffbetaTop staff by bookings / completed / revenue
GET/v1/appointments/analytics/exportbetaExport appointment analytics as CSV
GET/v1/appointments/analytics/peak-hoursbetaPeak booking hours (hour-of-day histogram)
GET/v1/appointments/analytics/summarybetaAppointment analytics summary
POST/v1/appointments/best-staffbetaFind best staff assignment
GET/v1/appointments/calendar-overviewbetaGet calendar overview for date range
GET/v1/appointments/calendar/staff/{staffId}betaGet appointments for specific staff member in date range
GET/v1/appointments/conflicts/checkbetaCheck for scheduling conflicts
GET/v1/appointments/overviewbetaGet calendar overview for date range
GET/v1/appointments/slots/availablebetaFind available time slots
GET/v1/appointments/{id}betaGet an appointment by ID
PATCH/v1/appointments/{id}betaUpdate an appointment
DELETE/v1/appointments/{id}betaCancel an appointment
POST/v1/appointments/{id}/cancelbetaCancel an appointment (alias)
GET/v1/appointments/{id}/icsbetaDownload ICS file for appointment
PATCH/v1/appointments/{id}/instancebetaUpdate a single recurring appointment instance
DELETE/v1/appointments/{id}/instancebetaDelete a single recurring appointment instance
POST/v1/appointments/{id}/reschedulebetaReschedule an appointment
GET/v1/appointments/{id}/seriesbetaGet recurring appointment series
POST/v1/appointments/{id}/transferbetaTransfer an appointment to another location
GET/v1/staffbetaGet all staff members
POST/v1/staffbetaCreate a new staff member
GET/v1/staff/{id}betaGet a staff member by ID
PATCH/v1/staff/{id}betaUpdate a staff member
DELETE/v1/staff/{id}betaDelete a staff member
GET/v1/staff/{id}/availabilitybetaGet staff member availability for a date
GET/v1/staff/{id}/breaksbetaGet staff breaks
POST/v1/staff/{id}/breaksbetaCreate staff break
DELETE/v1/staff/{id}/breaks/{breakId}betaDelete staff break
GET/v1/staff/{id}/time-offbetaGet time off requests for staff
POST/v1/staff/{id}/time-offbetaCreate time off request
PATCH/v1/staff/{id}/time-off/{timeOffId}betaUpdate time off request
DELETE/v1/staff/{id}/time-off/{timeOffId}betaDelete time off request
GET/v1/staff/{id}/working-hoursbetaGet weekly working hours for staff
POST/v1/staff/{id}/working-hoursbetaSet working hours for staff

Auth

MethodPathStabilitySummary
GET/v1/auth/api-keysstableList API keys
POST/v1/auth/api-keysstableCreate API key
DELETE/v1/auth/api-keys/{id}stableRevoke API key
POST/v1/auth/api-keys/{id}/rotatestableRotate API key secret

Calls

MethodPathStabilitySummary
GET/v1/callsbetaGet all calls
POST/v1/calls/batch-analyze-sentimentbetaBatch analyze sentiment
POST/v1/calls/outboundbetaInitiate an outbound call
GET/v1/calls/unifiedbetaList unified calls across voice providers, AIVA, and Dialer
GET/v1/calls/unified/activebetaList active unified calls for realtime dashboard
GET/v1/calls/unified/analyticsbetaGet unified call analytics across all sources
GET/v1/calls/unified/analytics/exportbetaExport unified call analytics as CSV
GET/v1/calls/unified/{callId}betaGet unified call detail by call ID
POST/v1/calls/{callId}/analyze-sentimentbetaAnalyze call sentiment

CRM Companies

MethodPathStabilitySummary
GET/v1/companiesstableGet all companies
POST/v1/companiesstableCreate a new company
POST/v1/companies/bulk-updatestableBulk update companies
POST/v1/companies/mergestableMerge companies
GET/v1/companies/{id}stableGet a company by ID
PATCH/v1/companies/{id}stableUpdate a company
DELETE/v1/companies/{id}stableDelete a company

CRM Contacts

MethodPathStabilitySummary
GET/v1/contactsbetaGet all contacts
POST/v1/contactsbetaCreate a new contact
POST/v1/contacts/bulk-updatebetaBulk update contacts
POST/v1/contacts/dedupebetaDeduplicate contacts
POST/v1/contacts/enrichment/batchbetaBatch contact enrichment
POST/v1/contacts/exportbetaExport contacts (csv/pdf)
GET/v1/contacts/export-csvbetaExport contacts to CSV
GET/v1/contacts/filtersbetaList saved filters
POST/v1/contacts/filtersbetaCreate saved filter
PUT/v1/contacts/filters/{id}betaUpdate saved filter
PATCH/v1/contacts/filters/{id}betaUpdate saved filter (alias)
DELETE/v1/contacts/filters/{id}betaDelete saved filter
POST/v1/contacts/filters/{id}/runbetaExecute saved filter and return matching records
POST/v1/contacts/import-csv/analyzebetaAnalyze CSV import file
POST/v1/contacts/import-csv/executebetaExecute CSV contact import
POST/v1/contacts/import-csv/execute-hybridbetaExecute hybrid CSV contact import
POST/v1/contacts/import-csv/previewbetaPreview hybrid CSV contact import
GET/v1/contacts/import-csv/review-tasksbetaList open CSV import review tasks
GET/v1/contacts/import-csv/review-tasks/{taskId}betaGet a CSV import review task with candidates
POST/v1/contacts/import-csv/review-tasks/{taskId}/resolvebetaResolve a CSV import review task (merge/create/ignore)
GET/v1/contacts/lifecycle-stagesbetaList lifecycle stages for the organization
POST/v1/contacts/lifecycle-stages/apply-presetbetaApply a lifecycle preset to rename and reorder stages
GET/v1/contacts/lifecycle-stages/presets/listbetaList available lifecycle stage presets
PATCH/v1/contacts/lifecycle-stages/{id}betaUpdate lifecycle stage properties (rename, probability, routing)
PATCH/v1/contacts/{id}betaUpdate a contact
DELETE/v1/contacts/{id}betaDelete a contact
PATCH/v1/contacts/{id}/behavioral-profilebetaUpdate behavioral profile
PATCH/v1/contacts/{id}/contextual-profilebetaUpdate contextual profile
GET/v1/contacts/{id}/enrichmentbetaGet contact enrichment
GET/v1/contacts/{id}/insightsbetaGet contact insights
DELETE/v1/contacts/{id}/insights/{insightId}betaDismiss an insight
POST/v1/contacts/{id}/insights/{insightId}/actionbetaMark insight action as taken
GET/v1/contacts/{id}/intelligencebetaGet contact intelligence data
POST/v1/contacts/{id}/intelligence/refreshbetaRefresh contact intelligence
GET/v1/contacts/{id}/networkbetaGet contact network
GET/v1/contacts/{id}/predictionsbetaGet predictive analytics
PATCH/v1/contacts/{id}/predictive-profilebetaUpdate predictive profile
PATCH/v1/contacts/{id}/relationship-profilebetaUpdate relationship profile
GET/v1/contacts/{id}/relationshipsbetaGet contact relationships
GET/v1/contacts/{id}/scoresbetaGet behavioral scores
POST/v1/contacts/{id}/scores/calculatebetaRecalculate behavioral scores
GET/v1/contacts/{id}/timelinebetaGet contact timeline
POST/v1/contacts/{id}/timelinebetaAdd timeline event

CRM Deals

MethodPathStabilitySummary
GET/v1/dealsstableGet all deals
POST/v1/dealsstableCreate a new deal
GET/v1/deals/analyticsstableGet deal analytics for a period
POST/v1/deals/bulk-updatestableBulk update deals
GET/v1/deals/{id}stableGet a deal by ID
PUT/v1/deals/{id}stableUpdate a deal (PUT)
PATCH/v1/deals/{id}stableUpdate a deal
DELETE/v1/deals/{id}stableDelete a deal
POST/v1/deals/{id}/transferstableTransfer a deal to another location

Email

MethodPathStabilitySummary
GET/v1/emailsbetaGet email thread/history
GET/v1/emails/analytics/overviewbetaGet email analytics overview
POST/v1/emails/attachmentsbetaUpload an email attachment (spec alias)
POST/v1/emails/bulk-sendbetaSend bulk emails
POST/v1/emails/sendbetaSend individual email
GET/v1/emails/templatesbetaGet all email templates
POST/v1/emails/templatesbetaCreate email template
GET/v1/emails/templates/industry/{industry}betaGet industry-specific template suggestions
GET/v1/emails/templates/{id}betaGet single email template
PUT/v1/emails/templates/{id}betaUpdate email template
DELETE/v1/emails/templates/{id}betaDelete email template
GET/v1/emails/templates/{id}/analyticsbetaGet template analytics
POST/v1/emails/upload-attachmentbetaUpload an email attachment
GET/v1/emails/{id}betaGet single email details

Inbox

MethodPathStabilitySummary
GET/v1/inbox/messagesbetaGet messages
POST/v1/inbox/messagesbetaSend a message
POST/v1/inbox/telegram/connect-linkbetaCreate Telegram connect link for current user
GET/v1/inbox/telegram/connectionsbetaList Telegram chats connected by current user
DELETE/v1/inbox/telegram/connections/{chatId}betaDisconnect a Telegram chat from current user
GET/v1/inbox/threadsbetaGet all message threads
POST/v1/inbox/threadsbetaCreate a new message thread
GET/v1/inbox/threads/{id}betaGet a message thread by ID

Install

MethodPathStabilitySummary
POST/v1/install/exchangestableExchange install token for API key (server-only)
POST/v1/install/magic-link/sendstableSend magic link to claim workspace (passwordless)
POST/v1/install/magic-link/verifystableVerify magic link and complete claim
POST/v1/install/startstableStart instant install: create demo workspace + chat widget
GET/v1/install/statusstableCheck install session status by token

Integrations

MethodPathStabilitySummary
GET/v1/integrationsbetaGet all integrations for organization
POST/v1/integrationsbetaCreate a new CRM integration
GET/v1/integrations/asana/projectsbetaGet Asana projects
POST/v1/integrations/asana/projectsbetaCreate Asana project
GET/v1/integrations/asana/projects/{projectId}/tasksbetaGet Asana project tasks
POST/v1/integrations/asana/tasksbetaCreate Asana task
PATCH/v1/integrations/asana/tasks/{taskId}betaUpdate Asana task
GET/v1/integrations/asana/workspacesbetaGet Asana workspaces
GET/v1/integrations/availablebetaList available integrations with metadata
GET/v1/integrations/available-crmsbetaGet list of available CRM types
GET/v1/integrations/calendar/availablebetaList available calendar integrations
GET/v1/integrations/calendly/event-typesbetaGet Calendly event types
GET/v1/integrations/calendly/scheduled-eventsbetaGet Calendly scheduled events
GET/v1/integrations/calendly/scheduled-events/{eventId}/inviteesbetaGet Calendly invitees for an event
GET/v1/integrations/catalogbetaList integration catalog with tier + connection metadata
POST/v1/integrations/connectbetaConnect a new integration (OAuth or API-key)
GET/v1/integrations/healthbetaGet all integrations health status
GET/v1/integrations/health/summarybetaGet health status of all integrations
POST/v1/integrations/sync-allbetaSync all active integrations
GET/v1/integrations/{crmType}/appointmentsbetaGet CRM appointments
POST/v1/integrations/{crmType}/appointmentsbetaCreate CRM appointment
GET/v1/integrations/{crmType}/contactsbetaGet CRM contacts
POST/v1/integrations/{crmType}/contactsbetaCreate CRM contact
PATCH/v1/integrations/{crmType}/contacts/{contactId}betaUpdate CRM contact
GET/v1/integrations/{crmType}/dealsbetaGet CRM deals
POST/v1/integrations/{crmType}/dealsbetaCreate CRM deal
PATCH/v1/integrations/{crmType}/deals/{dealId}betaUpdate CRM deal
GET/v1/integrations/{crmType}/field-mappingsbetaGet field mappings for integration
PATCH/v1/integrations/{crmType}/field-mappingsbetaUpdate field mappings for integration
GET/v1/integrations/{crmType}/metadatabetaGet CRM metadata and capabilities
POST/v1/integrations/{crmType}/oauth/callbackbetaHandle OAuth callback
POST/v1/integrations/{crmType}/oauth/initiatebetaInitiate OAuth flow
GET/v1/integrations/{crmType}/statusbetaGet integration status and health
POST/v1/integrations/{crmType}/syncbetaSync data with CRM
POST/v1/integrations/{crmType}/validate-credentialsbetaValidate CRM credentials

Locations

MethodPathStabilitySummary
GET/v1/locationsbetaGet all locations
POST/v1/locationsbetaCreate a new location
POST/v1/locations/service-requestbetaCreate a public service request for unserved areas
GET/v1/locations/{id}betaGet a location by ID
PATCH/v1/locations/{id}betaUpdate a location
DELETE/v1/locations/{id}betaDelete a location
GET/v1/locations/{id}/availabilitybetaGet location availability
POST/v1/locations/{id}/defaultbetaSet organization default location
GET/v1/locations/{id}/staffbetaList staff assigned to this location
POST/v1/locations/{id}/staffbetaReplace staff assignments for this location

MCP

MethodPathStabilitySummary
POST/v1/mcpstableHandle MCP protocol messages (JSON-RPC 2.0) via Streamable HTTP transport
POST/v1/mcp/toolsstableExecute MCP tool
POST/v1/mcp/tools/liststableList available MCP tools

Payments

MethodPathStabilitySummary
GET/v1/payments/analyticsbetaGet payment analytics
GET/v1/payments/analytics/forecastbetaGet revenue forecast
GET/v1/payments/analytics/trendsbetaGet invoice trends
GET/v1/payments/connect/accountbetaGet Stripe Connect account for organization
POST/v1/payments/connect/accountbetaCreate Stripe Connect account
DELETE/v1/payments/connect/accountbetaDisconnect Stripe Connect account
POST/v1/payments/connect/account-linkbetaCreate Stripe Connect account link (legacy route)
GET/v1/payments/connect/account-statusbetaGet Stripe Connect account status (wiring guide route)
POST/v1/payments/connect/account/linkbetaCreate Stripe Connect account link
GET/v1/payments/connect/account/statusbetaGet Stripe Connect account status for current organization
GET/v1/payments/connect/balancebetaGet connected account balance
POST/v1/payments/connect/create-accountbetaCreate Stripe Connect account (wiring guide route)
POST/v1/payments/connect/create-account-linkbetaCreate Stripe Connect account link (wiring guide route)
POST/v1/payments/connect/create-payment-linkbetaCreate a payment link for a customer (wiring guide route)
POST/v1/payments/connect/payment-linksbetaCreate payment link routed through connected account
GET/v1/payments/connect/payoutsbetaList payouts for connected account
POST/v1/payments/connect/payoutsbetaCreate a payout to the connected account
POST/v1/payments/credits/auto-reloadbetaConfigure auto-reload settings
GET/v1/payments/credits/balancebetaAlias: get credit balance
POST/v1/payments/credits/check-balancebetaCheck if organization has enough credits for an action
POST/v1/payments/credits/check-reloadbetaCheck and process auto-reload if needed
POST/v1/payments/credits/checkoutbetaCreate credit checkout session (alias route)
GET/v1/payments/credits/packagesbetaGet available credit packages
POST/v1/payments/credits/purchasebetaPurchase credits
GET/v1/payments/credits/transactionsbetaGet credit transaction history (paged)
GET/v1/payments/credits/walletbetaGet credit wallet balance and summary
POST/v1/payments/customersbetaCreate Stripe customer
GET/v1/payments/customers/{id}betaGet Stripe customer
GET/v1/payments/invoice-previewbetaGet invoice preview with sample data
GET/v1/payments/invoice-templatesbetaGet available invoice templates
GET/v1/payments/invoicesbetaGet all invoices
POST/v1/payments/invoicesbetaCreate invoice
GET/v1/payments/invoices/brandingbetaGet invoice branding settings
PATCH/v1/payments/invoices/brandingbetaUpdate invoice branding settings
POST/v1/payments/invoices/builderbetaCreate invoice using builder (free feature)
DELETE/v1/payments/invoices/{id}betaDelete invoice
POST/v1/payments/invoices/{id}/finalizebetaFinalize invoice
POST/v1/payments/invoices/{id}/mark-paidbetaManually mark invoice as paid
POST/v1/payments/invoices/{id}/payment-linkbetaGenerate payment link for invoice
GET/v1/payments/invoices/{id}/payment-statusbetaGet invoice payment status
GET/v1/payments/invoices/{id}/pdfbetaGenerate invoice PDF
POST/v1/payments/invoices/{id}/sendbetaSend invoice
POST/v1/payments/invoices/{id}/send-emailbetaSend invoice via email
POST/v1/payments/payment-linksbetaCreate payment link
GET/v1/payments/payment-methodsbetaList saved payment methods for auto-reload
POST/v1/payments/payment-methodsbetaSave payment method for auto-reload
POST/v1/payments/payment-methods/setup-intentbetaCreate setup intent for saving payment method
POST/v1/payments/payment-methods/{id}/defaultbetaSet a payment method as default for auto-reload
POST/v1/payments/refundsbetaCreate refund
POST/v1/payments/subscriptionsbetaCreate subscription
DELETE/v1/payments/subscriptionsbetaCancel subscription
POST/v1/payments/subscriptions/billing-portalbetaGet billing portal URL
GET/v1/payments/subscriptions/currentbetaGet current subscription
GET/v1/payments/subscriptions/plansbetaGet available subscription plans
GET/v1/payments/subscriptions/usagebetaGet subscription usage analytics
PUT/v1/payments/subscriptions/{planId}betaUpdate subscription plan
POST/v1/payments/upload/logobetaUpload logo for invoice branding

Booking

MethodPathStabilitySummary
POST/v1/public/book/{bookingKey}/appointmentsstableCreate appointment via public booking (booking key)
GET/v1/public/book/{bookingKey}/slotsstableGet available booking slots by booking key
POST/v1/public/book/{bookingKey}/upload-photosbetaUpload booking photos through Filestack (backend proxy)

Reviews

MethodPathStabilitySummary
GET/v1/reviewsbetaList reviews for the Reviews Inbox
GET/v1/reviews/countsbetaGet review inbox counts for badges/filters
POST/v1/reviews/importbetaImport reviews from external sources (e.g., Trustpilot/Clutch) via API
POST/v1/reviews/ingestbetaTrigger review ingestion for all or specific listing connections
GET/v1/reviews/metrics/summarybetaGet basic aggregate metrics for the Reviews dashboard (proxy)
GET/v1/reviews/providersbetaList supported review providers/sources and their capabilities
GET/v1/reviews/request-settingsbetaGet review request settings for organization or location
PUT/v1/reviews/request-settingsbetaUpdate review request settings
GET/v1/reviews/requestsbetaList review requests
POST/v1/reviews/requestsbetaCreate manual review request(s)
GET/v1/reviews/{reviewId}betaGet a single review (Inbox detail)
GET/v1/reviews/{reviewId}/commentsbetaList internal comments/notes for a review
POST/v1/reviews/{reviewId}/commentsbetaAdd an internal comment/note to a review
PATCH/v1/reviews/{reviewId}/replybetaSave a reply to a review (and mark responded). Publishing is provider-dependent.
POST/v1/reviews/{reviewId}/reply-draftbetaGenerate an AI reply draft for a review (manual or publish flow)
POST/v1/reviews/{reviewId}/viewbetaMark a review as viewed (org-level, MVP)
PATCH/v1/reviews/{reviewId}/workflowbetaUpdate review workflow fields (status/assignee)

Surveys

MethodPathStabilitySummary
GET/v1/surveysbetaList surveys (alias to survey templates)
POST/v1/surveysbetaCreate survey (template)
GET/v1/surveys/campaignsbetaList survey campaigns
POST/v1/surveys/campaignsbetaCreate a new survey campaign
GET/v1/surveys/campaigns/{campaignId}betaGet campaign with triggers
PUT/v1/surveys/campaigns/{campaignId}betaUpdate campaign configuration
POST/v1/surveys/campaigns/{campaignId}/triggersbetaCreate trigger for campaign
PUT/v1/surveys/campaigns/{campaignId}/triggers/{triggerId}betaUpdate trigger configuration
GET/v1/surveys/invitationsbetaList survey invitations
POST/v1/surveys/invitations/manualbetaCreate a manual survey invitation
GET/v1/surveys/invitations/{invitationId}betaGet a specific invitation
PATCH/v1/surveys/invitations/{invitationId}/cancelbetaCancel an invitation
PATCH/v1/surveys/invitations/{invitationId}/reschedulebetaReschedule a queued invitation
POST/v1/surveys/invitations/{invitationId}/resendbetaResend an invitation
GET/v1/surveys/metrics/breakdownbetaGet survey metrics breakdown by dimension
GET/v1/surveys/metrics/overviewbetaGet survey performance overview
GET/v1/surveys/responsesbetaList survey responses
POST/v1/surveys/responsesbetaRecord a response manually (e.g., admin input)
GET/v1/surveys/responses/{responseId}betaGet a single response
GET/v1/surveys/templatesbetaList survey templates for the organization
POST/v1/surveys/templatesbetaCreate a new survey template
GET/v1/surveys/templates/{templateId}betaGet a single survey template
PUT/v1/surveys/templates/{templateId}betaUpdate an existing survey template
POST/v1/surveys/templates/{templateId}/duplicatebetaDuplicate a survey template
PATCH/v1/surveys/templates/{templateId}/statusbetaEnable or disable a survey template
GET/v1/surveys/{id}betaGet survey (template) with questions
PATCH/v1/surveys/{id}betaUpdate survey (template)
DELETE/v1/surveys/{id}betaDelete survey (template)
POST/v1/surveys/{id}/publishbetaPublish survey (generate share URL + embed code)
GET/v1/surveys/{id}/responsesbetaList survey responses (by template id)

CRM Tasks

MethodPathStabilitySummary
GET/v1/tasksstableGet all tasks
POST/v1/tasksstableCreate a new task
GET/v1/tasks/countstableGet task count (useful for notifications/badges)
GET/v1/tasks/{id}stableGet task by ID
PATCH/v1/tasks/{id}stableUpdate task
DELETE/v1/tasks/{id}stableDelete task

Voice

MethodPathStabilitySummary
POST/v1/voice/browser/tokenbetaCreate a Twilio Voice Client token (browser WebRTC calling)
GET/v1/voice/preview/voicesbetaList available voice preview voices

Webhooks

MethodPathStabilitySummary
GET/v1/webhooks/deliveriesstableGet webhook delivery history
POST/v1/webhooks/deliveries/{id}/replaystableReplay webhook delivery
GET/v1/webhooks/endpointsstableGet all webhook endpoints
POST/v1/webhooks/endpointsstableCreate webhook endpoint
GET/v1/webhooks/endpoints/{id}stableGet webhook endpoint by ID
PATCH/v1/webhooks/endpoints/{id}stableUpdate webhook endpoint
DELETE/v1/webhooks/endpoints/{id}stableDelete webhook endpoint
POST/v1/webhooks/endpoints/{id}/teststableTest webhook endpoint

Workflows

MethodPathStabilitySummary
GET/v1/workflow-actionsbetaList available workflow actions
GET/v1/workflow-templatesbetaList workflow templates
GET/v1/workflow-templates/{id}betaGet workflow template
POST/v1/workflow-templates/{id}/usebetaCreate workflow from template
GET/v1/workflowsbetaGet all workflows
POST/v1/workflowsbetaCreate a new workflow
POST/v1/workflows/advisor/applybetaCreate a workflow from a suggestion/template
POST/v1/workflows/advisor/suggestbetaSuggest workflows based on a natural language prompt
POST/v1/workflows/ai/generatebetaGenerate workflow graph from natural language prompt
POST/v1/workflows/ai/refinebetaRefine an existing workflow with AI instruction
POST/v1/workflows/ai/validatebetaValidate AI-generated or edited workflow graph
GET/v1/workflows/runs/failedbetaList failed workflow runs (DLQ-like inbox)
GET/v1/workflows/runs/{runId}betaGet a workflow run by ID
POST/v1/workflows/runs/{runId}/cancelbetaCancel a workflow run
POST/v1/workflows/runs/{runId}/retrybetaRetry a workflow run by creating a new run
GET/v1/workflows/schemabetaGet workflow builder schema for AI + UI
GET/v1/workflows/templatesbetaGet workflow template gallery for current organization
POST/v1/workflows/templates/batchbetaUpsert workflow templates in batch
POST/v1/workflows/templates/batch-createbetaBatch create workflows from templates for organization
GET/v1/workflows/templates/categories/{industry}betaGet workflow categories for industry
POST/v1/workflows/templates/sentiment-templates/createbetaCreate all 5 sentiment workflow templates for organization
GET/v1/workflows/templates/{id}/executionsbetaGet workflow execution history
POST/v1/workflows/templates/{id}/testbetaTest workflow execution
GET/v1/workflows/templates/{industry}betaGet industry-specific workflow templates
POST/v1/workflows/templates/{templateId}/instantiatebetaInstantiate a workflow from a template
GET/v1/workflows/{id}betaGet a workflow by ID
PUT/v1/workflows/{id}betaReplace/update a workflow
PATCH/v1/workflows/{id}betaUpdate a workflow
DELETE/v1/workflows/{id}betaArchive a workflow
POST/v1/workflows/{id}/activatebetaActivate a workflow
POST/v1/workflows/{id}/deactivatebetaDeactivate a workflow
POST/v1/workflows/{id}/dry-runbetaDry-run a workflow with synthetic trigger data
POST/v1/workflows/{id}/duplicatebetaDuplicate a workflow
GET/v1/workflows/{id}/logsbetaGet workflow logs
GET/v1/workflows/{id}/runsbetaGet workflow runs
POST/v1/workflows/{id}/triggerbetaTrigger a workflow manually
GET/v1/workflows/{workflowId}/executions/{executionId}betaGet a single workflow execution (frontend polling contract)

Public endpoints

These are the fastest routes to understand if you are embedding widgets, creating booking experiences, or provisioning an install flow without a custom backend first.

MethodPathUse it for
POST/v1/install/startProvision a demo widget or starter install flow.
GET/v1/api/widget/:widgetKey/configFetch public widget configuration for a widget key.
POST/v1/api/widget/:widgetKey/sessionCreate a public chat session for widget-driven conversations.
GET/v1/public/book/:bookingKey/slotsReturn available booking slots for a public booking key.
POST/v1/public/book/:bookingKey/appointmentsCreate a public booking appointment.

Voice and MCP entry points

ProtocolPathUse it for
POST/v1/mcpModel Context Protocol server endpoint for Cursor, Claude, and other MCP clients.
GET/.well-known/oauth-authorization-serverOAuth discovery metadata for MCP and secure client setup.
WSS/v1/voice/streamRealtime voice transport endpoint for low-latency audio sessions.

Authenticated endpoints

These routes require a ServiceAgent API key or signed-in JWT. Start with a test key from Quickstart, then move to the SDK when your integration grows beyond one or two calls.

MethodPathUse it for
GET/v1/webhooks/endpointsList webhook endpoints with pagination metadata.
POST/v1/webhooks/endpointsCreate a signed webhook endpoint for event delivery.
GET/v1/webhooks/deliveriesInspect webhook delivery attempts and retry status.
POST/v1/auth/api-keysCreate scoped API keys for backend integrations.

Auth and private APIs

For authenticated backend workflows, prefer the typed SDKs instead of stitching private routes together by hand. The SDKs give you stronger defaults, clearer auth handling, and a much better path for AI codegen tools.

Need an API key? See Quickstart → Get an API key.

Start with Quickstart if you want the shortest working path.

Move to Packages when you need the right SDK or UI layer for your stack.

Use Prompt Builder when you want Cursor or Claude to generate integration code with the right endpoints and implementation steps.