Build on Visito with one API
Message customers on WhatsApp, Instagram, Messenger and web chat, connect your AI agent to your systems, and get signed webhooks when anything changes.
REST and JSON. OpenAPI definition. MCP server for Claude, ChatGPT and Codex. Available on Starter and Pro.
POST /conversations/{conversationId}/reply
BASE_URL=https://platform-api.visitoai.com/m2m/v1curl "$BASE_URL/conversations/$CONVERSATION_ID/reply" \ -H "Authorization: Bearer $VISITO_API_KEY" \ -H "Idempotency-Key: order-A-1003-shipped" \ -H "Content-Type: application/json" \ -d '{"text": "Your order A-1003 is out for delivery."}'# 202 Accepted{ "accepted": true, "replyId": "reply_8f2c", "status": "queued"}Everything in Visito, available to your code
Six building blocks cover messaging, the AI agent, your team, revenue, channels and events.
Send and receive messages
Reply on WhatsApp, Instagram, Messenger and web chat, and follow every message until it is read.
See all endpoints
- GET
/conversationsList conversations with cursor pagination - GET
/conversations/{conversationId}Read conversation metadata - GET
/conversations/{conversationId}/messagesList external conversation messages - POST
/conversations/{conversationId}/replyQueue a reply to an existing conversation - GET
/whatsapp-templates/{channelId}List templates for a WhatsApp channel - POST
/whatsapp-templates/{channelId}Create a WhatsApp template for Meta review - POST
/whatsapp-templates/{channelId}/sendQueue an approved WhatsApp template - GET
/messages/{messageId}/statusRetrieve message delivery status - GET
/message-requests/{requestEventId}/statusRetrieve send request status - GET
/conversations/start/whatsapp-template-statusGet conversation start status - POST
/conversations/startStart conversation - POST
/conversations/{conversationId}/readMark conversation read - POST
/conversations/{conversationId}/needs-reply/resolveResolve conversation needs reply - GET
/conversations/{conversationId}/messages/{messageId}/attachments/{attachmentIndex}Inspect one conversation message attachment
Power your AI agent
Feed it your knowledge and let it call your backend for live answers.
See all endpoints
- GET
/knowledge/sourcesList knowledge sources - GET
/knowledge/sources/{sourceId}Retrieve a knowledge source - DELETE
/knowledge/sources/{sourceId}Delete a knowledge source - GET
/knowledge/usageRetrieve knowledge usage - GET
/knowledge/url/crawl/{jobId}Retrieve crawl status - POST
/knowledge/textAdd text knowledge - POST
/knowledge/fileUpload a knowledge file - POST
/knowledge/urlAdd knowledge from a URL - GET
/knowledge/url/crawlDiscover knowledge crawl jobs - POST
/knowledge/url/crawlStart a website crawl - PATCH
/knowledge/sources/{sourceId}/activeSet knowledge source activation - GET
/actionsDiscover configured actions - POST
/actionsCreate an action configuration - GET
/actions/{actionId}Read an action definition - DELETE
/actions/{actionId}Delete an HTTP action - GET
/action-executionsList action executions - GET
/action-executions/{executionId}Read an action execution - GET
/actions/configurationsList manageable action configurations - GET
/actions/{actionId}/configurationRead an editable action configuration - PATCH
/actions/{actionId}/configurationUpdate an action configuration - PATCH
/actions/{actionId}/stateSet action availability - POST
/actions/{actionId}/lifecycleChange collection lifecycle - POST
/actions/{actionId}/testTest an HTTP action with a real request - GET
/actions/http/diagnosticsList HTTP action diagnostics - GET
/actions/http/diagnostics/{diagnosticId}Read an HTTP action diagnostic - GET
/conversations/{conversationId}/messages/{messageId}/traceInspect the saved AI execution trace for one answer - GET
/knowledge/itemsDiscover knowledge sources and managed websites - POST
/knowledge/sources/searchSearch current active indexed knowledge - GET
/knowledge/chunks/{chunkId}Inspect an indexed knowledge chunk - GET
/knowledge/sources/{sourceId}/original-fileGet the original uploaded knowledge or asset file - PATCH
/knowledge/sources/{sourceId}/propertyChange knowledge source applicability - GET
/knowledge/websitesDiscover managed knowledge websites - POST
/knowledge/websitesCreate and crawl a managed knowledge website - GET
/knowledge/websites/{websiteId}Inspect website generation and selected knowledge pages - DELETE
/knowledge/websites/{websiteId}Delete a managed knowledge website and its pages - POST
/knowledge/websites/{websiteId}/recrawlRefresh a managed knowledge website - POST
/knowledge/websites/{websiteId}/fit-selectionFit website knowledge selection to its quota - PATCH
/knowledge/websites/{websiteId}/selectionEnable or disable website knowledge pages - PATCH
/knowledge/websites/{websiteId}/propertyChange applicability of a managed website - PATCH
/knowledge/sources/{sourceId}/sharingChange whether an asset can be shared by the guest AI - GET
/knowledge/asset-foldersDiscover folders of guest-shareable assets - POST
/knowledge/asset-foldersCreate a folder for guest-shareable assets - PATCH
/knowledge/asset-folders/{folderId}Edit asset folder sharing and applicability - DELETE
/knowledge/asset-folders/{folderId}Delete an asset folder and its member assets - PATCH
/knowledge/sources/{sourceId}/folderMove an asset into or out of a sharing folder - PUT
/knowledge/asset-folders/{folderId}/orderSet asset presentation order within a folder - GET
/settings/ai/system-promptRead customer-facing AI tone, personality and instructions - PUT
/settings/ai/system-promptChange customer-facing AI tone, personality and instructions - GET
/settings/ai/asset-sharingRead the AI guest photo limit - PUT
/settings/ai/asset-sharingChange the AI guest photo limit - GET
/settings/ai/handoff-policyRead AI escalation rules, working hours and knowledge-gap behavior - PUT
/settings/ai/handoff-policyChange AI escalation rules and knowledge-gap behavior
Hand off to your team
Pause the AI, assign a person and give the chat back once it is solved.
See all endpoints
- GET
/conversations/assignable-operatorsList staff available for conversation assignment - GET
/conversations/{conversationId}/policyRetrieve conversation policy - PATCH
/conversations/{conversationId}/policyUpdate conversation policy - PUT
/conversations/{conversationId}/assignmentAssign a conversation - GET
/conversations/{conversationId}/handoffsList conversation handoffs - POST
/conversations/{conversationId}/handoff/resolveResolve a conversation handoff - POST
/conversations/{conversationId}/reviewCreate conversation review - PUT
/conversations/{conversationId}/review/assignmentAssign conversation review - POST
/conversations/{conversationId}/review/resolveResolve conversation review - GET
/conversations/{conversationId}/handoffs/{caseId}/eventsList events for one handoff or review case - GET
/ticketsList tickets and escalations - POST
/ticketsCreate a conversation-linked ticket - GET
/tickets/{ticketId}Read one ticket or escalation - PATCH
/tickets/{ticketId}Edit an open general ticket - GET
/tickets/{ticketId}/eventsRead ticket lifecycle and internal notes - GET
/tickets/requests/{requestId}Reconcile ticket creation - PUT
/tickets/{ticketId}/assignmentAssign or unassign a general ticket - POST
/tickets/{ticketId}/notesAdd an internal ticket note - POST
/tickets/{ticketId}/startStart work on a general ticket - POST
/tickets/{ticketId}/resolveResolve a general ticket - POST
/tickets/{ticketId}/cancelCancel a general ticket - POST
/escalationsInitiate human takeover - PUT
/escalations/{ticketId}/assignmentAssign an escalation - POST
/escalations/{ticketId}/notesNote an escalation - POST
/escalations/{ticketId}/startStart an escalation - POST
/escalations/{ticketId}/resolveResolve an escalation
Sync sales and bookings
Move opportunities, follow-ups, orders and reservations between Visito and your systems.
See all endpoints
- GET
/commerce/itemsList commerce items - POST
/commerce/itemsCreate a commerce item - GET
/commerce/items/{itemId}Read a commerce item - PATCH
/commerce/items/{itemId}Update a commerce item - DELETE
/commerce/items/{itemId}Delete a commerce item - PATCH
/commerce/items/{itemId}/propertyAssign commerce item business scope - GET
/commerce/salesList commerce sales - GET
/commerce/sales/{saleId}Read a commerce sale - GET
/crm/sales/configurationRetrieve sales CRM configuration - GET
/crm/sales/opportunitiesList sales opportunities - GET
/crm/sales/opportunities/{opportunityId}Retrieve a sales opportunity - PATCH
/crm/sales/opportunities/{opportunityId}Update a sales opportunity - GET
/crm/sales/opportunities/{opportunityId}/contactRetrieve the linked contact - GET
/crm/sales/opportunities/{opportunityId}/follow-upsList opportunity follow-ups - GET
/crm/follow-upsList follow ups - POST
/crm/follow-upsCreate follow up - PATCH
/crm/follow-ups/{followUpId}Update follow up - POST
/crm/follow-ups/{followUpId}/dismissDismiss follow up - POST
/crm/follow-ups/{followUpId}/cancelCancel follow up - POST
/crm/follow-ups/{followUpId}/sendSend follow up - GET
/crm/follow-up-settingsGet follow up settings - PATCH
/crm/follow-up-settingsUpdate follow up settings - GET
/reservationsList reservations - GET
/conversations/{conversationId}/reservationsList conversation reservations - GET
/reservations/readinessGet reservation readiness - GET
/reservations/sync/receiptsList reservation sync receipts - GET
/reservations/lifecycle/attemptsList reservation message attempts - GET
/reservations/lifecycle/eventsGet reservation message settings - PUT
/reservations/lifecycle/integrations/{integrationId}/events/{eventType}Set reservation message event - PUT
/reservations/lifecycle/integrations/{integrationId}/senderSet reservation message sender - PATCH
/commerce/sales/{saleId}/fulfillmentUpdate supported purchase fulfillment - POST
/commerce/sales/{saleId}/reconciliationRecord verified non-financial Commerce reconciliation
Manage every channel
Check WhatsApp health, update your business profile and switch auto replies per channel.
See all endpoints
- GET
/channelsList tenant channels - GET
/propertiesList properties - GET
/properties/{propertyId}Retrieve a property - PATCH
/channels/{channelId}/respond-enabledSet channel automatic replies - GET
/channels/connection-optionsDiscover channel connection methods - POST
/channels/connection-attemptsCreate temporary channel connection link - GET
/channels/connection-attempts/{attemptId}Read channel connection progress - GET
/channels/{channelId}Read channel configuration and saved readiness - PATCH
/channels/{channelId}Manage channel activation and configuration - DELETE
/channels/{channelId}Disconnect a channel - GET
/channels/{channelId}/whatsapp/healthCheck live WhatsApp provider health - GET
/channels/{channelId}/webchatRead webchat installation and configuration - GET
/channels/{channelId}/whatsapp/profileRead WhatsApp business profile - PATCH
/channels/{channelId}/whatsapp/profileUpdate WhatsApp business profile - GET
/channels/{channelId}/whatsapp/manager-linkGet WhatsApp Manager instructions - POST
/channels/{channelId}/refresh-tokenRequest Instagram token refresh - POST
/channels/{channelId}/whatsapp/coexistence/recheckRecheck WhatsApp coexistence activation - POST
/channels/{channelId}/whatsapp/reconcileInspect or repair WhatsApp connection binding - GET
/channels/{channelId}/instagram/history-importRead saved Instagram history import status - GET
/channels/{channelId}/messenger/history-importRead saved Messenger history import status - GET
/business/overviewRead a compact business overview
React to every event
Get a signed webhook the moment a message, handoff, ticket or deal changes.
See all endpoints
- GET
/reporting/summaryRetrieve reporting summary - GET
/webhooksList webhook subscriptions - POST
/webhooksCreate a webhook subscription - GET
/webhooks/{subscriptionId}Retrieve a webhook subscription - PATCH
/webhooks/{subscriptionId}Update a webhook subscription - DELETE
/webhooks/{subscriptionId}Delete a webhook subscription - POST
/webhooks/{subscriptionId}/rotate-secretRotate a webhook signing secret - GET
/webhooks/{subscriptionId}/deliveriesList webhook deliveries - GET
/webhooks/{subscriptionId}/deliveries/{deliveryId}Retrieve a webhook delivery - POST
/webhooks/{subscriptionId}/deliveries/{deliveryId}/retryRetry a webhook delivery
Webhook events
- message.created
- message.delivery.updated
- conversation.handoff.updated
- ticket.created
- ticket.updated
- crm.opportunity.created
- crm.opportunity.updated
The WhatsApp API, built in
Send campaigns, updates and replies on WhatsApp from your own code, and let your AI agent answer back.
Send marketing campaigns
Create marketing templates, get them approved by Meta and send promotions to opted-in customers from your backend.
Automate notifications
Send order updates, reminders and confirmations with utility templates the moment something happens in your system.
Start conversations your agent finishes
Open a WhatsApp conversation from your code. When the customer replies, your AI agent takes it from there.
Respect opt-outs automatically
Customers who reply STOP are flagged and Visito blocks further sends, even if your own list is out of date.
Put the pieces together
Most integrations combine a webhook, a read and a write.
Answer from your own helpdesk
- 1A message.created webhook tells your system a customer wrote in.
- 2Read the transcript and assign the right operator.
- 3Reply from your tool with an Idempotency-Key.
- 4Resolve the handoff so the AI takes over again.
# 1{ "type": "message.created", "data": { "conversationId": "conv_123", "direction": "inbound" } }# 2GET /conversations/conv_123/messages?limit=20PUT /conversations/conv_123/assignment{ "operatorId": "op_456" }# 3POST /conversations/conv_123/replyIdempotency-Key: evt_789-reply{ "text": "Your order A-1003 is out for delivery." }# 4POST /conversations/conv_123/handoff/resolve{ "resolutionNote": "Refund approved by the support team." }Use Visito from Claude, ChatGPT and Codex
Connect the Visito MCP server and work with your conversations, tickets and settings in plain language.
MCP server
https://platform-api.visitoai.com/m2m/v1/mcp
Sign in, no keys in chat
You connect with OAuth in the browser. No password or API key is pasted into a conversation.
An admin approves access
Choose Read or Read & write for each area, the same permissions as API keys.
The whole API as tools
Read a business overview, find conversations, explain an answer and manage tickets.
# Add the server, then sign in with your Visito admin accountcodex mcp add visito \ --url https://platform-api.visitoai.com/m2m/v1/mcpcodex mcp login visitoTry asking
- What did customers ask about most this week?
- Which conversations are still waiting for a reply?
- Why did the agent give this answer?
Building with an AI coding assistant?
Give it the OpenAPI definition and the AI coding assistants guide, so it uses real endpoints and the right retry rules.
Built for production traffic
Permissions, retries and failures behave the same way everywhere in the API.
Least-privilege keys
Each key belongs to one business. Choose No access, Read or Read & write per area, set an expiry and revoke any time.
Safe retries
Sends require an Idempotency-Key. Retrying returns the original request instead of messaging the customer twice.
Tracked delivery
Sends return 202 Accepted right away. Follow each one through to delivered, read or failed.
No silent overwrites
CRM, ticket and action updates need the current revision. A stale write gets a 409 instead of replacing someone’s change.
Signed webhooks
HMAC-SHA256 signatures with timestamps, at-least-once delivery and six automatic retries over 24 hours.
People decide on money
Refunds and payouts always need a human admin, whatever permissions a key has.
Keys, webhooks and logs in one place
Your team manages API access and checks every send from the Developers area of the Visito dashboard.
API keys and apps
Keys and connected AI assistants in one list, with permissions, status and when each was last used.
Webhooks
Every endpoint with its events, who manages it and how the latest delivery went.
WhatsApp templates
A log of every template request, with its request status, delivery status and conversation.
Make your first call in four steps
From a new key to a tracked reply.
- 1
Create a key
In Developers, create a key with only the permissions you need. Keep it on your server.
- 2
Find your channels
List channels and store the ID of the one you want to use.
- 3
See what is waiting
List the conversations that need a reply.
- 4
Reply and track it
Send a reply with an Idempotency-Key, then check its status.
https://platform-api.visitoai.com/m2m/v1
# 1export VISITO_API_KEY="visito_m2m_..."export BASE_URL=https://platform-api.visitoai.com/m2m/v1# 2curl "$BASE_URL/channels" \ -H "Authorization: Bearer $VISITO_API_KEY"# 3curl "$BASE_URL/conversations?view=needs_reply&limit=25" \ -H "Authorization: Bearer $VISITO_API_KEY"# 4curl "$BASE_URL/conversations/$CONVERSATION_ID/reply" \ -H "Authorization: Bearer $VISITO_API_KEY" \ -H "Idempotency-Key: first-reply-001" \ -H "Content-Type: application/json" \ -d '{"text": "Your order A-1003 is out for delivery."}'curl "$BASE_URL/message-requests/$REQUEST_EVENT_ID/status" \ -H "Authorization: Bearer $VISITO_API_KEY"Questions about the Visito API
Start building with the Visito API
Create your account, generate a key and make your first call today.