meiti API v1 BETA
Changelog · last change 2026-10-11
v1 is in beta. You can build on it today, but small details may still change before we version it for go-live. Every change is listed on this page.
Reference: interactive docs · OpenAPI document
Questions, feedback or something missing? Write to support@meiti.ai.
2026-10-11
- Agents (BYOAI) — Protocol
2026-10-11:message.receivedalso arrives while your team has the project (a member took over or replied, auto-reply is switched off or muted) and carries the project's auto-reply as the team set it in the app:data.autoReply(state:on|paused|off,pausedUntil);data.skillsis empty unless it ison. Your agent decides whether to answer: a reply is delivered anyway (the team sees a note the first time after they stepped in), its skills answernot-allowedandhandoveris a no-op. Theagent-replies202 carries the sameautoReplyobject; 409project_not_with_agentnow only means the project is not answered by an own-AI assistant.
2026-10-10
- Messages, notes —
POST v1/messages/logfiles a message sent or received outside meiti (your own mailbox, another tool) on a project:direction(in|out),channel(email|whatsapp|sms|rcs),text, optionalsubject(email),occurredAt,externalId(same id + channel again = 200 with the first message),ai(pause|resume),notify(push for incoming). Nothing is sent and meiti's assistant does not answer it.POST v1/notesadds an internal note (title,text; optionalIdempotency-Key). Both takeprojectId,contactId,phoneoremail; errors 400invalid_direction,invalid_channel,invalid_ai,invalid_occurred_at, 404project_not_found,contact_not_found. - Projects — Breaking (beta): conversations are called projects, the same name the CRM webhook uses (
meitiProjectId). Routes move toGET v1/projects,GET v1/projects/{id}/messages,POST v1/projects/{id}/agent-repliesandPOST v1/projects/{id}/skills/{key};conversationIdbecomesprojectIdin thePOST v1/messagesanswer, appointments,message.received, the agent-replies answer and the voicesession.startedframe; error codesconversation_not_foundandconversation_not_with_agentbecomeproject_not_foundandproject_not_with_agent. - Agents (BYOAI) — Skills as tools: an own-AI assistant can run meiti's forwarding and alert skills attached to it.
GET v1/agentslists them asskills(id,key,name,kind:forward|alert,announcement,hoursLimited) withskillsPerHourLimitandforwardsPerCallLimit;message.receivedcarries the ones available right now indata.skills. - Conversations —
POST v1/conversations/{id}/agent-repliestakesexecuteSkills(keys or ids, at most 5) andannouncement; the 202 answer reportsskills: [{ key, ok, reason }]. NewPOST v1/conversations/{id}/skills/{key}(optional body{ note, announcement }, optionalIdempotency-Key) runs one skill now and answers{ key, ok, reason }; reasons:unknown-skill,outside-hours,limit-reached,not-allowed,no-target,no-recipient,failed(pending-approvalwithok: true).
2026-10-09
- Agents (BYOAI) — Connect your own AI as an assistant:
GET v1/agents,GET/PATCH v1/agents/{id}(chatUrl,voiceUrl,timeoutSeconds,voiceId),POST v1/agents/{id}/secret(new signing secret, shown once),POST v1/agents/{id}/test. meiti postsmessage.receivedto the chat URL (signed,X-Meiti-Signature) and connects to the voice URL over WebSocket for calls. - Conversations —
POST v1/conversations/{id}/agent-replies{ text, action, note }answers a conversation as its connected AI (action:none,handover,end) — the late answer to amessage.receivedthat got 202. 409conversation_not_with_agentonce the team took over; 422not_deliverable.
2026-10-07
- Messages —
POST v1/messagestakeschannels: channels (whatsapp,sms,rcs,email), sender ids fromGET v1/sendersordefault(the contact's default channel), in priority order. meiti uses the first one that can reach the contact; delivery never leaves the list.channel+allowFallbackkeep working as shorthand. Errors: 400invalid_channel,unknown_sender; 422channel_not_deliverable. - Messages —
respectContactSettings(defaulttrue): consent is checked per channel on that channel's address and a channel the contact's settings rule out is skipped.falsesends a service message even to a contact who declined service messages (consentOverridden: truein the response); marketing can never be enforced (400marketing_cannot_be_enforced). - Messages —
whatsapp: { template, language, variables }: when WhatsApp delivers and the customer has not written within 24 hours, the approved template goes out instead of the text (inbox's own number only; 422template_not_found,template_language_required,template_variables_mismatch,template_requires_own_whatsapp). The response reportschannel,senderId,sentAsTemplateandwaitingForReply. - Senders, templates —
GET v1/senderslists the inbox's active senders (WhatsApp number, each mailbox, SMS, RCS);GET v1/whatsapp/templateslists the approved templates of the inbox's own WhatsApp number with their variable count.
2026-10-06
- Base URL — The base URL is
https://api.meiti.ai/v1/— stable, without an app version in the path. Addresses with a version segment (…/6.3.8/v1/…) stop working when that app version is retired; use the stable one. - Docs — OpenAPI document at
v1/openapi.json, interactive reference atv1/docs, beta status and this changelog. - Messages —
POST v1/messagestakes an optionalchannel(whatsapp,sms,rcs,email) andallowFallback(defaulttrue). Unknown channel: 400invalid_channel; channel cannot reach the contact and no fallback allowed: 422channel_not_deliverable. - Messages —
POST v1/messagestakes an optionalpurpose: omitted ornonealways sends,serviceis refused with 403service_consent_deniedwhen the contact declined service messages,marketingneeds granted marketing consent (403marketing_consent_missing). Any other value: 400invalid_purpose. - Contacts —
POST v1/contactstakesserviceConsentandmarketingConsent(true, false or omitted); the contact object reports both asunknown,grantedordeniedwith the time they were set.
2026-10-04
- Appointments —
DELETE v1/appointments/{id}accepts a request without a body. - Contacts, appointments, conversations — Contacts: read by id, look up by phone or email, create or update by phone. Appointments: create, read, list (
updatedSince,externalId,contactId), move, cancel. Conversations: list and read the transcript. - Webhooks — Subscriptions per key with signed deliveries (
X-Meiti-Signature), retries and a test ping; eventsappointment.created,.confirmed,.rescheduled,.cancelled,.finished,.reminder_sent. - First release — Service keys per inbox,
GET v1/me,POST v1/messageswith optionalIdempotency-Key, RFC 9457 problem details for every error, rate limits answered with 429 andRetry-After.