{"openapi":"3.1.0","info":{"title":"Zalo Auto REST v2","version":"1.1.0","description":"Every operation of the shared catalogue. Same permissions, limits and gates as MCP and the web app."},"servers":[{"url":"https://zl.builera.app"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"v2 API key (za_live_…) or an OAuth access token of a connected AI app"}}},"security":[{"bearer":[]}],"paths":{"/api/public/v2/ops/me.get":{"post":{"operationId":"me_get","summary":"Tôi và quyền của kết nối","description":"Who is calling: user, workspace, role, granted Zalo accounts, permission groups, visible tool profiles and request limits. Call this first.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/workspace.get":{"post":{"operationId":"workspace_get","summary":"Workspace","description":"Workspace name, time zone, working hours, plan state, switches affecting work (maintenance, external commands paused) and setup counts (machines, proxies, accounts, contacts, campaigns).","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/system.status":{"post":{"operationId":"system_status","summary":"Trạng thái hệ thống","description":"Platform state that affects work right now: maintenance, the operator's switch for outside writes, the minimum and newest agent version, and the server clock.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/workspace.rename":{"post":{"operationId":"workspace_rename","summary":"Đổi tên workspace","description":"Rename the workspace (admins).","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120}},"required":["name"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/me.display_name.set":{"post":{"operationId":"me_display_name_set","summary":"Đổi tên hiển thị của tôi","description":"Change the calling person's display name in Zalo Auto.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fullName":{"type":"string","minLength":1,"maxLength":120}},"required":["fullName"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/catalog.search":{"post":{"operationId":"catalog_search","summary":"Tìm thao tác","description":"Search the operation catalog (Vietnamese or English, typos OK) among operations this connection may use, including ones in hidden tool profiles — tells you which profile to enable.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":200},"limit":{"type":"integer","minimum":1,"maximum":20,"default":8}},"required":["query"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/search.global":{"post":{"operationId":"search_global","summary":"Tìm nhanh","description":"Search contacts, conversations, groups and campaigns by text in one call.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":100}},"required":["query"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/dashboard.get":{"post":{"operationId":"dashboard_get","summary":"Tổng quan","description":"Dashboard KPIs for today/this week/this month: messages, replies, new contacts, campaign progress, unanswered.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"today":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}},"required":["from","to"],"additionalProperties":false},"week":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}},"required":["from","to"],"additionalProperties":false},"month":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}},"required":["from","to"],"additionalProperties":false}},"required":["today","week","month"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/reports.get":{"post":{"operationId":"reports_get","summary":"Báo cáo","description":"Report tab (overview, accounts, members, campaigns, pipeline) for a date range (max 1 year), optionally per account.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tab":{"type":"string","enum":["overview","accounts","members","campaigns","pipeline"]},"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"},"accountIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":100,"default":[]}},"required":["tab","from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"admin"}},"/api/public/v2/ops/reports.export":{"post":{"operationId":"reports_export","summary":"Xuất báo cáo","description":"Every report tab (overview, accounts, members, campaigns, pipeline) for one date range in one answer — the same data the web puts in its Excel export.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"},"accountIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":100,"default":[]}},"required":["from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","export"],"x-min-role":"admin"}},"/api/public/v2/ops/inbox.conversations.list":{"post":{"operationId":"inbox_conversations_list","summary":"Danh sách hội thoại","description":"List Zalo conversations visible to the caller, newest first, with unread/unanswered state and filters. Use to find who is waiting for a reply.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"contactId":{"type":"string","format":"uuid"},"search":{"type":"string","maxLength":100},"unanswered":{"type":"boolean"},"unread":{"type":"boolean"},"assigned":{"anyOf":[{"type":"string","enum":["me","none"]},{"type":"string","format":"uuid"}]},"type":{"type":"string","enum":["user","group"]},"labelId":{"type":"string","format":"uuid"},"pinned":{"type":"boolean"},"hidden":{"type":"boolean","default":false},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.conversations.get":{"post":{"operationId":"inbox_conversations_get","summary":"Chi tiết hội thoại","description":"Get one conversation: account, contact or group, unread count, assignee, flags and send hold state.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"}},"required":["conversationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.messages.list":{"post":{"operationId":"inbox_messages_list","summary":"Đọc tin nhắn","description":"Read stored messages of a conversation, newest first, with status (queued/sent/delivered/seen/failed/unverified), attachments, quotes and reactions. Page back with next_cursor.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"required":["conversationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.messages.get":{"post":{"operationId":"inbox_messages_get","summary":"Chi tiết tin nhắn","description":"Get one message with its current delivery status and job id.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messageId":{"type":"string","format":"uuid"}},"required":["messageId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.notes.list":{"post":{"operationId":"inbox_notes_list","summary":"Ghi chú nội bộ của hội thoại","description":"List internal team notes of a conversation (never sent to Zalo).","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"required":["conversationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.conversation.open_contact":{"post":{"operationId":"inbox_conversation_open_contact","summary":"Mở hội thoại với khách","description":"Open (or create) the 1:1 conversation between a CRM contact and one Zalo account. May return a pending phone lookup job instead of a conversation.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"},"accountId":{"type":"string","format":"uuid"}},"required":["contactId","accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.conversation.open_phone":{"post":{"operationId":"inbox_conversation_open_phone","summary":"Tin nhắn mới theo số điện thoại","description":"Start a chat with a Vietnamese phone number from one Zalo account: looks the number up on Zalo (queued job) and opens the conversation.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"phone":{"type":"string","minLength":8,"maxLength":20}},"required":["accountId","phone"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.message.send":{"post":{"operationId":"inbox_message_send","summary":"Gửi tin nhắn","description":"Send a message on Zalo (text with mentions/styles, quote reply, images, files, video, voice file, sticker, contact card, bank card). Queued in conversation order through the account's own limits; returns operation/message/job ids immediately — call operations_wait for the Zalo result.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid","description":"Conversation to send into (from inbox_conversations_list or inbox_conversation_open_contact)."},"kind":{"type":"string","enum":["text","image","video","file","sticker","voice","card","link","bank","system"],"default":"text","description":"text, image, video, file, sticker, voice, card, bank or link."},"text":{"type":"string","maxLength":5000,"default":"","description":"Message text or caption. Supports @mentions via `mentions`."},"attachments":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["image","video","file","voice"]},"storagePath":{"type":"string","maxLength":500},"name":{"type":"string","maxLength":255},"size":{"type":"integer","minimum":0},"mime":{"type":"string","maxLength":120},"width":{"type":"integer"},"height":{"type":"integer"},"durationMs":{"type":"integer"},"thumbStoragePath":{"type":"string","maxLength":500}},"required":["kind","storagePath","name","size","mime"],"additionalProperties":false},"maxItems":10,"default":[],"description":"Files uploaded with media_upload_create (storagePath, name, size, mime, width/height for images)."},"quoteMessageId":{"type":"string","format":"uuid","nullable":true,"default":null,"description":"Reply to (quote) this message id."},"mentions":{"type":"array","items":{"type":"object","properties":{"uid":{"type":"string","maxLength":64},"pos":{"type":"integer","minimum":0},"len":{"type":"integer","minimum":1}},"required":["uid","pos","len"],"additionalProperties":false},"maxItems":50,"default":[]},"styles":{"type":"array","items":{"type":"object","properties":{"start":{"type":"integer","minimum":0},"len":{"type":"integer","minimum":1},"st":{"type":"string","enum":["b","i","u","s","c_db342e","c_f27806","c_f7b503","c_15a85f","f_13","f_18","lst_1","lst_2","ind_$"]},"indentSize":{"type":"integer","minimum":1,"maximum":10}},"required":["start","len","st"],"additionalProperties":false},"maxItems":50,"default":[],"description":"Zalo text styles over ranges of `text`: b, i, u, s, colours c_db342e/c_f27806/c_f7b503/c_15a85f, sizes f_13/f_18; lst_1 bullet list, lst_2 numbered list, ind_$ indent (indentSize) need agent 1.4.0."},"urgency":{"anyOf":[{"type":"number","enum":[0]},{"type":"number","enum":[1]},{"type":"number","enum":[2]}],"default":0,"description":"0 normal, 1 important (Quan trọng), 2 urgent (Khẩn cấp). >0 needs agent 1.4.0."},"sticker":{"type":"object","properties":{"id":{"type":"integer"},"cateId":{"type":"integer"},"type":{"type":"integer"},"url":{"type":"string","format":"uri","maxLength":500}},"required":["id","cateId","type"],"additionalProperties":false,"nullable":true,"default":null},"card":{"type":"object","properties":{"userId":{"type":"string","maxLength":64},"phone":{"type":"string","maxLength":20}},"required":["userId"],"additionalProperties":false,"nullable":true,"default":null},"bank":{"type":"object","properties":{"binBank":{"type":"integer"},"numAccBank":{"type":"string","maxLength":40},"nameAccBank":{"type":"string","maxLength":120}},"required":["binBank","numAccBank","nameAccBank"],"additionalProperties":false,"nullable":true,"default":null},"runAt":{"type":"string","format":"date-time","nullable":true,"default":null,"description":"Schedule the send (ISO time). Must be in the future and within 90 days; cancel with operations_cancel."}},"required":["conversationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/media.upload.create":{"post":{"operationId":"media_upload_create","summary":"Tải tệp để gửi","description":"Get a signed upload URL for a file to attach to a message (images, files, video, voice). PUT the bytes to upload_url, then pass the returned attachment to inbox_message_send.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"size":{"type":"integer","minimum":1},"mime":{"type":"string","maxLength":120}},"required":["name","size","mime"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/media.upload.complete":{"post":{"operationId":"media_upload_complete","summary":"Xác nhận đã tải tệp","description":"After PUT to upload_url: checks the file really arrived and returns the attachment (real size, kind) ready for inbox_message_send.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"storagePath":{"type":"string","minLength":3,"maxLength":500},"width":{"type":"integer"},"height":{"type":"integer"},"durationMs":{"type":"integer"}},"required":["storagePath"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.sticker.search":{"post":{"operationId":"inbox_sticker_search","summary":"Tìm sticker","description":"Search Zalo stickers by keyword through the conversation's account (max 30). Use the result in inbox_message_send kind=sticker.","tags":["Hội thoại"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"keyword":{"type":"string","minLength":1,"maxLength":40}},"required":["conversationId","keyword"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.message.retry":{"post":{"operationId":"inbox_message_retry","summary":"Gửi lại tin lỗi","description":"Retry a failed outgoing message (never an unverified one — read the chat first). Keeps conversation order.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messageId":{"type":"string","format":"uuid"}},"required":["messageId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.message.skip_held":{"post":{"operationId":"inbox_message_skip_held","summary":"Bỏ qua tin lỗi để gửi tiếp","description":"Unblock a conversation held by a failed message: skip it so later queued messages go out.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"}},"required":["conversationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.scheduled.list":{"post":{"operationId":"inbox_scheduled_list","summary":"Tin hẹn giờ","description":"List scheduled sends (waiting, sending or failed) of one conversation or the whole workspace, soonest first.","tags":["Hội thoại"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["scheduled","sending","failed","sent","cancelled"]},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.scheduled.cancel":{"post":{"operationId":"inbox_scheduled_cancel","summary":"Huỷ tin hẹn giờ","description":"Cancel a scheduled send that has not gone out yet (or dismiss a failed one).","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"scheduledId":{"type":"string","format":"uuid"}},"required":["scheduledId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.message.react":{"post":{"operationId":"inbox_message_react","summary":"Thả cảm xúc","description":"React to a message with an emoji icon code.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messageId":{"type":"string","format":"uuid"},"icon":{"type":"string","maxLength":20}},"required":["messageId","icon"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.message.recall":{"post":{"operationId":"inbox_message_recall","summary":"Thu hồi tin","description":"Recall (undo) one of our sent messages for everyone. Zalo may refuse old messages.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messageId":{"type":"string","format":"uuid"}},"required":["messageId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.message.delete_for_me":{"post":{"operationId":"inbox_message_delete_for_me","summary":"Xoá tin phía tôi","description":"Delete a message only on this account's side (others still see it). Different from recall.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messageId":{"type":"string","format":"uuid"}},"required":["messageId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.message.forward":{"post":{"operationId":"inbox_message_forward","summary":"Chuyển tiếp tin","description":"Forward a stored message to up to 20 conversations of the same account; returns one result per target.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"messageId":{"type":"string","format":"uuid"},"targetConversationIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":20}},"required":["messageId","targetConversationIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.conversation.mark_read":{"post":{"operationId":"inbox_conversation_mark_read","summary":"Đánh dấu đã đọc","description":"Mark a conversation read up to a message (also sends 'seen' on Zalo for the newest incoming message).","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"upToMessageId":{"type":"string","format":"uuid","nullable":true,"default":null}},"required":["conversationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.history.fetch_older":{"post":{"operationId":"inbox_history_fetch_older","summary":"Tải tin cũ từ Zalo","description":"Ask the account to fetch older history from Zalo for a group conversation (1:1 history beyond what was synced may not exist).","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"beforeTs":{"type":"integer","nullable":true,"default":null}},"required":["conversationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.conversation.assign":{"post":{"operationId":"inbox_conversation_assign","summary":"Giao hội thoại","description":"Assign a conversation to a workspace member (or null to unassign).","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"assigneeId":{"type":"string","format":"uuid","nullable":true}},"required":["conversationId","assigneeId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.conversation.set_flags":{"post":{"operationId":"inbox_conversation_set_flags","summary":"Ghim / ẩn hội thoại trong app","description":"Pin or hide a conversation inside Zalo Auto only (does not change the Zalo phone app).","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"pinned":{"type":"boolean"},"hidden":{"type":"boolean"}},"required":["conversationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.note.add":{"post":{"operationId":"inbox_note_add","summary":"Thêm ghi chú nội bộ","description":"Add an internal team note to a conversation, optionally mentioning members. Never sent to Zalo.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"content":{"type":"string","minLength":1,"maxLength":5000},"mentionUserIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]}},"required":["conversationId","content"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.auto_assign.get":{"post":{"operationId":"inbox_auto_assign_get","summary":"Xem chia hội thoại tự động","description":"Read the workspace's automatic conversation assignment settings.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.auto_assign.set":{"post":{"operationId":"inbox_auto_assign_set","summary":"Sửa chia hội thoại tự động","description":"Change automatic conversation assignment (round robin / by load, members, accounts). Pass the `revision` from inbox_auto_assign_get as expectedRevision to avoid overwriting a newer change.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"config":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"mode":{"type":"string","enum":["round_robin","least_load"],"default":"round_robin"},"memberIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":200,"default":[]}},"additionalProperties":false},"expectedRevision":{"type":"integer","minimum":1,"description":"Workspace settings `revision` you read; changed meanwhile → conflict."}},"required":["config"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"admin"}},"/api/public/v2/ops/inbox.conversation.zalo_flags_set":{"post":{"operationId":"inbox_conversation_zalo_flags_set","summary":"Ghim / chưa đọc / lưu trữ / tắt thông báo trên Zalo","description":"Change the conversation on the Zalo app itself: pin, mark unread, archive or mute.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"pinned":{"type":"boolean"},"unread":{"type":"boolean"},"archived":{"type":"boolean"},"muted":{"type":"boolean"}},"required":["conversationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.conversation.delete_chat":{"post":{"operationId":"inbox_conversation_delete_chat","summary":"Xoá hội thoại phía tôi","description":"Delete the whole conversation on this account's side on Zalo.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"}},"required":["conversationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/inbox.sticker.category":{"post":{"operationId":"inbox_sticker_category","summary":"Danh mục sticker","description":"List stickers of a Zalo sticker category.","tags":["Hội thoại"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"categoryId":{"type":"integer"}},"required":["conversationId","categoryId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/accounts.list":{"post":{"operationId":"accounts_list","summary":"Danh sách tài khoản Zalo","description":"List the Zalo personal accounts the caller may use, with session state (ok/expired/…), Zalo restriction state, sync and listener health, machine and proxy summary (never secrets).","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"search":{"type":"string","maxLength":100},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/accounts.get":{"post":{"operationId":"accounts_get","summary":"Chi tiết tài khoản Zalo","description":"One Zalo account: session, restriction, sync stages, listener health, machine, proxy summary and policy version.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/accounts.usage.get":{"post":{"operationId":"accounts_usage_get","summary":"Lượt dùng và hạn mức đang áp","description":"The account's saved action policy (limits, schedule, pacing, warm-up), what is in force now, today's usage per task and the machine's pacing support.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/accounts.logs.list":{"post":{"operationId":"accounts_logs_list","summary":"Nhật ký tài khoản","description":"Recent events of an account (login, session changes, sync, restrictions, moves).","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/accounts.create":{"post":{"operationId":"accounts_create","summary":"Thêm tài khoản Zalo","description":"Create a Zalo account slot on a machine with a proxy (or direct IP when allowed). Then start a QR login with accounts_login_qr_start.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":120},"label":{"type":"string","maxLength":40,"nullable":true,"default":null},"assigneeId":{"type":"string","format":"uuid","nullable":true,"default":null},"agentId":{"type":"string","format":"uuid"},"proxyId":{"type":"string","format":"uuid","nullable":true},"directIp":{"type":"boolean","default":false}},"required":["name","agentId","proxyId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/accounts.login_qr.start":{"post":{"operationId":"accounts_login_qr_start","summary":"Bắt đầu đăng nhập QR","description":"Start a QR login for an account. A human must scan the QR (from accounts_login_qr_status) with the Zalo phone app; the AI cannot approve it.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/accounts.login_qr.status":{"post":{"operationId":"accounts_login_qr_status","summary":"Trạng thái đăng nhập QR","description":"Current QR login state: waiting for scan (with QR image data URL), scanned, succeeded, expired or failed.","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."},"jobId":{"type":"string","format":"uuid"}},"required":["accountId","jobId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/accounts.login_qr.cancel":{"post":{"operationId":"accounts_login_qr_cancel","summary":"Huỷ đăng nhập QR","description":"Cancel a pending QR login.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."},"jobId":{"type":"string","format":"uuid"}},"required":["accountId","jobId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/accounts.pause":{"post":{"operationId":"accounts_pause","summary":"Tạm dừng tài khoản","description":"Pause an account: no new work is handed to its machine until resumed.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/accounts.resume":{"post":{"operationId":"accounts_resume","summary":"Tiếp tục tài khoản","description":"Resume a paused account.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/accounts.settings.update":{"post":{"operationId":"accounts_settings_update","summary":"Sửa cài đặt tài khoản","description":"Rename, relabel, set the default assignee or toggle friend auto-accept for an account.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."},"name":{"type":"string","maxLength":120},"label":{"type":"string","maxLength":40,"nullable":true},"assigneeId":{"type":"string","format":"uuid","nullable":true},"autoAccept":{"type":"boolean"}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"admin"}},"/api/public/v2/ops/accounts.policy.patch":{"post":{"operationId":"accounts_policy_patch","summary":"Sửa hạn mức & nhịp","description":"Change part of an account's action policy (per-task day/hour limits: null = unlimited, 0 = take no more; schedule; pacing; warm-up; per-conversation auto-send cap). Send the version you read (accounts_usage_get); a newer version returns conflict.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"expectedVersion":{"type":"integer","minimum":0},"patch":{"type":"object","properties":{"quotas":{"type":"object","required":["friend_request","contact_lookup","message_stranger","message_friend","message_manual","group_join_link","group_add_member","group_post","friend_alias","friend_accept","profile_update","message_react","message_undo","message_delete","friend_reject","friend_undo_request","friend_remove","friend_block","friend_unblock","group_leave","group_create","group_admin","group_poll","group_note","group_reminder","group_invite","chat_settings"],"properties":{"friend_request":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"contact_lookup":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"message_stranger":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"message_friend":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"message_manual":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_join_link":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_add_member":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_post":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"friend_alias":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"friend_accept":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"profile_update":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"message_react":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"message_undo":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"message_delete":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"friend_reject":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"friend_undo_request":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"friend_remove":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"friend_block":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"friend_unblock":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_leave":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_create":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_admin":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_poll":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_note":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_reminder":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_invite":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"chat_settings":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false}},"additionalProperties":false},"schedule":{"type":"object","properties":{"enabled":{"type":"boolean"},"hours":{"type":"object","properties":{"days":{"type":"array","items":{"type":"array","items":{"type":"object","properties":{"start":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$|^24:00$"},"end":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$|^24:00$"}},"required":["start","end"],"additionalProperties":false},"maxItems":4},"minItems":7,"maxItems":7}},"required":["days"],"additionalProperties":false,"nullable":true}},"additionalProperties":false},"campaignGap":{"type":"object","properties":{"enabled":{"type":"boolean"},"minSeconds":{"type":"integer"},"maxSeconds":{"type":"integer"}},"additionalProperties":false},"groupPostGap":{"type":"object","properties":{"enabled":{"type":"boolean"},"seconds":{"type":"integer"}},"additionalProperties":false},"sameGroupGap":{"type":"object","properties":{"enabled":{"type":"boolean"},"hours":{"type":"integer"}},"additionalProperties":false},"longBreak":{"type":"object","properties":{"enabled":{"type":"boolean"},"everyMin":{"type":"integer"},"everyMax":{"type":"integer"},"minMinutes":{"type":"integer"},"maxMinutes":{"type":"integer"}},"additionalProperties":false},"typing":{"type":"object","properties":{"send":{"type":"boolean"},"groupPost":{"type":"boolean"}},"additionalProperties":false},"warmup":{"type":"object","properties":{"enabled":{"type":"boolean"},"startedAt":{"type":"string","format":"date-time","nullable":true},"steps":{"type":"array","items":{"type":"object","properties":{"days":{"type":"integer","minimum":1,"maximum":365},"factor":{"type":"number","exclusiveMinimum":true,"minimum":0,"maximum":1},"banned":{"type":"array","items":{"type":"string","enum":["friend_request","contact_lookup","message_stranger","message_friend","message_manual","group_join_link","group_add_member","group_post","friend_alias","friend_accept","profile_update","message_react","message_undo","message_delete","friend_reject","friend_undo_request","friend_remove","friend_block","friend_unblock","group_leave","group_create","group_admin","group_poll","group_note","group_reminder","group_invite","chat_settings"]},"maxItems":27,"default":[]}},"required":["days","factor"],"additionalProperties":false}}},"additionalProperties":false},"autoSend":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false}},"additionalProperties":false}},"required":["accountId","expectedVersion","patch"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"admin"}},"/api/public/v2/ops/accounts.policy.bulk_patch":{"post":{"operationId":"accounts_policy_bulk_patch","summary":"Sửa hạn mức & nhịp nhiều tài khoản","description":"Apply policy patches to many accounts, each with its own expected version; returns a result per account (saved / conflict / forbidden).","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"expectedVersion":{"type":"integer","minimum":0},"patch":{"type":"object","properties":{"quotas":{"type":"object","required":["friend_request","contact_lookup","message_stranger","message_friend","message_manual","group_join_link","group_add_member","group_post","friend_alias","friend_accept","profile_update","message_react","message_undo","message_delete","friend_reject","friend_undo_request","friend_remove","friend_block","friend_unblock","group_leave","group_create","group_admin","group_poll","group_note","group_reminder","group_invite","chat_settings"],"properties":{"friend_request":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"contact_lookup":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"message_stranger":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"message_friend":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"message_manual":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_join_link":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_add_member":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_post":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"friend_alias":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"friend_accept":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"profile_update":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"message_react":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"message_undo":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"message_delete":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"friend_reject":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"friend_undo_request":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"friend_remove":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"friend_block":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"friend_unblock":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_leave":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_create":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_admin":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_poll":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_note":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_reminder":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"group_invite":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false},"chat_settings":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false}},"additionalProperties":false},"schedule":{"type":"object","properties":{"enabled":{"type":"boolean"},"hours":{"type":"object","properties":{"days":{"type":"array","items":{"type":"array","items":{"type":"object","properties":{"start":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$|^24:00$"},"end":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$|^24:00$"}},"required":["start","end"],"additionalProperties":false},"maxItems":4},"minItems":7,"maxItems":7}},"required":["days"],"additionalProperties":false,"nullable":true}},"additionalProperties":false},"campaignGap":{"type":"object","properties":{"enabled":{"type":"boolean"},"minSeconds":{"type":"integer"},"maxSeconds":{"type":"integer"}},"additionalProperties":false},"groupPostGap":{"type":"object","properties":{"enabled":{"type":"boolean"},"seconds":{"type":"integer"}},"additionalProperties":false},"sameGroupGap":{"type":"object","properties":{"enabled":{"type":"boolean"},"hours":{"type":"integer"}},"additionalProperties":false},"longBreak":{"type":"object","properties":{"enabled":{"type":"boolean"},"everyMin":{"type":"integer"},"everyMax":{"type":"integer"},"minMinutes":{"type":"integer"},"maxMinutes":{"type":"integer"}},"additionalProperties":false},"typing":{"type":"object","properties":{"send":{"type":"boolean"},"groupPost":{"type":"boolean"}},"additionalProperties":false},"warmup":{"type":"object","properties":{"enabled":{"type":"boolean"},"startedAt":{"type":"string","format":"date-time","nullable":true},"steps":{"type":"array","items":{"type":"object","properties":{"days":{"type":"integer","minimum":1,"maximum":365},"factor":{"type":"number","exclusiveMinimum":true,"minimum":0,"maximum":1},"banned":{"type":"array","items":{"type":"string","enum":["friend_request","contact_lookup","message_stranger","message_friend","message_manual","group_join_link","group_add_member","group_post","friend_alias","friend_accept","profile_update","message_react","message_undo","message_delete","friend_reject","friend_undo_request","friend_remove","friend_block","friend_unblock","group_leave","group_create","group_admin","group_poll","group_note","group_reminder","group_invite","chat_settings"]},"maxItems":27,"default":[]}},"required":["days","factor"],"additionalProperties":false}}},"additionalProperties":false},"autoSend":{"type":"object","properties":{"day":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true},"hour":{"type":"integer","minimum":0,"maximum":2147483647,"nullable":true}},"additionalProperties":false}},"additionalProperties":false}},"required":["accountId","expectedVersion","patch"],"additionalProperties":false},"minItems":1,"maxItems":200}},"required":["items"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"admin"}},"/api/public/v2/ops/accounts.resync":{"post":{"operationId":"accounts_resync","summary":"Đồng bộ lại từ Zalo","description":"Re-run the staged sync (profile, friends, groups, labels, requests, history) or only the failed stages.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."},"onlyFailed":{"type":"boolean","default":false}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/accounts.profile.update":{"post":{"operationId":"accounts_profile_update","summary":"Sửa hồ sơ Zalo","description":"Change the account's Zalo display name, bio and/or profile picture on Zalo (picture: upload with media_upload_create, then pass its storagePath as avatarStoragePath).","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."},"name":{"type":"string","maxLength":50},"bio":{"type":"string","maxLength":200},"avatarStoragePath":{"type":"string","minLength":3,"maxLength":500,"description":"storagePath of an image uploaded with media_upload_create."}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"admin"}},"/api/public/v2/ops/accounts.proxy.attach":{"post":{"operationId":"accounts_proxy_attach","summary":"Gắn / đổi / bỏ proxy","description":"Attach a proxy to an account (one proxy per account), change it, or detach with proxyId=null.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."},"proxyId":{"type":"string","format":"uuid","nullable":true},"confirmNonVn":{"type":"boolean"}},"required":["accountId","proxyId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/accounts.machine.move":{"post":{"operationId":"accounts_machine_move","summary":"Chuyển tài khoản sang máy khác","description":"Move an account to another machine (and proxy). The session is removed from the old machine; a new QR login may be needed.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."},"agentId":{"type":"string","format":"uuid"},"proxyId":{"type":"string","format":"uuid","nullable":true},"directIp":{"type":"boolean","default":false}},"required":["accountId","agentId","proxyId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/accounts.remove":{"post":{"operationId":"accounts_remove","summary":"Gỡ tài khoản Zalo","description":"Remove an account from the workspace (optionally its chat history). Cannot be undone.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."},"deleteHistory":{"type":"boolean"}},"required":["accountId","deleteHistory"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin","destructive"],"x-min-role":"admin"}},"/api/public/v2/ops/accounts.session.check":{"post":{"operationId":"accounts_session_check","summary":"Kiểm tra phiên","description":"Ask the machine to verify the account's Zalo session now.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id (from accounts_list)."}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/proxies.list":{"post":{"operationId":"proxies_list","summary":"Danh sách proxy","description":"List proxies with status, observed exit IP/country, expiry and the account using each (passwords are never returned).","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ok","error","unchecked"]},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/proxies.get":{"post":{"operationId":"proxies_get","summary":"Chi tiết proxy","description":"One proxy with status, exit IP/country, expiry and the account using it (never the password).","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"proxyId":{"type":"string","format":"uuid"}},"required":["proxyId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/proxies.add":{"post":{"operationId":"proxies_add","summary":"Thêm proxy","description":"Add one proxy (password is write-only) and optionally check it through a machine.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"proxy":{"type":"object","properties":{"protocol":{"type":"string","enum":["http","socks5"]},"host":{"type":"string","minLength":1,"maxLength":255},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","maxLength":255,"nullable":true},"password":{"type":"string","maxLength":255,"nullable":true}},"required":["protocol","host","port","username","password"],"additionalProperties":false},"meta":{"type":"object","properties":{"provider":{"type":"string","maxLength":80,"nullable":true},"country":{"type":"string","maxLength":2,"nullable":true},"city":{"type":"string","maxLength":80,"nullable":true},"label":{"type":"string","maxLength":80,"nullable":true},"expiresOn":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","nullable":true}},"additionalProperties":false,"default":{}},"check":{"type":"boolean","default":true}},"required":["proxy"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/proxies.import":{"post":{"operationId":"proxies_import","summary":"Nhập nhiều proxy","description":"Import proxies from text (one per line, host:port:user:pass or URL form).","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":200000},"defaultProtocol":{"type":"string","enum":["http","socks5"]},"meta":{"type":"object","properties":{"provider":{"type":"string","maxLength":80,"nullable":true},"country":{"type":"string","maxLength":2,"nullable":true},"city":{"type":"string","maxLength":80,"nullable":true},"label":{"type":"string","maxLength":80,"nullable":true},"expiresOn":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","nullable":true}},"additionalProperties":false,"default":{}}},"required":["text","defaultProtocol"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/proxies.update":{"post":{"operationId":"proxies_update","summary":"Sửa proxy","description":"Change a proxy's endpoint, credentials (write-only) or labels.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"proxyId":{"type":"string","format":"uuid"},"proxy":{"type":"object","properties":{"protocol":{"type":"string","enum":["http","socks5"]},"host":{"type":"string","minLength":1,"maxLength":255},"port":{"type":"integer","minimum":1,"maximum":65535},"username":{"type":"string","maxLength":255,"nullable":true}},"additionalProperties":false},"passwordChange":{"type":"object","properties":{"password":{"type":"string","maxLength":255,"nullable":true}},"required":["password"],"additionalProperties":false},"meta":{"type":"object","properties":{"provider":{"type":"string","maxLength":80,"nullable":true},"country":{"type":"string","maxLength":2,"nullable":true},"city":{"type":"string","maxLength":80,"nullable":true},"label":{"type":"string","maxLength":80,"nullable":true},"expiresOn":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","nullable":true}},"additionalProperties":false,"default":{}}},"required":["proxyId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/proxies.check":{"post":{"operationId":"proxies_check","summary":"Kiểm tra proxy","description":"Check a proxy through a machine: reachability, exit IP, country, latency.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"proxyId":{"type":"string","format":"uuid"}},"required":["proxyId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/proxies.ip_change.confirm":{"post":{"operationId":"proxies_ip_change_confirm","summary":"Xác nhận IP proxy đã đổi","description":"Acknowledge that a proxy's exit IP changed (only a warning; never blocks the account).","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"proxyId":{"type":"string","format":"uuid"}},"required":["proxyId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"owner"}},"/api/public/v2/ops/proxies.delete":{"post":{"operationId":"proxies_delete","summary":"Xoá proxy","description":"Delete a proxy that no account uses.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"proxyId":{"type":"string","format":"uuid"}},"required":["proxyId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin","destructive"],"x-min-role":"admin"}},"/api/public/v2/ops/machines.list":{"post":{"operationId":"machines_list","summary":"Danh sách máy chủ","description":"List machines running the Zalo Auto agent: status, OS, version, update channel, CPU/RAM, accounts and capacity.","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/machines.get":{"post":{"operationId":"machines_get","summary":"Chi tiết máy","description":"One machine with health metrics, update state, accounts on it and the latest diagnostics summary.","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"}},"required":["agentId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/machines.releases.latest":{"post":{"operationId":"machines_releases_latest","summary":"Bản agent mới nhất","description":"Newest stable agent version, to see which machines need an update.","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"member"}},"/api/public/v2/ops/machines.pairing.create":{"post":{"operationId":"machines_pairing_create","summary":"Tạo lệnh cài máy","description":"Create a one-time install command (Windows, Linux or Docker) that pairs a new machine. Shown once; expires soon.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["windows","linux","docker"]}},"required":["platform"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/machines.rename":{"post":{"operationId":"machines_rename","summary":"Đổi tên máy","description":"Rename a machine.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":80}},"required":["agentId","name"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/machines.restart_agent":{"post":{"operationId":"machines_restart_agent","summary":"Khởi động lại agent","description":"Restart the agent process on a machine (never reboots the host).","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"}},"required":["agentId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/machines.logs.request":{"post":{"operationId":"machines_logs_request","summary":"Lấy nhật ký máy","description":"Ask the machine for a redacted recent log excerpt; read it with machines_get after a few seconds.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"}},"required":["agentId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/machines.update_channel.set":{"post":{"operationId":"machines_update_channel_set","summary":"Đổi kênh cập nhật","description":"Put a machine on the stable or beta agent channel.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"},"channel":{"type":"string","enum":["stable","beta"]}},"required":["agentId","channel"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/machines.rollback":{"post":{"operationId":"machines_rollback","summary":"Quay về bản agent trước","description":"Roll a machine back to its previous agent version.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"}},"required":["agentId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/machines.revoke":{"post":{"operationId":"machines_revoke","summary":"Thu hồi máy","description":"Revoke a machine's token: it stops receiving work immediately. Cannot be undone (pair again).","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"},"reason":{"type":"string","maxLength":300,"default":""}},"required":["agentId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin","destructive"],"x-min-role":"admin"}},"/api/public/v2/ops/machines.delete":{"post":{"operationId":"machines_delete","summary":"Xoá máy","description":"Delete a revoked/offline machine record.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"}},"required":["agentId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin","destructive"],"x-min-role":"admin"}},"/api/public/v2/ops/hetzner.options":{"post":{"operationId":"hetzner_options","summary":"Tuỳ chọn máy Hetzner","description":"Locations, server types and prices available with the workspace's Hetzner token.","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"string","enum":["hetzner_platform","hetzner_byo"],"default":"hetzner_byo"},"credentialId":{"type":"string","format":"uuid","nullable":true}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/hetzner.servers.create":{"post":{"operationId":"hetzner_servers_create","summary":"Tạo máy Hetzner","description":"Create a Hetzner server that installs the agent automatically. Costs money on the Hetzner account — confirmation required.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"string","enum":["hetzner_platform","hetzner_byo"],"default":"hetzner_byo"},"credentialId":{"type":"string","format":"uuid","nullable":true},"location":{"type":"string","maxLength":20},"serverType":{"type":"string","maxLength":20},"name":{"type":"string","maxLength":60}},"required":["location","serverType","name"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin","destructive"],"x-min-role":"admin"}},"/api/public/v2/ops/hetzner.servers.status":{"post":{"operationId":"hetzner_servers_status","summary":"Tiến trình máy Hetzner","description":"Refresh and read the provisioning progress of a Hetzner machine.","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"}},"required":["agentId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/hetzner.servers.delete":{"post":{"operationId":"hetzner_servers_delete","summary":"Xoá máy Hetzner","description":"Delete the Hetzner server behind a machine. Cannot be undone.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"agentId":{"type":"string","format":"uuid"}},"required":["agentId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin","destructive"],"x-min-role":"admin"}},"/api/public/v2/ops/friends.list":{"post":{"operationId":"friends_list","summary":"Danh sách bạn bè","description":"List an account's Zalo friends (as CRM contacts with relation, alias, friend since, last in/out).","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"search":{"type":"string","maxLength":100},"relation":{"type":"string","enum":["friend","request_sent","request_received","stranger","blocked"]},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/friends.requests.list":{"post":{"operationId":"friends_requests_list","summary":"Lời mời kết bạn","description":"List incoming or outgoing friend requests of an account.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"direction":{"type":"string","enum":["incoming","outgoing"]},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"required":["accountId","direction"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/friends.request.send":{"post":{"operationId":"friends_request_send","summary":"Gửi lời mời kết bạn","description":"Send friend requests from one account to CRM contacts (ids or a filter) with a greeting (spintax supported). Each request is a queued job under the account's limits.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"contactIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":2000},"filter":{"type":"object","properties":{"search":{"type":"string","maxLength":100},"labelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"labelMode":{"type":"string","enum":["any","all"],"default":"any"},"excludeLabelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"stageIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"noStage":{"type":"boolean"},"ownerIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"sources":{"type":"array","items":{"type":"string","maxLength":40},"maxItems":20},"listIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20},"accountId":{"type":"string","format":"uuid"},"relations":{"type":"array","items":{"type":"string","enum":["stranger","request_sent","request_received","friend","blocked"]},"maxItems":5},"hasPhone":{"type":"boolean"},"hasZalo":{"type":"boolean"},"dnc":{"type":"string","enum":["exclude","only","include"],"default":"include"},"interactedWithinDays":{"type":"integer","minimum":1,"maximum":3650},"notInteractedDays":{"type":"integer","minimum":1,"maximum":3650}},"additionalProperties":false},"message":{"type":"string","maxLength":600}},"required":["accountId","message"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/friends.request.accept":{"post":{"operationId":"friends_request_accept","summary":"Chấp nhận kết bạn","description":"Accept incoming friend requests.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"uids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40},"minItems":1,"maxItems":200,"description":"Zalo user ids of the account's friends/requesters."}},"required":["accountId","uids"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/friends.request.reject":{"post":{"operationId":"friends_request_reject","summary":"Từ chối kết bạn","description":"Reject incoming friend requests.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"uids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40},"minItems":1,"maxItems":200,"description":"Zalo user ids of the account's friends/requesters."}},"required":["accountId","uids"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/friends.request.withdraw":{"post":{"operationId":"friends_request_withdraw","summary":"Rút lời mời","description":"Withdraw friend requests this account sent.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"uids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40},"minItems":1,"maxItems":200,"description":"Zalo user ids of the account's friends/requesters."}},"required":["accountId","uids"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/friends.remove":{"post":{"operationId":"friends_remove","summary":"Huỷ kết bạn","description":"Unfriend users (they must accept a new request to be friends again).","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"uids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40},"minItems":1,"maxItems":200,"description":"Zalo user ids of the account's friends/requesters."}},"required":["accountId","uids"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/friends.block":{"post":{"operationId":"friends_block","summary":"Chặn","description":"Block users on Zalo.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"uids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40},"minItems":1,"maxItems":200,"description":"Zalo user ids of the account's friends/requesters."}},"required":["accountId","uids"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/friends.unblock":{"post":{"operationId":"friends_unblock","summary":"Bỏ chặn","description":"Unblock users on Zalo.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"uids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40},"minItems":1,"maxItems":200,"description":"Zalo user ids of the account's friends/requesters."}},"required":["accountId","uids"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/friends.alias.set":{"post":{"operationId":"friends_alias_set","summary":"Đặt tên gợi nhớ","description":"Set Zalo aliases for many friends from a template (variables like {name}).","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"contactIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":2000},"template":{"type":"string","minLength":1,"maxLength":80}},"required":["accountId","contactIds","template"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/friends.suggestions.list":{"post":{"operationId":"friends_suggestions_list","summary":"Gợi ý kết bạn","description":"Ask Zalo for friend suggestions of an account.","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/friends.suggestion.add_to_crm":{"post":{"operationId":"friends_suggestion_add_to_crm","summary":"Đưa gợi ý vào danh bạ","description":"Save a suggested Zalo user as a CRM contact (does not send a friend request).","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"uid":{"type":"string","minLength":1,"maxLength":40,"description":"Zalo user id."},"name":{"type":"string","maxLength":120},"avatar":{"type":"string","format":"uri","nullable":true}},"required":["accountId","uid","name","avatar"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/friends.export":{"post":{"operationId":"friends_export","summary":"Xuất danh sách bạn bè","description":"Export an account's friends as rows (name, phone, uid, alias, friend since).","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","export"],"x-min-role":"member"}},"/api/public/v2/ops/friends.auto_accept.get":{"post":{"operationId":"friends_auto_accept_get","summary":"Xem tự chấp nhận kết bạn","description":"Read the account's automatic friend-accept rule.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/friends.auto_accept.set":{"post":{"operationId":"friends_auto_accept_set","summary":"Sửa tự chấp nhận kết bạn","description":"Change the account's automatic friend-accept rule (labels, greeting, stale request withdrawal).","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"rule":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"mode":{"type":"string","enum":["all","known_phone","label"],"default":"known_phone"},"labelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]},"dailyCap":{"type":"integer","minimum":1,"maximum":200,"default":30},"undoAfterDays":{"type":"integer","minimum":0,"maximum":90,"default":14}},"additionalProperties":false}},"required":["accountId","rule"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/groups.list":{"post":{"operationId":"groups_list","summary":"Danh sách nhóm","description":"List Zalo groups of the caller's accounts with member count, our role and invite link.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"search":{"type":"string","maxLength":100},"includeLeft":{"type":"boolean","default":false},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/groups.get":{"post":{"operationId":"groups_get","summary":"Chi tiết nhóm","description":"One group with settings, our role (owner/deputy/member), link and last sync.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."}},"required":["groupRowId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/groups.members.list":{"post":{"operationId":"groups_members_list","summary":"Thành viên nhóm","description":"List cached members of a group (sync first with groups_members_sync for fresh data).","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"search":{"type":"string","maxLength":100},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"required":["groupRowId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/groups.members.sync":{"post":{"operationId":"groups_members_sync","summary":"Đồng bộ thành viên nhóm","description":"Refresh a group's member list from Zalo.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."}},"required":["groupRowId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.link.preview":{"post":{"operationId":"groups_link_preview","summary":"Xem nhóm qua link","description":"Preview a Zalo group invite link (name, members, approval needed).","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"link":{"type":"string","minLength":8,"maxLength":300}},"required":["accountId","link"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.join_link":{"post":{"operationId":"groups_join_link","summary":"Tham gia nhóm qua link","description":"Join one or many groups by invite links (newline separated). Some groups need admin approval: the result says joined or pending.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"links":{"type":"string","minLength":8,"maxLength":20000}},"required":["accountId","links"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.create":{"post":{"operationId":"groups_create","summary":"Tạo nhóm","description":"Create a Zalo group with friends of the account.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"name":{"type":"string","minLength":1,"maxLength":100},"contactIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":100}},"required":["accountId","name","contactIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.open_chat":{"post":{"operationId":"groups_open_chat","summary":"Mở chat nhóm","description":"Open (or create) the inbox conversation of a group.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."}},"required":["groupRowId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/groups.members.add":{"post":{"operationId":"groups_members_add","summary":"Thêm thành viên","description":"Add friends of the account to a group (Zalo privacy may refuse some).","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"contactIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":500}},"required":["groupRowId","contactIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.members.import_to_crm":{"post":{"operationId":"groups_members_import_to_crm","summary":"Đưa thành viên nhóm vào danh bạ","description":"Import members of a group this account owns/administers into CRM (optional label). Not allowed for other people's groups.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"labelId":{"type":"string","format":"uuid","nullable":true},"confirmed":{"type":"boolean"}},"required":["groupRowId","labelId","confirmed"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/groups.rename":{"post":{"operationId":"groups_rename","summary":"Đổi tên nhóm","description":"Rename a group (needs owner/deputy on Zalo).","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"name":{"type":"string","minLength":1,"maxLength":200}},"required":["groupRowId","name"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.avatar.update":{"post":{"operationId":"groups_avatar_update","summary":"Đổi ảnh nhóm","description":"Change a group's avatar from an image URL (needs owner/deputy).","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"avatarUrl":{"type":"string","format":"uri","maxLength":500}},"required":["groupRowId","avatarUrl"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.settings.update":{"post":{"operationId":"groups_settings_update","summary":"Đổi cài đặt nhóm","description":"Change Zalo group settings (who may post, approve members, etc.).","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"settings":{"type":"object","additionalProperties":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}]}}},"required":["groupRowId","settings"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.deputy.add":{"post":{"operationId":"groups_deputy_add","summary":"Thêm phó nhóm","description":"Promote a member to deputy.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"uid":{"type":"string","minLength":1,"maxLength":40,"description":"Zalo user id."}},"required":["groupRowId","uid"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.deputy.remove":{"post":{"operationId":"groups_deputy_remove","summary":"Bỏ phó nhóm","description":"Demote a deputy.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"uid":{"type":"string","minLength":1,"maxLength":40,"description":"Zalo user id."}},"required":["groupRowId","uid"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.pending.approve":{"post":{"operationId":"groups_pending_approve","summary":"Duyệt người xin vào","description":"Approve a pending join request.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"uid":{"type":"string","minLength":1,"maxLength":40,"description":"Zalo user id."}},"required":["groupRowId","uid"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.pending.reject":{"post":{"operationId":"groups_pending_reject","summary":"Từ chối người xin vào","description":"Reject a pending join request.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"uid":{"type":"string","minLength":1,"maxLength":40,"description":"Zalo user id."}},"required":["groupRowId","uid"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.member.remove":{"post":{"operationId":"groups_member_remove","summary":"Mời ra khỏi nhóm","description":"Remove a member from the group.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"uid":{"type":"string","minLength":1,"maxLength":40,"description":"Zalo user id."}},"required":["groupRowId","uid"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/groups.member.block":{"post":{"operationId":"groups_member_block","summary":"Chặn khỏi nhóm","description":"Block a member from the group.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"uid":{"type":"string","minLength":1,"maxLength":40,"description":"Zalo user id."}},"required":["groupRowId","uid"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.link.enable":{"post":{"operationId":"groups_link_enable","summary":"Bật link mời","description":"Enable the group's invite link.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."}},"required":["groupRowId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.link.disable":{"post":{"operationId":"groups_link_disable","summary":"Tắt link mời","description":"Disable the group's invite link.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."}},"required":["groupRowId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.leave":{"post":{"operationId":"groups_leave","summary":"Rời nhóm","description":"Leave a group with this account.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."}},"required":["groupRowId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/groups.disband":{"post":{"operationId":"groups_disband","summary":"Giải tán nhóm","description":"Disband a group the account owns. Type the group name as confirmName.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"confirmName":{"type":"string","maxLength":200}},"required":["groupRowId","confirmName"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/groups.poll.create":{"post":{"operationId":"groups_poll_create","summary":"Tạo bình chọn","description":"Create a poll in a group: multiple choice, expiry, and (agent 1.4.0) members adding options, results hidden until one votes, anonymous voters.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"question":{"type":"string","minLength":1,"maxLength":200},"options":{"type":"array","items":{"type":"string","maxLength":100},"minItems":2,"maxItems":20},"allowMultiple":{"type":"boolean","default":false},"expiresAt":{"type":"integer","nullable":true,"default":null},"allowAddNewOption":{"type":"boolean","default":false,"description":"Members may add options (agent 1.4.0)."},"hideVotePreview":{"type":"boolean","default":false,"description":"Results hidden until the member votes (agent 1.4.0)."},"isAnonymous":{"type":"boolean","default":false,"description":"Voters are hidden (agent 1.4.0)."}},"required":["groupRowId","question","options"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.note.create":{"post":{"operationId":"groups_note_create","summary":"Tạo ghi chú nhóm","description":"Create (and pin) a note in a group.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"title":{"type":"string","minLength":1,"maxLength":2000}},"required":["groupRowId","title"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/reminders.create":{"post":{"operationId":"reminders_create","summary":"Tạo nhắc hẹn","description":"Create a reminder in a group (groupRowId) or in a conversation (conversationId: a group chat, or 1:1 with agent 1.4.0); start time in ms epoch, repeat none/daily/weekly/monthly.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"conversationId":{"type":"string","format":"uuid","description":"A conversation (from inbox_conversations_list): 1:1 or group chat."},"title":{"type":"string","minLength":1,"maxLength":200},"startTime":{"type":"integer"},"repeat":{"type":"string","enum":["none","daily","weekly","monthly"]}},"required":["title","startTime","repeat"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/friends.alias.remove":{"post":{"operationId":"friends_alias_remove","summary":"Bỏ tên gợi nhớ","description":"Remove Zalo aliases of friends.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"uids":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40},"minItems":1,"maxItems":200,"description":"Zalo user ids of the account's friends/requesters."}},"required":["accountId","uids"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/friends.request.status":{"post":{"operationId":"friends_request_status","summary":"Trạng thái lời mời","description":"Check whether a friend request to a user is pending, accepted or none.","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"uid":{"type":"string","minLength":1,"maxLength":40,"description":"Zalo user id."}},"required":["accountId","uid"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/users.lookup_phone":{"post":{"operationId":"users_lookup_phone","summary":"Tra số Zalo","description":"Look up one phone number on Zalo (counts toward the account's lookup limit).","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"phone":{"type":"string","minLength":8,"maxLength":20}},"required":["accountId","phone"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/users.lookup_phones":{"post":{"operationId":"users_lookup_phones","summary":"Tra nhiều số","description":"Look up many phone numbers at once; one result per number.","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"phones":{"type":"array","items":{"type":"string","minLength":8,"maxLength":20},"minItems":1,"maxItems":200}},"required":["accountId","phones"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/users.lookup_username":{"post":{"operationId":"users_lookup_username","summary":"Tra theo username","description":"Find a Zalo user by username.","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"username":{"type":"string","minLength":2,"maxLength":60}},"required":["accountId","username"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/users.online_status":{"post":{"operationId":"users_online_status","summary":"Trạng thái online","description":"Which friends are online now and when given users were last online (if Zalo shares it).","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"uids":{"type":"array","items":{"type":"string","maxLength":40},"maxItems":20,"default":[],"description":"Up to 20 users to read last-online time for (only if they share it)."}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.pending.list":{"post":{"operationId":"groups_pending_list","summary":"Người chờ duyệt","description":"List pending join requests of a group.","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."}},"required":["groupRowId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.blocked.list":{"post":{"operationId":"groups_blocked_list","summary":"Người bị chặn khỏi nhóm","description":"List members blocked from a group.","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."}},"required":["groupRowId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.member.unblock":{"post":{"operationId":"groups_member_unblock","summary":"Bỏ chặn khỏi nhóm","description":"Unblock a user from a group.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"uid":{"type":"string","minLength":1,"maxLength":40,"description":"Zalo user id."}},"required":["groupRowId","uid"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.owner.transfer":{"post":{"operationId":"groups_owner_transfer","summary":"Chuyển trưởng nhóm","description":"Transfer group ownership to a member. Type the group name as confirmName.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"uid":{"type":"string","minLength":1,"maxLength":40,"description":"Zalo user id."},"confirmName":{"type":"string","maxLength":200}},"required":["groupRowId","uid","confirmName"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/groups.link.detail":{"post":{"operationId":"groups_link_detail","summary":"Chi tiết link mời","description":"Read the group's current invite link and its settings.","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."}},"required":["groupRowId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.invites.list":{"post":{"operationId":"groups_invites_list","summary":"Lời mời vào nhóm","description":"List group invitations this account received.","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."}},"required":["accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.invites.accept":{"post":{"operationId":"groups_invites_accept","summary":"Nhận lời mời vào nhóm","description":"Accept a received group invitation.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"zaloGroupId":{"type":"string","maxLength":40},"name":{"type":"string","maxLength":200,"description":"Group name from groups_invites_list, shown until the next sync."}},"required":["accountId","zaloGroupId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.invites.decline":{"post":{"operationId":"groups_invites_decline","summary":"Từ chối lời mời vào nhóm","description":"Decline a received group invitation (optionally block further invitations from that group).","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"zaloGroupId":{"type":"string","maxLength":40},"blockFuture":{"type":"boolean","default":false,"description":"Also block further invitations from this group."}},"required":["accountId","zaloGroupId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.invite_to_groups":{"post":{"operationId":"groups_invite_to_groups","summary":"Mời một người vào nhiều nhóm","description":"Invite one user to several groups of the account.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid","description":"Zalo account id."},"uid":{"type":"string","minLength":1,"maxLength":40,"description":"Zalo user id."},"groupRowIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":50}},"required":["accountId","uid","groupRowIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.board.list":{"post":{"operationId":"groups_board_list","summary":"Bảng tin nhóm","description":"List notes and polls on a group's board.","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."}},"required":["groupRowId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.poll.get":{"post":{"operationId":"groups_poll_get","summary":"Xem bình chọn","description":"Read a poll's options and votes.","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"pollId":{"type":"integer"}},"required":["groupRowId","pollId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.poll.add_options":{"post":{"operationId":"groups_poll_add_options","summary":"Thêm phương án","description":"Add options to a poll.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"pollId":{"type":"integer"},"options":{"type":"array","items":{"type":"string","maxLength":100},"minItems":1,"maxItems":10}},"required":["groupRowId","pollId","options"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.poll.vote":{"post":{"operationId":"groups_poll_vote","summary":"Bỏ phiếu","description":"Vote on a poll with this account.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"pollId":{"type":"integer"},"optionIds":{"type":"array","items":{"type":"integer"},"minItems":1,"maxItems":20}},"required":["groupRowId","pollId","optionIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.poll.share":{"post":{"operationId":"groups_poll_share","summary":"Chia sẻ bình chọn","description":"Share a poll into the group chat.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"pollId":{"type":"integer"}},"required":["groupRowId","pollId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/groups.poll.lock":{"post":{"operationId":"groups_poll_lock","summary":"Khoá bình chọn","description":"Lock a poll so no more votes are accepted.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"pollId":{"type":"integer"}},"required":["groupRowId","pollId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/groups.note.edit":{"post":{"operationId":"groups_note_edit","summary":"Sửa ghi chú nhóm","description":"Edit a group note.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupRowId":{"type":"string","format":"uuid","description":"Group id from groups_list (our row id, not the Zalo group id)."},"noteId":{"type":"string","maxLength":40},"title":{"type":"string","minLength":1,"maxLength":2000},"pinned":{"type":"boolean"}},"required":["groupRowId","noteId","title"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/reminders.list":{"post":{"operationId":"reminders_list","summary":"Danh sách nhắc hẹn","description":"List reminders of a group or 1:1 conversation.","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"}},"required":["conversationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/reminders.get":{"post":{"operationId":"reminders_get","summary":"Chi tiết nhắc hẹn","description":"Read one reminder.","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"reminderId":{"type":"string","maxLength":40}},"required":["conversationId","reminderId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/reminders.responses":{"post":{"operationId":"reminders_responses","summary":"Người tham gia nhắc hẹn","description":"Who accepted or declined a reminder.","tags":["Tài khoản & quan hệ"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"reminderId":{"type":"string","maxLength":40}},"required":["conversationId","reminderId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/reminders.edit":{"post":{"operationId":"reminders_edit","summary":"Sửa nhắc hẹn","description":"Edit a reminder's title, time or repeat.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"reminderId":{"type":"string","maxLength":40},"title":{"type":"string","minLength":1,"maxLength":200},"startTime":{"type":"integer"},"repeat":{"type":"string","enum":["none","daily","weekly","monthly"]}},"required":["conversationId","reminderId","title","startTime","repeat"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/reminders.remove":{"post":{"operationId":"reminders_remove","summary":"Xoá nhắc hẹn","description":"Delete a reminder.","tags":["Tài khoản & quan hệ"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"conversationId":{"type":"string","format":"uuid"},"reminderId":{"type":"string","maxLength":40}},"required":["conversationId","reminderId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.list":{"post":{"operationId":"contacts_list","summary":"Tìm khách hàng","description":"Search CRM contacts: text (name/phone), labels (any/all/exclude), stages, owners, lists, saved segment, Zalo account relation (friend/request/stranger), has phone/Zalo, do-not-contact, last interaction. Keyset paginated.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"filter":{"type":"object","properties":{"search":{"type":"string","maxLength":100},"labelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"labelMode":{"type":"string","enum":["any","all"],"default":"any"},"excludeLabelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"stageIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"noStage":{"type":"boolean"},"ownerIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"sources":{"type":"array","items":{"type":"string","maxLength":40},"maxItems":20},"listIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20},"accountId":{"type":"string","format":"uuid"},"relations":{"type":"array","items":{"type":"string","enum":["stranger","request_sent","request_received","friend","blocked"]},"maxItems":5},"hasPhone":{"type":"boolean"},"hasZalo":{"type":"boolean"},"dnc":{"type":"string","enum":["exclude","only","include"],"default":"include"},"interactedWithinDays":{"type":"integer","minimum":1,"maximum":3650},"notInteractedDays":{"type":"integer","minimum":1,"maximum":3650}},"additionalProperties":false},"segmentId":{"type":"string","format":"uuid"},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.get":{"post":{"operationId":"contacts_get","summary":"Hồ sơ khách","description":"One contact with labels, stage, owner, custom fields, Zalo account links, notes, stage history and recent timeline.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"}},"required":["contactId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.create":{"post":{"operationId":"contacts_create","summary":"Thêm khách","description":"Create a CRM contact (rejects a duplicate phone; returns the existing id).","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"phone":{"type":"string","maxLength":30,"nullable":true,"default":null},"ownerId":{"type":"string","format":"uuid","nullable":true,"default":null},"stageId":{"type":"string","format":"uuid","nullable":true,"default":null},"labelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50,"default":[]}},"required":["name"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.update":{"post":{"operationId":"contacts_update","summary":"Sửa khách","description":"Change contact fields: name, phone, gender, birthday, owner, deal value, custom fields.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"},"name":{"type":"string","maxLength":120},"phone":{"type":"string","maxLength":30,"nullable":true},"gender":{"type":"string","enum":["male","female","other"],"nullable":true},"birthday":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","nullable":true},"ownerId":{"type":"string","format":"uuid","nullable":true},"dealValue":{"type":"number","minimum":0,"maximum":10000000000000,"nullable":true},"custom":{"type":"object","additionalProperties":{"anyOf":[{"type":"string","maxLength":500},{"type":"number"},{"enum":["null"],"nullable":true}]}}},"required":["contactId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.labels.set":{"post":{"operationId":"contacts_labels_set","summary":"Gắn nhãn khách","description":"Replace a contact's labels.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"},"labelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50}},"required":["contactId","labelIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.labels.bulk":{"post":{"operationId":"contacts_labels_bulk","summary":"Gắn / bỏ nhãn hàng loạt","description":"Add or remove one label on many contacts.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contactIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":1000},"labelId":{"type":"string","format":"uuid"},"add":{"type":"boolean"}},"required":["contactIds","labelId","add"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.stage.set":{"post":{"operationId":"contacts_stage_set","summary":"Đổi giai đoạn","description":"Move a contact to a pipeline stage (null = none). Recorded in stage history.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"},"stageId":{"type":"string","format":"uuid","nullable":true}},"required":["contactId","stageId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.owner.set":{"post":{"operationId":"contacts_owner_set","summary":"Đổi người phụ trách","description":"Set (or clear with null) the workspace member responsible for a contact.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"},"ownerId":{"type":"string","format":"uuid","nullable":true}},"required":["contactId","ownerId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.note.add":{"post":{"operationId":"contacts_note_add","summary":"Thêm ghi chú khách","description":"Add a note to a contact.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"},"content":{"type":"string","minLength":1,"maxLength":5000}},"required":["contactId","content"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.note.edit":{"post":{"operationId":"contacts_note_edit","summary":"Sửa ghi chú khách","description":"Edit a contact note (null content deletes it).","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"noteId":{"type":"string","format":"uuid"},"content":{"type":"string","maxLength":5000,"nullable":true}},"required":["noteId","content"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.dnc.set":{"post":{"operationId":"contacts_dnc_set","summary":"Không liên hệ","description":"Put a contact on (or off) the do-not-contact list; campaigns and automation skip them.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contactId":{"type":"string","format":"uuid"},"dnc":{"type":"boolean"},"reason":{"type":"string","maxLength":200}},"required":["contactId","dnc"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.lists.add":{"post":{"operationId":"contacts_lists_add","summary":"Thêm vào danh sách","description":"Add contacts to a static list.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"listId":{"type":"string","format":"uuid"},"contactIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":1000}},"required":["listId","contactIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.lists.remove":{"post":{"operationId":"contacts_lists_remove","summary":"Bỏ khỏi danh sách","description":"Remove contacts from a static list.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"listId":{"type":"string","format":"uuid"},"contactIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":1000}},"required":["listId","contactIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.delete":{"post":{"operationId":"contacts_delete","summary":"Xoá khách","description":"Delete contacts and their CRM data. Cannot be undone.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contactIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":1000}},"required":["contactIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.merge":{"post":{"operationId":"contacts_merge","summary":"Gộp khách trùng","description":"Merge duplicate contacts into one (keeps keepId). Cannot be undone.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"keepId":{"type":"string","format":"uuid"},"mergeIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":20}},"required":["keepId","mergeIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm","destructive"],"x-min-role":"admin"}},"/api/public/v2/ops/contacts.existing_phones":{"post":{"operationId":"contacts_existing_phones","summary":"Số đã có trong danh bạ","description":"Which of these +84 phone numbers already exist as contacts (for de-duplicating an import).","tags":["Khách hàng"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phones":{"type":"array","items":{"type":"string","pattern":"^\\+84\\d{9}$"},"maxItems":20000}},"required":["phones"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.import.start":{"post":{"operationId":"contacts_import_start","summary":"Bắt đầu nhập khách","description":"Start an import (file name, row count, column mapping, options). Then send rows with contacts_import_chunk and close with contacts_import_finish.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string","maxLength":200},"total":{"type":"integer","minimum":1,"maximum":50000},"mapping":{"type":"object","additionalProperties":{"type":"string","maxLength":60}},"options":{"type":"object","properties":{"mode":{"type":"string","enum":["update","keep"]},"labelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20},"listId":{"type":"string","format":"uuid","nullable":true},"source":{"type":"string","maxLength":40},"ownerId":{"type":"string","format":"uuid","nullable":true}},"required":["mode","labelIds","listId","source","ownerId"],"additionalProperties":false}},"required":["fileName","total","mapping","options"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.import.chunk":{"post":{"operationId":"contacts_import_chunk","summary":"Gửi một phần dữ liệu nhập","description":"Send up to 500 rows of an import; returns created/updated/duplicate/invalid counts for the chunk.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"importId":{"type":"string","format":"uuid"},"rows":{"type":"array","items":{"type":"object","properties":{"line":{"type":"integer"},"name":{"type":"string","maxLength":200},"phone":{"type":"string","maxLength":40},"custom":{"type":"object","additionalProperties":{"type":"string","maxLength":500}},"note":{"type":"string","maxLength":2000}},"required":["line","name","phone","custom"],"additionalProperties":false},"maxItems":500}},"required":["importId","rows"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.import.finish":{"post":{"operationId":"contacts_import_finish","summary":"Kết thúc nhập khách","description":"Close an import (or mark it failed).","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"importId":{"type":"string","format":"uuid"},"failed":{"type":"boolean"}},"required":["importId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.import.status":{"post":{"operationId":"contacts_import_status","summary":"Tiến độ nhập khách","description":"Read an import's counts and errors.","tags":["Khách hàng"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"importId":{"type":"string","format":"uuid"}},"required":["importId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/contacts.export":{"post":{"operationId":"contacts_export","summary":"Xuất khách","description":"Export contacts (ids or filter) as rows with all fields.","tags":["Khách hàng"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contactIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50000},"filter":{"type":"object","properties":{"search":{"type":"string","maxLength":100},"labelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"labelMode":{"type":"string","enum":["any","all"],"default":"any"},"excludeLabelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"stageIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"noStage":{"type":"boolean"},"ownerIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"sources":{"type":"array","items":{"type":"string","maxLength":40},"maxItems":20},"listIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20},"accountId":{"type":"string","format":"uuid"},"relations":{"type":"array","items":{"type":"string","enum":["stranger","request_sent","request_received","friend","blocked"]},"maxItems":5},"hasPhone":{"type":"boolean"},"hasZalo":{"type":"boolean"},"dnc":{"type":"string","enum":["exclude","only","include"],"default":"include"},"interactedWithinDays":{"type":"integer","minimum":1,"maximum":3650},"notInteractedDays":{"type":"integer","minimum":1,"maximum":3650}},"additionalProperties":false}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","export"],"x-min-role":"admin"}},"/api/public/v2/ops/contacts.enrich_phone":{"post":{"operationId":"contacts_enrich_phone","summary":"Kiểm tra Zalo theo số","description":"Look contacts' phone numbers up on Zalo through chosen accounts (queued, counts toward each account's lookup limit) to fill Zalo name/avatar/uid.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contactIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":5000},"filter":{"type":"object","properties":{"search":{"type":"string","maxLength":100},"labelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"labelMode":{"type":"string","enum":["any","all"],"default":"any"},"excludeLabelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"stageIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"noStage":{"type":"boolean"},"ownerIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"sources":{"type":"array","items":{"type":"string","maxLength":40},"maxItems":20},"listIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20},"accountId":{"type":"string","format":"uuid"},"relations":{"type":"array","items":{"type":"string","enum":["stranger","request_sent","request_received","friend","blocked"]},"maxItems":5},"hasPhone":{"type":"boolean"},"hasZalo":{"type":"boolean"},"dnc":{"type":"string","enum":["exclude","only","include"],"default":"include"},"interactedWithinDays":{"type":"integer","minimum":1,"maximum":3650},"notInteractedDays":{"type":"integer","minimum":1,"maximum":3650}},"additionalProperties":false},"accountIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":50},"force":{"type":"boolean","default":false}},"required":["accountIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/crm.labels.list":{"post":{"operationId":"crm_labels_list","summary":"Danh sách nhãn","description":"List contact labels (CRM labels; Zalo-native labels are marked).","tags":["Khách hàng"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/crm.labels.save":{"post":{"operationId":"crm_labels_save","summary":"Tạo / sửa nhãn","description":"Create or rename/recolor a label.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":40},"color":{"type":"string","enum":["red","orange","yellow","green","blue","purple","gray"]},"expectedRevision":{"type":"integer","minimum":1,"description":"The `revision` you read; if it changed meanwhile the save answers conflict instead of overwriting."}},"required":["name","color"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/crm.labels.delete":{"post":{"operationId":"crm_labels_delete","summary":"Xoá nhãn","description":"Xoá nhãn (cannot be undone).","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/crm.stages.list":{"post":{"operationId":"crm_stages_list","summary":"Giai đoạn pipeline","description":"List pipeline stages in order with won/lost flags.","tags":["Khách hàng"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/crm.stages.save":{"post":{"operationId":"crm_stages_save","summary":"Sửa giai đoạn pipeline","description":"Replace the ordered pipeline stages (ids keep existing ones).","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","maxLength":40},"color":{"type":"string","enum":["red","orange","yellow","green","blue","purple","gray"]},"isWon":{"type":"boolean"},"isLost":{"type":"boolean"},"expectedRevision":{"type":"integer","minimum":1,"description":"The `revision` you read; if it changed meanwhile the save answers conflict instead of overwriting."}},"required":["name","color","isWon","isLost"],"additionalProperties":false},"minItems":1,"maxItems":20}},"required":["stages"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"admin"}},"/api/public/v2/ops/crm.stages.delete":{"post":{"operationId":"crm_stages_delete","summary":"Xoá giai đoạn","description":"Delete one pipeline stage that no contact is in (move them first); at least one stage stays.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm","destructive"],"x-min-role":"admin"}},"/api/public/v2/ops/crm.fields.list":{"post":{"operationId":"crm_fields_list","summary":"Trường tuỳ chỉnh","description":"List custom contact fields.","tags":["Khách hàng"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/crm.fields.save":{"post":{"operationId":"crm_fields_save","summary":"Tạo / sửa trường tuỳ chỉnh","description":"Create or change a custom field (text, number, date, select).","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"key":{"type":"string","maxLength":40},"label":{"type":"string","minLength":1,"maxLength":60},"type":{"type":"string","enum":["text","number","date","select"]},"options":{"type":"array","items":{"type":"string","maxLength":60},"maxItems":50,"default":[]},"expectedRevision":{"type":"integer","minimum":1,"description":"The `revision` you read; if it changed meanwhile the save answers conflict instead of overwriting."}},"required":["key","label","type"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"admin"}},"/api/public/v2/ops/crm.fields.delete":{"post":{"operationId":"crm_fields_delete","summary":"Xoá trường tuỳ chỉnh","description":"Xoá trường tuỳ chỉnh (cannot be undone).","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/crm.lists.list":{"post":{"operationId":"crm_lists_list","summary":"Danh sách khách","description":"List static contact lists with sizes.","tags":["Khách hàng"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/crm.lists.save":{"post":{"operationId":"crm_lists_save","summary":"Tạo / sửa danh sách","description":"Create or rename a static contact list.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":80},"description":{"type":"string","maxLength":500},"expectedRevision":{"type":"integer","minimum":1,"description":"The `revision` you read; if it changed meanwhile the save answers conflict instead of overwriting."}},"required":["name"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/crm.lists.delete":{"post":{"operationId":"crm_lists_delete","summary":"Xoá danh sách","description":"Xoá danh sách (cannot be undone).","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/crm.segments.list":{"post":{"operationId":"crm_segments_list","summary":"Phân khúc","description":"List saved dynamic segments (filters).","tags":["Khách hàng"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/crm.segments.preview":{"post":{"operationId":"crm_segments_preview","summary":"Xem trước phân khúc","description":"How many contacts a saved segment (or a filter) selects now, with a sample of up to 10. No side effects.","tags":["Khách hàng"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"segmentId":{"type":"string","format":"uuid"},"filter":{"type":"object","properties":{"search":{"type":"string","maxLength":100},"labelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"labelMode":{"type":"string","enum":["any","all"],"default":"any"},"excludeLabelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"stageIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"noStage":{"type":"boolean"},"ownerIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"sources":{"type":"array","items":{"type":"string","maxLength":40},"maxItems":20},"listIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20},"accountId":{"type":"string","format":"uuid"},"relations":{"type":"array","items":{"type":"string","enum":["stranger","request_sent","request_received","friend","blocked"]},"maxItems":5},"hasPhone":{"type":"boolean"},"hasZalo":{"type":"boolean"},"dnc":{"type":"string","enum":["exclude","only","include"],"default":"include"},"interactedWithinDays":{"type":"integer","minimum":1,"maximum":3650},"notInteractedDays":{"type":"integer","minimum":1,"maximum":3650}},"additionalProperties":false}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/crm.segments.save":{"post":{"operationId":"crm_segments_save","summary":"Tạo / sửa phân khúc","description":"Create or change a saved contact filter.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":80},"filter":{"type":"object","properties":{"search":{"type":"string","maxLength":100},"labelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"labelMode":{"type":"string","enum":["any","all"],"default":"any"},"excludeLabelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"stageIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"noStage":{"type":"boolean"},"ownerIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"sources":{"type":"array","items":{"type":"string","maxLength":40},"maxItems":20},"listIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20},"accountId":{"type":"string","format":"uuid"},"relations":{"type":"array","items":{"type":"string","enum":["stranger","request_sent","request_received","friend","blocked"]},"maxItems":5},"hasPhone":{"type":"boolean"},"hasZalo":{"type":"boolean"},"dnc":{"type":"string","enum":["exclude","only","include"],"default":"include"},"interactedWithinDays":{"type":"integer","minimum":1,"maximum":3650},"notInteractedDays":{"type":"integer","minimum":1,"maximum":3650}},"additionalProperties":false},"expectedRevision":{"type":"integer","minimum":1,"description":"The `revision` you read; if it changed meanwhile the save answers conflict instead of overwriting."}},"required":["name","filter"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/crm.segments.delete":{"post":{"operationId":"crm_segments_delete","summary":"Xoá phân khúc","description":"Xoá phân khúc (cannot be undone).","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/tasks.list":{"post":{"operationId":"tasks_list","summary":"Danh sách nhiệm vụ","description":"List tasks by status, assignee, contact or due date.","tags":["Khách hàng"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["open","done","cancelled"]},"assigneeId":{"type":"string","format":"uuid"},"contactId":{"type":"string","format":"uuid"},"dueBefore":{"type":"string","format":"date-time"},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/tasks.get":{"post":{"operationId":"tasks_get","summary":"Chi tiết nhiệm vụ","description":"One task with status, due date, assignee and links.","tags":["Khách hàng"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"taskId":{"type":"string","format":"uuid"}},"required":["taskId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/tasks.create":{"post":{"operationId":"tasks_create","summary":"Tạo nhiệm vụ","description":"Create a task (optionally linked to a contact, conversation or message) with due date and reminder.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":5000},"dueAt":{"type":"string","format":"date-time","nullable":true,"default":null},"remindBeforeMinutes":{"anyOf":[{"type":"number","enum":[15]},{"type":"number","enum":[60]},{"type":"number","enum":[1440]}],"nullable":true,"default":null},"assigneeId":{"type":"string","format":"uuid","nullable":true,"default":null},"contactId":{"type":"string","format":"uuid","nullable":true,"default":null},"conversationId":{"type":"string","format":"uuid","nullable":true,"default":null},"messageId":{"type":"string","format":"uuid","nullable":true,"default":null}},"required":["title"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/tasks.update":{"post":{"operationId":"tasks_update","summary":"Sửa nhiệm vụ","description":"Change a task's title, description, due date, assignee, reminder or status (open/done/cancelled).","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"taskId":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":5000},"dueAt":{"type":"string","format":"date-time","nullable":true},"assigneeId":{"type":"string","format":"uuid","nullable":true},"status":{"type":"string","enum":["open","done","cancelled"]},"remindBeforeMinutes":{"anyOf":[{"type":"number","enum":[15]},{"type":"number","enum":[60]},{"type":"number","enum":[1440]}],"nullable":true}},"required":["taskId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm"],"x-min-role":"member"}},"/api/public/v2/ops/tasks.delete":{"post":{"operationId":"tasks_delete","summary":"Xoá nhiệm vụ","description":"Delete a task.","tags":["Khách hàng"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"taskId":{"type":"string","format":"uuid"}},"required":["taskId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","crm","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/library.templates.list":{"post":{"operationId":"library_templates_list","summary":"Mẫu tin","description":"List message templates (workspace and the caller's private ones) with tags.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"search":{"type":"string","maxLength":100},"tag":{"type":"string","maxLength":30},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/library.templates.save":{"post":{"operationId":"library_templates_save","summary":"Tạo / sửa mẫu tin","description":"Create or change a message template (spintax {a|b} and variables like {name}; optional media).","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":120},"content":{"type":"string","maxLength":5000},"tags":{"type":"array","items":{"type":"string","maxLength":30},"maxItems":10,"default":[]},"scope":{"type":"string","enum":["workspace","private"]},"mediaIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":5,"default":[]},"expectedRevision":{"type":"integer","minimum":1,"description":"The `revision` you read; if it changed meanwhile the save answers conflict instead of overwriting."}},"required":["name","content","scope"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/library.templates.delete":{"post":{"operationId":"library_templates_delete","summary":"Xoá mẫu tin","description":"Delete a template.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/library.quick_replies.list":{"post":{"operationId":"library_quick_replies_list","summary":"Tin nhắn nhanh","description":"List quick replies (/shortcut) available to the caller.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/library.quick_replies.save":{"post":{"operationId":"library_quick_replies_save","summary":"Tạo / sửa tin nhắn nhanh","description":"Create or change a quick reply.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"shortcut":{"type":"string","minLength":1,"maxLength":31},"content":{"type":"string","minLength":1,"maxLength":5000},"scope":{"type":"string","enum":["workspace","private"]},"mediaIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":5,"default":[]},"expectedRevision":{"type":"integer","minimum":1,"description":"The `revision` you read; if it changed meanwhile the save answers conflict instead of overwriting."}},"required":["shortcut","content","scope"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/library.quick_replies.delete":{"post":{"operationId":"library_quick_replies_delete","summary":"Xoá tin nhắn nhanh","description":"Delete a quick reply.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/library.media.list":{"post":{"operationId":"library_media_list","summary":"Thư viện tệp","description":"List saved media, contact cards and bank cards.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["image","video","file","voice","card","bank"]},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/library.media.download_url":{"post":{"operationId":"library_media_download_url","summary":"Link tải tệp","description":"A short-lived download URL for a saved media file.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/library.media.upload":{"post":{"operationId":"library_media_upload","summary":"Tải tệp vào thư viện","description":"Get a signed upload URL for a library file; then call library_media_register.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"size":{"type":"integer","minimum":1},"mime":{"type":"string","maxLength":120}},"required":["name","size","mime"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/library.media.register":{"post":{"operationId":"library_media_register","summary":"Lưu tệp vào thư viện","description":"Register an uploaded file in the library.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"path":{"type":"string","maxLength":500},"name":{"type":"string","maxLength":200},"size":{"type":"integer","minimum":0},"mime":{"type":"string","maxLength":120},"width":{"type":"integer"},"height":{"type":"integer"}},"required":["path","name","size","mime"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/library.cards.save":{"post":{"operationId":"library_cards_save","summary":"Lưu danh thiếp / tài khoản ngân hàng","description":"Save a contact card (Zalo user id) or bank card to reuse in messages.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["card","bank"]},"name":{"type":"string","minLength":1,"maxLength":200},"data":{"anyOf":[{"type":"object","properties":{"userId":{"type":"string","maxLength":64},"phone":{"type":"string","maxLength":20}},"required":["userId"],"additionalProperties":false},{"type":"object","properties":{"binBank":{"type":"integer"},"numAccBank":{"type":"string","maxLength":40},"nameAccBank":{"type":"string","maxLength":120}},"required":["binBank","numAccBank","nameAccBank"],"additionalProperties":false}]}},"required":["kind","name","data"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/library.media.delete":{"post":{"operationId":"library_media_delete","summary":"Xoá tệp","description":"Delete a library item.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/library.stage_for_send":{"post":{"operationId":"library_stage_for_send","summary":"Chuẩn bị tệp thư viện để gửi","description":"Turn saved library media into attachments usable by inbox_message_send.","tags":["Hội thoại"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mediaIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":10}},"required":["mediaIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.list":{"post":{"operationId":"campaigns_list","summary":"Danh sách chiến dịch","description":"List campaigns with type, status, sender accounts and progress.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["draft","running","paused","completed","archived"]},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.get":{"post":{"operationId":"campaigns_get","summary":"Chi tiết chiến dịch","description":"One campaign with its full step graph, audience, distribution, schedule and settings.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.create":{"post":{"operationId":"campaigns_create","summary":"Tạo chiến dịch","description":"Create a draft campaign: sequence (multi-step care), broadcast (one message) or group_post (recurring group posts). Configure it with campaigns_update.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["sequence","broadcast","group_post"]},"name":{"type":"string","minLength":1,"maxLength":120},"goal":{"type":"string","maxLength":500,"default":""}},"required":["type","name"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.update":{"post":{"operationId":"campaigns_update","summary":"Sửa chiến dịch","description":"Change any part of a campaign: steps graph (messages with spintax/variables/media, waits, branches, actions), audience, exclusions, sender accounts and distribution, schedule, settings.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."},"patch":{"type":"object","properties":{"name":{"type":"string","maxLength":120},"goal":{"type":"string","maxLength":500},"goalStageId":{"type":"string","format":"uuid","nullable":true},"graph":{"type":"object","properties":{"start":{"type":"string","minLength":1,"maxLength":40,"nullable":true},"nodes":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"type":{"type":"string","enum":["friend_request"]},"message":{"type":"string","maxLength":600},"next":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null}},"required":["id","type","message"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"type":{"type":"string","enum":["send_message"]},"content":{"type":"object","properties":{"variants":{"type":"array","items":{"type":"string","maxLength":2000},"minItems":1,"maxItems":5},"mediaIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":5,"default":[]}},"required":["variants"],"additionalProperties":false},"next":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null}},"required":["id","type","content"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"type":{"type":"string","enum":["tag"]},"add":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":10,"default":[]},"remove":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":10,"default":[]},"next":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null}},"required":["id","type"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"type":{"type":"string","enum":["set_stage"]},"stageId":{"type":"string","format":"uuid"},"next":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null}},"required":["id","type","stageId"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"type":{"type":"string","enum":["assign"]},"userId":{"type":"string","format":"uuid","nullable":true},"next":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null}},"required":["id","type","userId"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"type":{"type":"string","enum":["create_task"]},"title":{"type":"string","minLength":1,"maxLength":200},"dueInHours":{"type":"integer","minimum":0,"maximum":1440,"default":24},"next":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null}},"required":["id","type","title"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"type":{"type":"string","enum":["webhook"]},"url":{"type":"string","format":"uri","maxLength":500},"next":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null}},"required":["id","type","url"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"type":{"type":"string","enum":["add_to_group"]},"groupRowId":{"type":"string","format":"uuid"},"next":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null}},"required":["id","type","groupRowId"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"type":{"type":"string","enum":["wait"]},"amount":{"type":"integer","minimum":1,"maximum":8760},"unit":{"type":"string","enum":["minutes","hours","days"]},"next":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null}},"required":["id","type","amount","unit"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"type":{"type":"string","enum":["wait_friend"]},"maxDays":{"type":"integer","minimum":1,"maximum":60},"next":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null},"timeoutNext":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null}},"required":["id","type","maxDays"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"type":{"type":"string","enum":["wait_reply"]},"maxDays":{"type":"integer","minimum":1,"maximum":60},"next":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null},"timeoutNext":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null}},"required":["id","type","maxDays"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"type":{"type":"string","enum":["branch"]},"condition":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["replied"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["is_friend"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["has_label"]},"labelId":{"type":"string","format":"uuid"}},"required":["kind","labelId"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["field_equals"]},"key":{"type":"string","maxLength":40},"value":{"type":"string","maxLength":200}},"required":["kind","key","value"],"additionalProperties":false}]},"yes":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null},"no":{"type":"string","minLength":1,"maxLength":40,"nullable":true,"default":null}},"required":["id","type","condition"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"type":{"type":"string","enum":["end"]},"outcome":{"type":"string","enum":["success","failure"]},"labelId":{"type":"string","format":"uuid","nullable":true,"default":null}},"required":["id","type","outcome"],"additionalProperties":false}]}}},"required":["start","nodes"],"additionalProperties":false},"audience":{"type":"object","properties":{"segmentId":{"type":"string","format":"uuid","nullable":true,"default":null},"listIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]},"filter":{"type":"object","properties":{"search":{"type":"string","maxLength":100},"labelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"labelMode":{"type":"string","enum":["any","all"],"default":"any"},"excludeLabelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"stageIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"noStage":{"type":"boolean"},"ownerIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"sources":{"type":"array","items":{"type":"string","maxLength":40},"maxItems":20},"listIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20},"accountId":{"type":"string","format":"uuid"},"relations":{"type":"array","items":{"type":"string","enum":["stranger","request_sent","request_received","friend","blocked"]},"maxItems":5},"hasPhone":{"type":"boolean"},"hasZalo":{"type":"boolean"},"dnc":{"type":"string","enum":["exclude","only","include"],"default":"include"},"interactedWithinDays":{"type":"integer","minimum":1,"maximum":3650},"notInteractedDays":{"type":"integer","minimum":1,"maximum":3650}},"additionalProperties":false,"nullable":true,"default":null},"contactIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":5000,"default":[]},"excludeLabelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]},"allowOverlap":{"type":"boolean","default":false}},"additionalProperties":false},"senderAccountIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"distribution":{"type":"string","enum":["round_robin","quota","prefer_friend"]},"schedule":{"type":"object","properties":{"startAt":{"type":"string","format":"date-time","nullable":true,"default":null},"endAt":{"type":"string","format":"date-time","nullable":true,"default":null},"days":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6},"maxItems":7,"default":[]},"timeZone":{"type":"string","default":"Asia/Ho_Chi_Minh"},"repeatEveryDays":{"type":"integer","minimum":0,"maximum":90,"default":0}},"additionalProperties":false},"settings":{"type":"object","properties":{"stopKeywords":{"type":"array","items":{"type":"string","maxLength":40},"maxItems":30,"default":["dừng","stop","đừng nhắn","không quan tâm","huỷ","hủy"]},"groupRowIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":200,"default":[]},"postText":{"type":"string","maxLength":5000,"default":""},"postMediaIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":10,"default":[]},"mentionAll":{"type":"boolean","default":false},"testContactId":{"type":"string","format":"uuid","nullable":true,"default":null}},"additionalProperties":false}},"additionalProperties":false},"expectedVersion":{"type":"integer","minimum":1,"description":"The campaign `version` you read; a newer one answers conflict instead of overwriting."}},"required":["campaignId","patch"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.versions.list":{"post":{"operationId":"campaigns_versions_list","summary":"Phiên bản chiến dịch","description":"Step versions people are still running (editing steps of a campaign with people inside pins them to the old version), with how many are at each step.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.revisions.get":{"post":{"operationId":"campaigns_revisions_get","summary":"Xem một phiên bản chiến dịch","description":"The step graph of one campaign version: the current one, or an older version people are still running.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."},"version":{"type":"integer","minimum":1}},"required":["campaignId","version"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.enrollments.migrate":{"post":{"operationId":"campaigns_enrollments_migrate","summary":"Chuyển người sang phiên bản mới","description":"Move everyone on an old step version to the current steps with an explicit mapping old step id → new step id (null = stop them). Every step that has people must be mapped.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."},"fromVersion":{"type":"integer","minimum":1},"mapping":{"type":"object","additionalProperties":{"type":"string","maxLength":40,"nullable":true}},"expectedVersion":{"type":"integer","minimum":1}},"required":["campaignId","fromVersion","mapping"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.plan":{"post":{"operationId":"campaigns_plan","summary":"Kế hoạch chiến dịch","description":"Dry run of starting the campaign now: who would join, who is left out and why (do-not-contact, excluded label, already in, in another running campaign), how people split across sender accounts (friends, phone lookups needed), accounts that would make work wait, and when the first step runs in the campaign's time zone. Also returns the validation warnings. No side effects, nothing is sent.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."},"allowOverlap":{"type":"boolean"}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.validate":{"post":{"operationId":"campaigns_validate","summary":"Kiểm tra chiến dịch","description":"Check a campaign for problems (missing content, no senders, no rotation, invalid schedule). No side effects.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.audience.preview":{"post":{"operationId":"campaigns_audience_preview","summary":"Xem trước đối tượng","description":"Count and sample who the audience filter selects and who is excluded (do-not-contact, already enrolled). No side effects.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."},"audience":{"type":"object","properties":{"segmentId":{"type":"string","format":"uuid","nullable":true,"default":null},"listIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]},"filter":{"type":"object","properties":{"search":{"type":"string","maxLength":100},"labelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"labelMode":{"type":"string","enum":["any","all"],"default":"any"},"excludeLabelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"stageIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"noStage":{"type":"boolean"},"ownerIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50},"sources":{"type":"array","items":{"type":"string","maxLength":40},"maxItems":20},"listIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20},"accountId":{"type":"string","format":"uuid"},"relations":{"type":"array","items":{"type":"string","enum":["stranger","request_sent","request_received","friend","blocked"]},"maxItems":5},"hasPhone":{"type":"boolean"},"hasZalo":{"type":"boolean"},"dnc":{"type":"string","enum":["exclude","only","include"],"default":"include"},"interactedWithinDays":{"type":"integer","minimum":1,"maximum":3650},"notInteractedDays":{"type":"integer","minimum":1,"maximum":3650}},"additionalProperties":false,"nullable":true,"default":null},"contactIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":5000,"default":[]},"excludeLabelIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]},"allowOverlap":{"type":"boolean","default":false}},"additionalProperties":false}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.message.preview":{"post":{"operationId":"campaigns_message_preview","summary":"Xem trước tin","description":"Render a message template for one contact (variables and one spintax variant). No side effects.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."},"template":{"type":"string","maxLength":5000},"contactId":{"type":"string","format":"uuid","nullable":true,"default":null}},"required":["campaignId","template"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.test_send":{"post":{"operationId":"campaigns_test_send","summary":"Gửi thử (gửi thật)","description":"Run the campaign once for one test contact from one account. This REALLY sends on Zalo.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."},"contactId":{"type":"string","format":"uuid"},"accountId":{"type":"string","format":"uuid"}},"required":["campaignId","contactId","accountId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.start":{"post":{"operationId":"campaigns_start","summary":"Bật chiến dịch","description":"Start a campaign: enrolls its audience and lets the scheduler run it under each account's limits, even when the AI is offline.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."},"allowOverlap":{"type":"boolean","default":false}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.pause":{"post":{"operationId":"campaigns_pause","summary":"Tạm dừng chiến dịch","description":"Pause a running campaign.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.resume":{"post":{"operationId":"campaigns_resume","summary":"Tiếp tục chiến dịch","description":"Resume a paused campaign.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.archive":{"post":{"operationId":"campaigns_archive","summary":"Lưu trữ chiến dịch","description":"Archive a campaign.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.unarchive":{"post":{"operationId":"campaigns_unarchive","summary":"Bỏ lưu trữ chiến dịch","description":"Bring an archived campaign back as paused (or draft if it never started). People it stopped stay stopped.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.clone":{"post":{"operationId":"campaigns_clone","summary":"Nhân bản chiến dịch","description":"Duplicate a campaign as a new draft.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.delete":{"post":{"operationId":"campaigns_delete","summary":"Xoá chiến dịch","description":"Delete a campaign and its enrollments. Cannot be undone.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup","destructive"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.enroll":{"post":{"operationId":"campaigns_enroll","summary":"Đưa khách vào chiến dịch","description":"Add contacts to a campaign (do-not-contact contacts are skipped); allowOverlap lets contacts already in another campaign join.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."},"contactIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":5000},"allowOverlap":{"type":"boolean","default":false}},"required":["campaignId","contactIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.enrollment.stop":{"post":{"operationId":"campaigns_enrollment_stop","summary":"Dừng một người trong chiến dịch","description":"Stop one contact's journey in a campaign.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enrollmentId":{"type":"string","format":"uuid"}},"required":["enrollmentId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.enrollments.list":{"post":{"operationId":"campaigns_enrollments_list","summary":"Người trong chiến dịch","description":"List enrollments: current step, state, wait reason, outcome.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."},"state":{"type":"string","enum":["active","waiting","done","stopped","failed"]},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.stats.get":{"post":{"operationId":"campaigns_stats_get","summary":"Số liệu chiến dịch","description":"Funnel per step, replies, friend accepts, A/B variants, goal conversions.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/campaigns.occurrences.list":{"post":{"operationId":"campaigns_occurrences_list","summary":"Các lần đăng theo lịch","description":"Scheduled group posts of a campaign, newest planned first: planned time, group, result (queued/posted/unverified/failed/missed) and whether it was a late catch-up.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"string","format":"uuid","description":"Campaign id."},"status":{"type":"string","enum":["queued","posted","unverified","failed","missed"]},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/rules.list":{"post":{"operationId":"rules_list","summary":"Luật tự động","description":"List automation rules (When/If/Then) with enabled state and accounts.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/rules.get":{"post":{"operationId":"rules_get","summary":"Chi tiết luật","description":"One rule with trigger, conditions and ordered actions.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ruleId":{"type":"string","format":"uuid"}},"required":["ruleId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/rules.templates.list":{"post":{"operationId":"rules_templates_list","summary":"Mẫu luật có sẵn","description":"Built-in rule templates to start from.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/rules.runs.list":{"post":{"operationId":"rules_runs_list","summary":"Lịch sử chạy luật","description":"Recent runs of a rule (or all rules) with outcome and actions done.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ruleId":{"type":"string","format":"uuid"},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/rules.runs.get":{"post":{"operationId":"rules_runs_get","summary":"Chi tiết lần chạy luật","description":"One rule run: outcome, each action done, notes, and the rule version it executed.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"runId":{"type":"string","pattern":"^\\d+$","description":"Run id from rules_runs_list."}},"required":["runId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/rules.revisions.list":{"post":{"operationId":"rules_revisions_list","summary":"Phiên bản luật","description":"Saved versions of a rule, newest first, each with the full rule as saved.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ruleId":{"type":"string","format":"uuid"},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"required":["ruleId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/rules.validate":{"post":{"operationId":"rules_validate","summary":"Kiểm tra luật","description":"Validate a rule definition without saving it.","tags":["Thiết lập tự chạy"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rule":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"enabled":{"type":"boolean","default":true},"accountIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50,"default":[]},"trigger":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["message_in"]},"keywords":{"type":"array","items":{"type":"string","minLength":1,"maxLength":60},"maxItems":30,"default":[]},"match":{"type":"string","enum":["any","all","regex"],"default":"any"},"regex":{"type":"string","maxLength":200,"nullable":true,"default":null}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["first_message"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["friend_accepted"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["friend_request"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["outside_hours"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["silent"]},"days":{"type":"integer","minimum":1,"maximum":90}},"required":["kind","days"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["stage_changed"]},"stageId":{"type":"string","format":"uuid","nullable":true,"default":null}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["label_added"]},"labelId":{"type":"string","format":"uuid","nullable":true,"default":null}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["task_overdue"]}},"required":["kind"],"additionalProperties":false}]},"conditions":{"type":"object","properties":{"labelsAny":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]},"labelsNone":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]},"stageIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]},"threadType":{"type":"string","enum":["any","user","group"],"default":"user"},"groupWithoutMention":{"type":"boolean","default":false},"hours":{"type":"object","properties":{"start":{"type":"string","pattern":"^\\d{2}:\\d{2}$"},"end":{"type":"string","pattern":"^\\d{2}:\\d{2}$"}},"required":["start","end"],"additionalProperties":false,"nullable":true,"default":null},"field":{"type":"object","properties":{"key":{"type":"string","maxLength":40},"value":{"type":"string","maxLength":200}},"required":["key","value"],"additionalProperties":false,"nullable":true,"default":null}},"additionalProperties":false,"default":{}},"actions":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["send_template"]},"text":{"type":"string","minLength":1,"maxLength":2000},"mediaIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":5,"default":[]}},"required":["type","text"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["add_label"]},"labelId":{"type":"string","format":"uuid"}},"required":["type","labelId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["remove_label"]},"labelId":{"type":"string","format":"uuid"}},"required":["type","labelId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["set_stage"]},"stageId":{"type":"string","format":"uuid"}},"required":["type","stageId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["assign"]},"userId":{"type":"string","format":"uuid","nullable":true},"roundRobin":{"type":"boolean","default":false}},"required":["type","userId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["create_task"]},"title":{"type":"string","minLength":1,"maxLength":200},"dueInHours":{"type":"integer","minimum":0,"maximum":1440,"default":24}},"required":["type","title"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["accept_friend"]}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["enroll_campaign"]},"campaignId":{"type":"string","format":"uuid"}},"required":["type","campaignId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["webhook"]},"url":{"type":"string","format":"uri","maxLength":500}},"required":["type","url"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["notify"]},"target":{"type":"string","enum":["assignee","admins","everyone"],"default":"assignee"},"text":{"type":"string","maxLength":300,"default":""}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["mark_dnc"]}},"required":["type"],"additionalProperties":false}]},"minItems":1,"maxItems":10},"priority":{"type":"integer","minimum":0,"maximum":1000,"default":100},"templateKey":{"type":"string","maxLength":40,"nullable":true,"default":null}},"required":["name","trigger","actions"],"additionalProperties":false}},"required":["rule"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/rules.create":{"post":{"operationId":"rules_create","summary":"Tạo luật","description":"Create an automation rule: trigger, conditions (labels, stage, hours, fields, group/@mention) and ordered actions.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rule":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"enabled":{"type":"boolean","default":true},"accountIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50,"default":[]},"trigger":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["message_in"]},"keywords":{"type":"array","items":{"type":"string","minLength":1,"maxLength":60},"maxItems":30,"default":[]},"match":{"type":"string","enum":["any","all","regex"],"default":"any"},"regex":{"type":"string","maxLength":200,"nullable":true,"default":null}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["first_message"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["friend_accepted"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["friend_request"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["outside_hours"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["silent"]},"days":{"type":"integer","minimum":1,"maximum":90}},"required":["kind","days"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["stage_changed"]},"stageId":{"type":"string","format":"uuid","nullable":true,"default":null}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["label_added"]},"labelId":{"type":"string","format":"uuid","nullable":true,"default":null}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["task_overdue"]}},"required":["kind"],"additionalProperties":false}]},"conditions":{"type":"object","properties":{"labelsAny":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]},"labelsNone":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]},"stageIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]},"threadType":{"type":"string","enum":["any","user","group"],"default":"user"},"groupWithoutMention":{"type":"boolean","default":false},"hours":{"type":"object","properties":{"start":{"type":"string","pattern":"^\\d{2}:\\d{2}$"},"end":{"type":"string","pattern":"^\\d{2}:\\d{2}$"}},"required":["start","end"],"additionalProperties":false,"nullable":true,"default":null},"field":{"type":"object","properties":{"key":{"type":"string","maxLength":40},"value":{"type":"string","maxLength":200}},"required":["key","value"],"additionalProperties":false,"nullable":true,"default":null}},"additionalProperties":false,"default":{}},"actions":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["send_template"]},"text":{"type":"string","minLength":1,"maxLength":2000},"mediaIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":5,"default":[]}},"required":["type","text"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["add_label"]},"labelId":{"type":"string","format":"uuid"}},"required":["type","labelId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["remove_label"]},"labelId":{"type":"string","format":"uuid"}},"required":["type","labelId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["set_stage"]},"stageId":{"type":"string","format":"uuid"}},"required":["type","stageId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["assign"]},"userId":{"type":"string","format":"uuid","nullable":true},"roundRobin":{"type":"boolean","default":false}},"required":["type","userId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["create_task"]},"title":{"type":"string","minLength":1,"maxLength":200},"dueInHours":{"type":"integer","minimum":0,"maximum":1440,"default":24}},"required":["type","title"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["accept_friend"]}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["enroll_campaign"]},"campaignId":{"type":"string","format":"uuid"}},"required":["type","campaignId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["webhook"]},"url":{"type":"string","format":"uri","maxLength":500}},"required":["type","url"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["notify"]},"target":{"type":"string","enum":["assignee","admins","everyone"],"default":"assignee"},"text":{"type":"string","maxLength":300,"default":""}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["mark_dnc"]}},"required":["type"],"additionalProperties":false}]},"minItems":1,"maxItems":10},"priority":{"type":"integer","minimum":0,"maximum":1000,"default":100},"templateKey":{"type":"string","maxLength":40,"nullable":true,"default":null}},"required":["name","trigger","actions"],"additionalProperties":false}},"required":["rule"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"admin"}},"/api/public/v2/ops/rules.update":{"post":{"operationId":"rules_update","summary":"Sửa luật","description":"Replace a rule's definition.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ruleId":{"type":"string","format":"uuid"},"rule":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"enabled":{"type":"boolean","default":true},"accountIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50,"default":[]},"trigger":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["message_in"]},"keywords":{"type":"array","items":{"type":"string","minLength":1,"maxLength":60},"maxItems":30,"default":[]},"match":{"type":"string","enum":["any","all","regex"],"default":"any"},"regex":{"type":"string","maxLength":200,"nullable":true,"default":null}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["first_message"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["friend_accepted"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["friend_request"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["outside_hours"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["silent"]},"days":{"type":"integer","minimum":1,"maximum":90}},"required":["kind","days"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["stage_changed"]},"stageId":{"type":"string","format":"uuid","nullable":true,"default":null}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["label_added"]},"labelId":{"type":"string","format":"uuid","nullable":true,"default":null}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["task_overdue"]}},"required":["kind"],"additionalProperties":false}]},"conditions":{"type":"object","properties":{"labelsAny":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]},"labelsNone":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]},"stageIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":20,"default":[]},"threadType":{"type":"string","enum":["any","user","group"],"default":"user"},"groupWithoutMention":{"type":"boolean","default":false},"hours":{"type":"object","properties":{"start":{"type":"string","pattern":"^\\d{2}:\\d{2}$"},"end":{"type":"string","pattern":"^\\d{2}:\\d{2}$"}},"required":["start","end"],"additionalProperties":false,"nullable":true,"default":null},"field":{"type":"object","properties":{"key":{"type":"string","maxLength":40},"value":{"type":"string","maxLength":200}},"required":["key","value"],"additionalProperties":false,"nullable":true,"default":null}},"additionalProperties":false,"default":{}},"actions":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["send_template"]},"text":{"type":"string","minLength":1,"maxLength":2000},"mediaIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":5,"default":[]}},"required":["type","text"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["add_label"]},"labelId":{"type":"string","format":"uuid"}},"required":["type","labelId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["remove_label"]},"labelId":{"type":"string","format":"uuid"}},"required":["type","labelId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["set_stage"]},"stageId":{"type":"string","format":"uuid"}},"required":["type","stageId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["assign"]},"userId":{"type":"string","format":"uuid","nullable":true},"roundRobin":{"type":"boolean","default":false}},"required":["type","userId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["create_task"]},"title":{"type":"string","minLength":1,"maxLength":200},"dueInHours":{"type":"integer","minimum":0,"maximum":1440,"default":24}},"required":["type","title"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["accept_friend"]}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["enroll_campaign"]},"campaignId":{"type":"string","format":"uuid"}},"required":["type","campaignId"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["webhook"]},"url":{"type":"string","format":"uri","maxLength":500}},"required":["type","url"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["notify"]},"target":{"type":"string","enum":["assignee","admins","everyone"],"default":"assignee"},"text":{"type":"string","maxLength":300,"default":""}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["mark_dnc"]}},"required":["type"],"additionalProperties":false}]},"minItems":1,"maxItems":10},"priority":{"type":"integer","minimum":0,"maximum":1000,"default":100},"templateKey":{"type":"string","maxLength":40,"nullable":true,"default":null}},"required":["name","trigger","actions"],"additionalProperties":false},"expectedVersion":{"type":"integer","minimum":1,"description":"The rule `version` you read; a newer one answers conflict."}},"required":["ruleId","rule"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"admin"}},"/api/public/v2/ops/rules.enable":{"post":{"operationId":"rules_enable","summary":"Bật luật","description":"Enable a rule.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ruleId":{"type":"string","format":"uuid"}},"required":["ruleId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"admin"}},"/api/public/v2/ops/rules.disable":{"post":{"operationId":"rules_disable","summary":"Tắt luật","description":"Disable a rule.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ruleId":{"type":"string","format":"uuid"}},"required":["ruleId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"admin"}},"/api/public/v2/ops/rules.from_template":{"post":{"operationId":"rules_from_template","summary":"Tạo luật từ mẫu","description":"Create and enable a rule from a built-in template for some accounts.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","maxLength":40},"accountIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":50,"default":[]}},"required":["key"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup"],"x-min-role":"admin"}},"/api/public/v2/ops/rules.delete":{"post":{"operationId":"rules_delete","summary":"Xoá luật","description":"Delete a rule. Cannot be undone.","tags":["Thiết lập tự chạy"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ruleId":{"type":"string","format":"uuid"}},"required":["ruleId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","setup","destructive"],"x-min-role":"admin"}},"/api/public/v2/ops/operations.get":{"post":{"operationId":"operations_get","summary":"Trạng thái lệnh","description":"Read one command sent by this connection: status (accepted/queued/waiting+reason/running/succeeded/failed/cancelled/unverified), linked job/message and result.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operationId":{"type":"string","format":"uuid"}},"required":["operationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/operations.wait":{"post":{"operationId":"operations_wait","summary":"Chờ kết quả lệnh","description":"Wait up to `seconds` (max 20) until a command finishes, then return its status. Use after inbox_message_send for the Zalo result.","tags":["Quan sát"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operationId":{"type":"string","format":"uuid"},"seconds":{"type":"integer","minimum":1,"maximum":20,"default":15}},"required":["operationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/operations.list":{"post":{"operationId":"operations_list","summary":"Lệnh gần đây","description":"This connection's recent commands, newest first, filterable by status or operation.","tags":["Theo dõi & sự kiện"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","maxLength":20},"operation":{"type":"string","maxLength":80},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/operations.cancel":{"post":{"operationId":"operations_cancel","summary":"Huỷ lệnh","description":"Cancel a command's queued job — or every unfinished item of a bulk command (a running one stops after the machine confirms; sent messages cannot be unsent).","tags":["Theo dõi & sự kiện"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operationId":{"type":"string","format":"uuid"}},"required":["operationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/jobs.list":{"post":{"operationId":"jobs_list","summary":"Việc đang chạy / chờ","description":"List Zalo jobs of the caller's accounts by status with wait reasons (limits, schedule, pacing, Zalo restriction, machine offline…).","tags":["Theo dõi & sự kiện"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["queued","leased","cancel_requested","succeeded","failed","unverified","expired","cancelled","dead"]},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/jobs.get":{"post":{"operationId":"jobs_get","summary":"Chi tiết việc","description":"One job with progress, result and error.","tags":["Theo dõi & sự kiện"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string","format":"uuid"}},"required":["jobId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/jobs.cancel":{"post":{"operationId":"jobs_cancel","summary":"Huỷ việc","description":"Cancel a queued job, or request a running one to stop.","tags":["Theo dõi & sự kiện"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string","format":"uuid"}},"required":["jobId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","message"],"x-min-role":"member"}},"/api/public/v2/ops/jobs.retry":{"post":{"operationId":"jobs_retry","summary":"Thử lại việc lỗi","description":"Queue a failed, expired or cancelled Zalo job again as a new job with the same work (never an unverified one; a conversation send is retried with inbox_message_retry to keep its place in line). Returns the new job id.","tags":["Theo dõi & sự kiện"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jobId":{"type":"string","format":"uuid"}},"required":["jobId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/bulk.get":{"post":{"operationId":"bulk_get","summary":"Kết quả lệnh hàng loạt","description":"Progress and per-item results of a bulk command (each item = one queued Zalo job: status, error). Filter by item status; page with next_cursor.","tags":["Theo dõi & sự kiện"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operationId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["queued","waiting","running","succeeded","failed","cancelled","unverified"]},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"required":["operationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/bulk.retry_failed":{"post":{"operationId":"bulk_retry_failed","summary":"Thử lại mục lỗi","description":"Queue again the failed / expired items of a bulk command as a new bulk command (never unverified ones; conversation sends are retried with inbox_message_retry). Returns the new operationId.","tags":["Theo dõi & sự kiện"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operationId":{"type":"string","format":"uuid"}},"required":["operationId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"202":{"description":"Accepted; poll operations.wait"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","zalo"],"x-min-role":"member"}},"/api/public/v2/ops/events.list":{"post":{"operationId":"events_list","summary":"Sự kiện","description":"Everything that happened in the workspace since a cursor, in order, kept 7 days: messages (received, sent, status, reactions, recalls), command/job results, account/policy/Zalo-wait changes, friends and groups, customers, campaigns and journeys, rule runs, assignments, tasks, connections. Filter by types (e.g. message.received) or one account. Keep the returned cursor for the next call: events come in the order they were committed, as soon as they are committed, and a cursor never skips one (seq is the position, eventId the stable id to de-duplicate). Webhooks push the same events.","tags":["Theo dõi & sự kiện"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"after":{"type":"integer","minimum":0,"default":0},"types":{"type":"array","items":{"type":"string","maxLength":60},"maxItems":30},"accountId":{"type":"string","format":"uuid"},"limit":{"type":"integer","minimum":1,"maximum":200,"default":100}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/webhooks.list":{"post":{"operationId":"webhooks_list","summary":"Webhook","description":"List webhook endpoints with events, enabled state and failure counts.","tags":["Theo dõi & sự kiện"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/webhooks.get":{"post":{"operationId":"webhooks_get","summary":"Chi tiết webhook","description":"One webhook endpoint (events, enabled, failures, last success/failure) — never its secret.","tags":["Theo dõi & sự kiện"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/webhooks.create":{"post":{"operationId":"webhooks_create","summary":"Tạo webhook","description":"Create a signed webhook for chosen events. Returns the signing secret once.","tags":["Theo dõi & sự kiện"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","maxLength":500},"events":{"type":"array","items":{"type":"string","enum":["message.received","message.sent","message.status_changed","message.reaction","message.recalled","operation.completed","job.failed","job.cancelled","job.unverified","bulk.completed","account.session_changed","account.policy_changed","account.wait_state_changed","account.sync_completed","friend.accepted","friend.request_received","friend.removed","group.joined","group.left","group.member_joined","group.member_left","group.pending_request","contact.created","contact.stage_changed","contact.updated","contact.dnc_changed","contact.deleted","campaign.started","campaign.paused","campaign.resumed","campaign.completed","campaign.enrollment_step","campaign.enrollment_completed","campaign.enrollment_stopped","campaign.occurrence","rule.run_completed","rule.run_failed","conversation.assigned","conversation.unanswered","task.due","task.completed","connection.paused","connection.revoked","external.emergency_stop_changed"]},"minItems":1},"includeContent":{"type":"boolean","default":true,"description":"false = message words are left out of the payload (ids only)."}},"required":["url","events"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/webhooks.update":{"post":{"operationId":"webhooks_update","summary":"Sửa webhook","description":"Change a webhook's URL, events or enabled state.","tags":["Theo dõi & sự kiện"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri","maxLength":500},"events":{"type":"array","items":{"type":"string","enum":["message.received","message.sent","message.status_changed","message.reaction","message.recalled","operation.completed","job.failed","job.cancelled","job.unverified","bulk.completed","account.session_changed","account.policy_changed","account.wait_state_changed","account.sync_completed","friend.accepted","friend.request_received","friend.removed","group.joined","group.left","group.member_joined","group.member_left","group.pending_request","contact.created","contact.stage_changed","contact.updated","contact.dnc_changed","contact.deleted","campaign.started","campaign.paused","campaign.resumed","campaign.completed","campaign.enrollment_step","campaign.enrollment_completed","campaign.enrollment_stopped","campaign.occurrence","rule.run_completed","rule.run_failed","conversation.assigned","conversation.unanswered","task.due","task.completed","connection.paused","connection.revoked","external.emergency_stop_changed"]},"minItems":1},"enabled":{"type":"boolean"},"includeContent":{"type":"boolean"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/webhooks.replay":{"post":{"operationId":"webhooks_replay","summary":"Phát lại webhook","description":"Send again every recorded event of a time range (within the 7-day keep) that this webhook subscribes to, with the same event ids. dryRun=true only counts them.","tags":["Theo dõi & sự kiện"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"},"dryRun":{"type":"boolean","default":false}},"required":["id","from","to"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/webhooks.rotate_secret":{"post":{"operationId":"webhooks_rotate_secret","summary":"Đổi khoá ký webhook","description":"Rotate a webhook's signing secret; the new secret is returned once.","tags":["Theo dõi & sự kiện"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/webhooks.test":{"post":{"operationId":"webhooks_test","summary":"Gửi thử webhook","description":"Send a test event to a webhook.","tags":["Theo dõi & sự kiện"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/webhooks.delete":{"post":{"operationId":"webhooks_delete","summary":"Xoá webhook","description":"Delete a webhook endpoint.","tags":["Theo dõi & sự kiện"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin","destructive"],"x-min-role":"admin"}},"/api/public/v2/ops/webhooks.deliveries.list":{"post":{"operationId":"webhooks_deliveries_list","summary":"Lần gửi webhook","description":"Recent deliveries with status, attempts and response code.","tags":["Theo dõi & sự kiện"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"endpointId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["pending","success","failed","dead"]},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/webhooks.deliveries.redeliver":{"post":{"operationId":"webhooks_deliveries_redeliver","summary":"Gửi lại webhook","description":"Re-send one delivery now.","tags":["Theo dõi & sự kiện"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"deliveryId":{"type":"string","format":"uuid"}},"required":["deliveryId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/integrations.keys.list":{"post":{"operationId":"integrations_keys_list","summary":"Khoá API","description":"API keys (name, prefix, version, permissions, last use) — never the secret. Keys are created/revoked only on the web.","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/integrations.connections.list":{"post":{"operationId":"integrations_connections_list","summary":"Kết nối AI","description":"AI connections of the workspace (app, user, scope, status, last use).","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/notifications.list":{"post":{"operationId":"notifications_list","summary":"Thông báo của tôi","description":"The calling user's notifications, newest first.","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"unreadOnly":{"type":"boolean","default":false},"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/notifications.mark_read":{"post":{"operationId":"notifications_mark_read","summary":"Đánh dấu thông báo đã đọc","description":"Mark some or all notifications read.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"anyOf":[{"type":"string","enum":["all"]},{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":500}]}},"required":["ids"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/notifications.preferences.get":{"post":{"operationId":"notifications_preferences_get","summary":"Tuỳ chọn thông báo","description":"Which notification types reach which channels for the caller.","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/notifications.preferences.set":{"post":{"operationId":"notifications_preferences_set","summary":"Sửa tuỳ chọn thông báo","description":"Change the caller's notification preferences.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","additionalProperties":{}}},"required":["prefs"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/members.list":{"post":{"operationId":"members_list","summary":"Thành viên","description":"Workspace members with role and assigned Zalo accounts.","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/invites.list":{"post":{"operationId":"invites_list","summary":"Lời mời thành viên","description":"Pending member invitations.","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/invites.create":{"post":{"operationId":"invites_create","summary":"Mời thành viên","description":"Invite a person by email with a role and the Zalo accounts they may use.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"role":{"type":"string","enum":["admin","member"]},"accountIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":200,"default":[]}},"required":["email","role"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/invites.revoke":{"post":{"operationId":"invites_revoke","summary":"Huỷ lời mời","description":"Revoke a pending invitation.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"inviteId":{"type":"string","format":"uuid"}},"required":["inviteId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/members.role.set":{"post":{"operationId":"members_role_set","summary":"Đổi vai trò","description":"Make a member admin or member (the owner cannot be changed here).","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"memberId":{"type":"string","format":"uuid"},"role":{"type":"string","enum":["admin","member"]}},"required":["memberId","role"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/members.account_access.set":{"post":{"operationId":"members_account_access_set","summary":"Giao tài khoản Zalo cho thành viên","description":"Set which Zalo accounts a member may use.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"},"accountIds":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":500}},"required":["userId","accountIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/members.remove":{"post":{"operationId":"members_remove","summary":"Xoá thành viên","description":"Remove a member from the workspace (their AI connections are revoked).","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"memberId":{"type":"string","format":"uuid"}},"required":["memberId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin","destructive"],"x-min-role":"admin"}},"/api/public/v2/ops/billing.usage.get":{"post":{"operationId":"billing_usage_get","summary":"Gói và mức dùng","description":"Current plan, expiry, limits and usage (accounts, machines, contacts, sends).","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/billing.plans.list":{"post":{"operationId":"billing_plans_list","summary":"Bảng gói","description":"Public plans and their limits (prices may show 'Liên hệ').","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read"],"x-min-role":"member"}},"/api/public/v2/ops/billing.invoices.list":{"post":{"operationId":"billing_invoices_list","summary":"Hoá đơn","description":"Invoices with status and VietQR payment info.","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cursor":{"type":"string","maxLength":200,"nullable":true,"default":null},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/billing.invoices.get":{"post":{"operationId":"billing_invoices_get","summary":"Chi tiết hoá đơn","description":"One invoice with status, amount and VietQR payment info.","tags":["Quản trị workspace"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"invoiceId":{"type":"string","format":"uuid"}},"required":["invoiceId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}},"/api/public/v2/ops/billing.invoice.create":{"post":{"operationId":"billing_invoice_create","summary":"Tạo hoá đơn nâng / gia hạn gói","description":"Create an upgrade/renewal invoice (a person pays by bank transfer). Confirmation required.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}},{"name":"X-Confirm-Token","in":"header","required":false,"schema":{"type":"string"},"description":"Token from the 428 confirmation_required answer."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"planKey":{"type":"string","minLength":2,"maxLength":40},"period":{"type":"string","enum":["month","year"]}},"required":["planKey","period"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"428":{"description":"confirmation_required — repeat with X-Confirm-Token"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin","destructive"],"x-min-role":"admin"}},"/api/public/v2/ops/billing.invoice.cancel":{"post":{"operationId":"billing_invoice_cancel","summary":"Huỷ hoá đơn chờ","description":"Cancel a pending invoice.","tags":["Quản trị workspace"],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"invoiceId":{"type":"string","format":"uuid"}},"required":["invoiceId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done"},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","invalid_input","idempotency_required","idempotency_conflict","confirmation_required","confirmation_invalid","rate_limited","external_paused","connection_paused","plan_required","not_supported","conflict","rejected","internal"]},"message":{"type":"string"},"details":{}},"required":["code","message"]}}}}}}},"x-permissions":["read","admin"],"x-min-role":"admin"}}}}