Mapa das rotas: uazapi → Orkesio
Cada rota pública da uazapi e a rota da Orkesio que a substitui, agrupadas pela área da Orkesio. 164 de 164 rotas da uazapi têm par em 141 rotas da Orkesio: várias ações de um mesmo recurso (como as oito /group/update*) viram uma rota só, sem perder função. As rotas da uazapi continuam funcionando.
A coluna O que muda traz a primeira mudança; a lista completa e o exemplo estão na página da rota, em "Antes e depois".
Administração
| uazapi | Orkesio | O que muda |
|---|---|---|
GET /status | GET /status | Sem mudança: a mesma rota e o mesmo formato da uazapi (é a mesma rota nas duas). |
POST /instance/create | POST /inbox/create | Responde 201 com a própria inbox (antes response, instance, status, name, token e info soltos). |
POST /instance/token/rotate | POST /inbox/token/rotate | POST /inbox/token/rotate, só com o admintoken, como na uazapi; o id do corpo virou inbox_id (o nome antigo dá 400). |
GET /instance/all | GET /inbox/all | Lista em { inboxes: [...] } (antes um array solto). |
POST /instance/updateAdminFields | PATCH /inbox/admin-fields | PATCH /inbox/admin-fields, só com o admintoken, como na uazapi; o id do corpo virou inbox_id (o nome antigo dá 400). |
POST /admin/restart | POST /admin/restart | Sem mudança: a mesma rota e o mesmo formato da uazapi. |
POST /admin/token/rotate | POST /admin/token/rotate | Sem mudança: a mesma rota e o mesmo formato da uazapi. |
Inbox e conexão
| uazapi | Orkesio | O que muda |
|---|---|---|
POST /instance/connect | POST /inbox/connect | A resposta é a inbox, com qr_code ou pair_code e o history_request_id (antes connected, loggedIn, jid, instance e request_id soltos). |
POST /instance/disconnect | POST /inbox/disconnect | A resposta é a inbox no formato novo (antes instance, response e info). |
POST /instance/reset | POST /inbox/reset | /inbox/reset. |
GET /instance/status | GET /inbox/status, GET /leads/fields | GET /inbox/status, como na uazapi (plural). |
POST /instance/updateInstanceName | PATCH /inbox | Um PATCH para os dois (antes duas rotas). |
DELETE /instance | DELETE /inbox | /inbox (a inbox do token). |
POST /instance/presence | PATCH /inbox | Um PATCH para os dois (antes duas rotas). |
Webhooks e eventos
| uazapi | Orkesio | O que muda |
|---|---|---|
GET /webhook | GET /webhooks | Novos name, headers (valor como ***) e secret; health em snake_case (antes avgMs, failCount...). |
POST /webhook | POST /webhooks, PATCH /webhooks, DELETE /webhooks/{webhook_id} | Rota própria para criar (antes action: add no POST /webhook). |
GET /webhook/errors | GET /webhooks/{webhook_id}/failures | Por webhook, na rota dele, com cursor (antes, uma lista só com as falhas de todos os webhooks da inbox). created → failed_at, messageid → message_id, event → event_type (nome da Orkesio). |
POST /webhook/resend | POST /webhooks/resends | Por webhook, na rota dele (antes id opcional no corpo; sem ele, reenviava de todos os webhooks). Responde 202 (antes 200). |
GET /globalwebhook | GET /server/webhook | Campos em snake_case, com name, headers (valor como ***), secret (mascarado) e health. |
POST /globalwebhook | PATCH /server/webhook, DELETE /server/webhook | PATCH parcial (antes o POST mandava a configuração inteira). |
GET /globalwebhook/errors | GET /server/webhook/failures | Lista paginada por cursor (limit, cursor), em snake_case, com a inbox de cada falha em inbox_id. |
POST /globalwebhook/resend | POST /server/webhook/resends | O mesmo reenvio, agora com resposta 202 (antes 200). |
GET /sse | GET /events | Endpoint próprio (/events); o /sse continua igual. |
Mensagens e conversas
| uazapi | Orkesio | O que muda |
|---|---|---|
POST /send/text | POST /messages | Uma rota para todos os tipos: type diz o tipo, e os campos dele vão soltos no corpo, como na uazapi (text, latitude, choices), igual à mensagem recebida. |
POST /send/media | POST /messages | Uma rota para todos os tipos: type diz o tipo, e os campos dele vão soltos no corpo, como na uazapi (text, latitude, choices), igual à mensagem recebida. |
POST /send/contact | POST /messages | Uma rota para todos os tipos: type diz o tipo, e os campos dele vão soltos no corpo, como na uazapi (text, latitude, choices), igual à mensagem recebida. |
POST /send/location | POST /messages | Uma rota para todos os tipos: type diz o tipo, e os campos dele vão soltos no corpo, como na uazapi (text, latitude, choices), igual à mensagem recebida. |
POST /message/presence | POST /chats/presence | number → chat_id; presence → state (composing → typing) (o antigo pause: true vira state: paused); delay → duration_ms. Responde 202 sem corpo. |
POST /send/menu | POST /messages | Uma rota para todos os tipos: type diz o tipo, e os campos dele vão soltos no corpo, como na uazapi (text, latitude, choices), igual à mensagem recebida. |
POST /send/carousel | POST /messages | Uma rota para todos os tipos: type diz o tipo, e os campos dele vão soltos no corpo, como na uazapi (text, latitude, choices), igual à mensagem recebida. |
POST /send/location-button | POST /messages | Uma rota para todos os tipos: type diz o tipo, e os campos dele vão soltos no corpo, como na uazapi (text, latitude, choices), igual à mensagem recebida. |
POST /send/request-payment | POST /messages | Uma rota para todos os tipos: type diz o tipo, e os campos dele vão soltos no corpo, como na uazapi (text, latitude, choices), igual à mensagem recebida. |
POST /message/payment/status | PATCH /messages/payment | id → message_id (a mensagem da cobrança). |
POST /send/pix-button | POST /messages | Uma rota para todos os tipos: type diz o tipo, e os campos dele vão soltos no corpo, como na uazapi (text, latitude, choices), igual à mensagem recebida. |
GET /message/async | GET /messages/queue | /messages/queue (a fila é de mensagens). |
DELETE /message/async | DELETE /messages/queue | /messages/queue (a fila é de mensagens). |
POST /instance/updateDelaySettings | PATCH /messages/queue/settings | PATCH /messages/queue/settings (a espera é da fila). |
POST /message/download | POST /messages/media | id → message_id. |
POST /message/find | GET /messages, GET /status-posts | GET com filtros na URL (antes POST com corpo). |
POST /message/status | GET /messages/{message_id}/receipts | GET com a mensagem no caminho (antes id no corpo); state → status (minúsculo); página por cursor. |
POST /message/history-sync | POST /chats/history-sync | number → chat_id; messageid → before_id; timestamp → before_at (data ISO); fromMe → before_direction (in/out); requestId → request_id; fallbackMode → mode; sync → wait; timeoutMs → timeout_ms. |
POST /message/reload | POST /messages/reload | id ou messageid → message_id; responde 202 sem corpo (antes success e os detalhes da tentativa). |
POST /message/markread | POST /messages/read | id (lista) → message_ids; results[].status → ok e error. |
POST /message/react | POST /messages/reactions | A mensagem em message_id (antes id); text → emoji ("" tira a reação, como na uazapi); number saiu (a conversa vem da mensagem). |
POST /message/delete | DELETE /messages/{message_id} | DELETE com a mensagem no caminho (antes id no corpo); responde 204 sem corpo. |
POST /message/edit | PATCH /messages | id → message_id; responde a mensagem no formato novo. |
POST /message/pin | POST /messages/pin | A mensagem em message_id (antes id); duration em dias (1, 7, 30) → duration_days; pin: false desafixa, como na uazapi. Responde a mensagem com pinned e pinned_until. |
POST /chat/labels | PATCH /chats | chatbot_disableUntil (ms, -1, 0) → automation_paused_until (data ISO, forever ou null); chatbot_agentResetMemoryAt → ai_memory_from (data ISO, now ou null). |
POST /chat/delete | DELETE /chats/{chat_id} | DELETE /chats/{chat_id}; os quatro campos true viram whatsapp (delete, clear, keep) e local (delete, chat, messages, keep), na query. |
POST /chat/archive | PATCH /chats | chatbot_disableUntil (ms, -1, 0) → automation_paused_until (data ISO, forever ou null); chatbot_agentResetMemoryAt → ai_memory_from (data ISO, now ou null). |
POST /chat/ephemeral | PATCH /chats | chatbot_disableUntil (ms, -1, 0) → automation_paused_until (data ISO, forever ou null); chatbot_agentResetMemoryAt → ai_memory_from (data ISO, now ou null). |
POST /chat/read | PATCH /chats | chatbot_disableUntil (ms, -1, 0) → automation_paused_until (data ISO, forever ou null); chatbot_agentResetMemoryAt → ai_memory_from (data ISO, now ou null). |
POST /chat/mute | PATCH /chats | chatbot_disableUntil (ms, -1, 0) → automation_paused_until (data ISO, forever ou null); chatbot_agentResetMemoryAt → ai_memory_from (data ISO, now ou null). |
POST /chat/pin | PATCH /chats | chatbot_disableUntil (ms, -1, 0) → automation_paused_until (data ISO, forever ou null); chatbot_agentResetMemoryAt → ai_memory_from (data ISO, now ou null). |
POST /chat/find | GET /chats, GET /leads | GET com filtros na URL (antes POST com corpo e operadores como ~ e >=). |
POST /chat/notes | GET /chats/{chat_id} | GET com a conversa no caminho (antes number no corpo). |
POST /chat/notes/refresh | POST /chats/notes/refresh | A conversa em chat_id; responde só {notes}. |
POST /chat/notes/edit | PATCH /chats | chatbot_disableUntil (ms, -1, 0) → automation_paused_until (data ISO, forever ou null); chatbot_agentResetMemoryAt → ai_memory_from (data ISO, now ou null). |
GET /chat/totalcount | GET /chats/count | GET /chats/count, mesmo formato. |
POST /chat/editLead | PATCH /chats, PATCH /leads | chatbot_disableUntil (ms, -1, 0) → automation_paused_until (data ISO, forever ou null); chatbot_agentResetMemoryAt → ai_memory_from (data ISO, now ou null). |
POST /lead/resolve | POST /chats/resolve | POST /chats/resolve; number → chat_id; lastMessageTimestamp (ms) → last_message_at (ISO). |
POST /chat/details | GET /chats/{chat_id}, GET /leads/{lead_id} | GET com a conversa no caminho (antes number no corpo). |
POST /chat/check | POST /numbers/check | POST /numbers/check; resposta em results. |
POST /chat/avatar | GET /chats/{chat_id}/picture | GET /chats/{chat_id}/picture; preview → size (preview ou full) na query. |
POST /send/event | POST /messages | Uma rota para todos os tipos: type diz o tipo, e os campos dele vão soltos no corpo, como na uazapi (text, latitude, choices), igual à mensagem recebida. |
| uazapi | Orkesio | O que muda |
|---|---|---|
GET /instance/wa_messages_limits | GET /inbox/limits | /inbox/limits, com a resposta reescrita: can_start_chats, restriction (só com restrição ativa) e quota. |
GET /instance/proxy | GET /inbox/proxy | /inbox/proxy; last_test_at e fallback.since em ISO 8601. |
POST /instance/proxy | PATCH /inbox/proxy | PATCH /inbox/proxy, mesmo corpo. |
GET /proxy-managed/countries | GET /proxy-regions/countries | Sem mudança no formato: o da uazapi; só o caminho (/proxy-regions/countries). |
GET /proxy-managed/cities | GET /proxy-regions/cities | Sem mudança no formato: o da uazapi; só o caminho (/proxy-regions/cities). |
POST /profile/name | PATCH /inbox/profile | Um PATCH no lugar de duas rotas; um campo por pedido. |
POST /profile/image | PATCH /inbox/profile | Um PATCH no lugar de duas rotas; um campo por pedido. |
GET /instance/privacy | GET /inbox/privacy | /inbox/privacy; nomes legíveis: groupadd → group_add, last → last_seen, profile → profile_picture, readreceipts → read_receipts, calladd → call_add. |
POST /instance/privacy | PATCH /inbox/privacy | PATCH /inbox/privacy; os mesmos nomes do GET. |
POST /send/status | POST /status-posts | Rota própria (antes /send/status). |
GET /instance/history-sync/status | GET /inbox/history-sync | /inbox/history-sync; campos em snake_case (deliveryStatus → delivery_status, pairedAt → paired_at...). |
POST /group/create | POST /groups | Uma rota para grupo e comunidade (community: true). |
POST /group/info | GET /groups/{group_id} | GET com o grupo no caminho (antes groupjid no corpo). |
POST /group/inviteInfo | GET /group-invites/{code} | GET com o código no caminho; responde o grupo (antes response e group). |
GET /group/invitelink/{groupJID} | GET /groups/{group_id} | GET com o grupo no caminho (antes groupjid no corpo). |
POST /group/join | POST /group-invites/accept | O código em code; responde o grupo, ou 202 quando a entrada precisa de aprovação. |
POST /group/leave | POST /groups/leave | groupjid → group_id; responde 204 sem corpo (antes {response}). |
GET /group/list | GET /groups | Uma rota GET com cursor (antes duas listas: a legada, inteira, e a paginada por offset). |
POST /group/list | GET /groups | Uma rota GET com cursor (antes duas listas: a legada, inteira, e a paginada por offset). |
POST /group/resetInviteCode | POST /groups/invite-link/reset | Responde só {invite_link} (antes InviteLink e o grupo inteiro). |
POST /group/updateAnnounce | PATCH /groups | Um PATCH com o grupo em group_id, no lugar de oito rotas; continua uma mudança por pedido. |
POST /group/updateJoinApproval | PATCH /groups | Um PATCH com o grupo em group_id, no lugar de oito rotas; continua uma mudança por pedido. |
POST /group/updateMemberAddMode | PATCH /groups | Um PATCH com o grupo em group_id, no lugar de oito rotas; continua uma mudança por pedido. |
POST /group/updateDescription | PATCH /groups | Um PATCH com o grupo em group_id, no lugar de oito rotas; continua uma mudança por pedido. |
POST /group/ephemeral | PATCH /groups | Um PATCH com o grupo em group_id, no lugar de oito rotas; continua uma mudança por pedido. |
POST /group/updateImage | PATCH /groups | Um PATCH com o grupo em group_id, no lugar de oito rotas; continua uma mudança por pedido. |
POST /group/updateLocked | PATCH /groups | Um PATCH com o grupo em group_id, no lugar de oito rotas; continua uma mudança por pedido. |
POST /group/updateName | PATCH /groups | Um PATCH com o grupo em group_id, no lugar de oito rotas; continua uma mudança por pedido. |
POST /group/updateParticipants | POST /groups/participants | O grupo em group_id; groupUpdated[]{JID, Error, AddRequest} → results[]{participant, ok, error, add_request}. |
POST /community/create | POST /groups | Uma rota para grupo e comunidade (community: true). |
POST /community/editgroups | POST /groups/subgroups | A comunidade em group_id; groupjids → group_ids; resposta {done, failed} (antes success, failed, message). |
POST /newsletter/create | POST /newsletters | picture (URL ou base64) → objeto picture (url ou base64). |
GET /newsletter/list | GET /newsletters | Newsletter no formato novo: thread_metadata.name.text → name, .description.text → description, .picture/.preview → picture_url/picture_preview_url, .subscribers_count → subscriber_count, .verification → verified, .invite → invite_code, .settings.reaction_codes → reaction_mode, .creation_time → created_at; state.type → state; viewer_metadata.role → role, .mute → muted. |
POST /newsletter/info | GET /newsletters/{newsletter_id} | jid no corpo → newsletter_id no caminho. |
POST /newsletter/link | GET /newsletter-invites/{key} | key no caminho (antes no corpo). |
POST /newsletter/subscribe | POST /newsletters/{newsletter_id}/live-updates | jid → newsletter_id no caminho. |
POST /newsletter/messages | GET /newsletters/{newsletter_id}/messages | jid no corpo → newsletter_id no caminho. |
POST /newsletter/messages/edit | PATCH /newsletters/messages | jid → newsletter_id. |
POST /newsletter/messages/delete | DELETE /newsletters/{newsletter_id}/messages/{message_id} | jid no corpo → newsletter_id no caminho. |
POST /newsletter/updates | GET /newsletters/{newsletter_id}/updates | jid no corpo → newsletter_id no caminho. |
POST /newsletter/viewed | POST /newsletters/messages/viewed | jid → newsletter_id. |
POST /newsletter/reaction | POST /newsletters/messages/reactions | jid → newsletter_id. |
POST /newsletter/follow | POST /newsletters/follow | jid → newsletter_id. |
POST /newsletter/unfollow | DELETE /newsletters/{newsletter_id}/follow | jid no corpo → newsletter_id no caminho. |
POST /newsletter/mute | PATCH /newsletters | Um PATCH com a newsletter em newsletter_id, no lugar de seis rotas; continua uma mudança por pedido. |
POST /newsletter/unmute | PATCH /newsletters | Um PATCH com a newsletter em newsletter_id, no lugar de seis rotas; continua uma mudança por pedido. |
POST /newsletter/delete | DELETE /newsletters/{newsletter_id} | jid no corpo → newsletter_id no caminho. |
POST /newsletter/picture | PATCH /newsletters | Um PATCH com a newsletter em newsletter_id, no lugar de seis rotas; continua uma mudança por pedido. |
POST /newsletter/name | PATCH /newsletters | Um PATCH com a newsletter em newsletter_id, no lugar de seis rotas; continua uma mudança por pedido. |
POST /newsletter/description | PATCH /newsletters | Um PATCH com a newsletter em newsletter_id, no lugar de seis rotas; continua uma mudança por pedido. |
POST /newsletter/settings | PATCH /newsletters | Um PATCH com a newsletter em newsletter_id, no lugar de seis rotas; continua uma mudança por pedido. |
POST /newsletter/search | GET /newsletter-directory | GET com filtros na URL: searchText → search, after → cursor; {response: {data, after}} → {newsletters, next_cursor}. |
POST /newsletter/admin/invite | POST /newsletters/admins | jid → newsletter_id. |
POST /newsletter/admin/accept | POST /newsletters/admins/accept | jid → newsletter_id. |
POST /newsletter/admin/remove | DELETE /newsletters/{newsletter_id}/admins/{user_id} | jid no corpo → newsletter_id no caminho. |
POST /newsletter/admin/revoke | DELETE /newsletters/{newsletter_id}/admin-invites/{user_id} | jid no corpo → newsletter_id no caminho. |
POST /newsletter/owner/transfer | POST /newsletters/owner | jid → newsletter_id. |
POST /chat/block | PUT /blocks, DELETE /blocks/{contact_id} | PUT /blocks bloqueia (antes block: true). |
GET /chat/blocklist | GET /blocks | GET /blocks; blockList → blocks. |
GET /contacts | GET /contacts/list | GET /contacts/list com cursor, como as outras listas (antes POST com limit e offset no corpo e pagination). |
POST /contacts/list | GET /contacts/list | GET /contacts/list com cursor, como as outras listas (antes POST com limit e offset no corpo e pagination). |
POST /contact/add | PUT /contacts | PUT /contacts com name; number/phone → contact_id. |
POST /contact/remove | DELETE /contacts/{contact_id} | DELETE /contacts/{contact_id}. |
POST /label/edit | POST /labels, PUT /labels, DELETE /labels/{label_id} | POST /labels cria (antes labelid: "new"). |
GET /labels | GET /labels/list | Rota própria: o GET /labels da uazapi segue igual (lista solta, id <número>:<labelid>, colorHex). |
POST /labels/refresh | POST /labels/sync | POST /labels/sync (antes /labels/refresh, que segue igual na uazapi). |
POST /call/make | POST /calls | number → to; call_duration → max_seconds; fileUrl → url ou base64. |
POST /call/reject | POST /calls/reject | id → call_id; number → chat_id; responde 204 sem corpo (antes response). |
POST /business/get/profile | GET /business-profiles/{chat_id} | jid no caminho (antes no corpo; vazio era a inbox, agora me); sem o envelope response; categories[].localized_display_name → name; tag saiu (interno). |
GET /business/get/categories | GET /business-categories | Sem o envelope response: {categories}; localized_display_name → name. |
POST /business/update/profile | PATCH /business-profiles/me | Responde o perfil (antes response, updated e failed). |
POST /business/catalog/list | GET /catalog/products | GET com filtros na URL: jid → chat_id, after → cursor; {response: {products, next, previous}} → {products, next_cursor}. O produto é o mesmo da uazapi. |
POST /business/catalog/info | GET /catalog/products/{product_id} | id no caminho e jid → chat_id; sem o envelope response. |
POST /business/catalog/delete | DELETE /catalog/products/{product_id} | id no caminho; responde 204. |
POST /business/catalog/show | PATCH /catalog/products | Editar é PATCH (antes o save com id); show/hide → is_hidden: false/true; responde o produto. |
POST /business/catalog/hide | PATCH /catalog/products | Editar é PATCH (antes o save com id); show/hide → is_hidden: false/true; responde o produto. |
POST /business/catalog/save | POST /catalog/products, PATCH /catalog/products | Criar é POST (antes o save sem id); os campos são os mesmos da uazapi; responde o produto sem o envelope response. |
GET /business/catalog/collection/list | GET /catalog/collections | after → cursor; {response: {collections, next}} → {collections, next_cursor}; a coleção é a mesma da uazapi, sem next e previous. |
POST /business/catalog/collection/create | POST /catalog/collections | Mesmo corpo; responde sem o envelope response. |
PATCH /business/catalog/collection/{id} | PATCH /catalog/collections | {id} → {collection_id}; mesmo corpo; responde sem o envelope response. |
DELETE /business/catalog/collection/{id} | DELETE /catalog/collections/{collection_id} | {id} → {collection_id}; responde 204. |
CRM e automações
| uazapi | Orkesio | O que muda |
|---|---|---|
POST /instance/updateFieldsMap | PATCH /leads/fields | Rota própria; lead_field01 → field01; responde os campos (antes a inbox inteira). |
POST /sender/simple | POST /campaigns | Uma rota para simples e avançada; cada mensagem no formato do corpo do POST /messages (sem to). |
POST /sender/advanced | POST /campaigns | Uma rota para simples e avançada; cada mensagem no formato do corpo do POST /messages (sem to). |
POST /sender/edit | PATCH /campaigns, DELETE /campaigns/{campaign_id} | folder_id → campaign_id; as ações viram campos: stop → status: paused, continue → status: scheduled, send_now → status: sending, reschedule → scheduled_at (data ISO); delete → DELETE /campaigns/{campaign_id}. |
POST /sender/cleardone | DELETE /campaigns | Uma rota com filtro: cleardone → status=done com older_than_hours (antes hours no corpo, padrão 0: todas as terminadas; agora padrão 168); clearall → all=true. |
DELETE /sender/clearall | DELETE /campaigns | Uma rota com filtro: cleardone → status=done com older_than_hours (antes hours no corpo, padrão 0: todas as terminadas; agora padrão 168); clearall → all=true. |
GET /sender/listfolders | GET /campaigns, GET /campaigns/{campaign_id} | Lista solta → {campaigns, next_cursor}; o filtro status (reservado) saiu e entra o estado da campanha. |
POST /sender/listmessages | GET /campaigns/{campaign_id}/messages | GET com a campanha no caminho; messageStatus → status (minúsculo); offset → cursor; mensagens no formato novo; pagination → next_cursor (os totais estão na campanha). |
GET /sender/stats | GET /campaigns/stats | Sem o envelope data; os grupos status, statistics e scheduling viram campos diretos; next_send_in_seconds saiu (use next_send_at); os dados da inbox (data.instance) saíram (estão em GET /inbox/status). |
GET /lead/tags | GET /leads/tags | GET /leads/tags; lista em tags. |
POST /lead/tags/edit | POST /leads/tags, PATCH /leads/tags, DELETE /leads/tags/{tag_id} | POST /leads/tags cria (antes sem id). |
GET /chatwoot/config | GET /integrations/chatwoot | /integrations/chatwoot; campos sem o prefixo chatwoot_. |
PUT /chatwoot/config | PUT /integrations/chatwoot | PUT /integrations/chatwoot, mesmo corpo. |
GET /quick-replies | GET /replies | Campos em snake_case; {items, pagination} → {replies, next_cursor}; offset → cursor. |
POST /quick-replies | POST /replies | shortCut → shortcut, aiDescription → ai_description, onWhatsApp → on_whatsapp. |
GET /quick-replies/{id} | GET /replies/{reply_id} | {id} → {reply_id}; campos em snake_case. |
PATCH /quick-replies/{id} | PATCH /replies | {id} → {reply_id}; campos em snake_case. |
DELETE /quick-replies/{id} | DELETE /replies/{reply_id} | {id} → {reply_id}. |