# Root of the OpenAPI description. This file is an index: every path item
# and every schema lives in paths/ or components/ and is referenced from
# here, so a change to one group touches one small file instead of a
# 3000-line document.
#
# Refs from a path file must point at ../components/schemas.yml directly.
# Routing them back through this file adds a second hop that Swagger UI's
# resolver does not follow, and the failure is a silent unresolved schema.

openapi: 3.0.3
info:
  title: WA Gateway
  description: '# WA Gateway — WhatsApp REST API Gateway


    Multi-user, multi-device REST API gateway for WhatsApp based on [whatsmeow](https://github.com/tulir/whatsmeow).


    ## Authentication


    **User endpoints:** Header `token: <user_token>` (matches tokens in users DB table)


    **Admin endpoints:** Header `Authorization: Bearer <admin_token>` (set via `WA_ADMIN_TOKEN` env var)


    ## Quick Start


    1. **Create a user** — `POST /admin/users`

    2. **Connect to WhatsApp** — `POST /session/connect` (returns QR code for first-time pairing)

    3. **Send a message** — `POST /chat/send/text`

    4. **Receive messages** — Configure a webhook via `POST /webhook`


    ## Infrastructure


    PostgreSQL is the only durable engine, in production and in development alike: there is no

    second engine and no embedded `dbdata/users.db` file. Everything else is optional and degrades

    without taking the process down.


    | Component | Production | Development |

    |-----------|-----------|-------------|

    | Database | PostgreSQL (6 databases: app, history, store, inbox, lease, history-op — the last one optional, off by default) | PostgreSQL, from `deploy/dev/docker-compose.yml` |

    | Session Claims | Redis | Redis, from the same compose (single-pod works without it) |

    | Message Queue | RabbitMQ | RabbitMQ, from the same compose (`RABBITMQ_ENABLED=true` in `.env.example`) |

    | Media Storage | S3 | MinIO, from the same compose |

    | Media Offload | AWS Lambda | Disabled — the local path does the work |


    [Full Architecture Reference](../../docs/ARCHITECTURE.md)

    |

    [Environment Variables Reference](../../AGENTS.md#variables-de-entorno-no-obvias)


    ## Phone Number Format


    International format without the `+` prefix. Example: `5491155553934` for Argentina.

    For groups, use the group JID: `120363312246943103@g.us`.


    ## Errors every endpoint can return


    Both come back as the same JSON envelope, under `Content-Type: application/json`.


    **`413`** — the request body declares more than the surface allows (10 MiB on the user API,

    smaller on some admin routes). The error names the limit. A client that understates its

    `Content-Length` is cut off mid-read instead and gets the handler''s own `400`.


    **`429`** — a rate limiter refused the request. The response carries a `Retry-After` header

    in whole seconds; honour it rather than retrying immediately.

    '
  version: 4.0.0
servers:
- url: /
  description: Current host
tags:
- name: System
  description: Health, metrics, dashboard
- name: Admin
  description: User management (requires admin token)
- name: Session
  description: Connect, disconnect, QR, pair, config
- name: Chat
  description: Send messages, download media, chat actions
- name: Groups
  description: Group management
- name: Community
  description: WhatsApp Communities
- name: User
  description: User info, presence, contacts
- name: Webhook
  description: Webhook configuration
- name: Labels
  description: WhatsApp label management
- name: Status/Call
  description: Status and call management
- name: Newsletter
  description: Newsletter subscriptions
- name: Voice
  description: 'WhatsApp calls bridged to a SIP softphone. Both directions work: an incoming
    WhatsApp call rings the softphone for that number, and you can place a call from the softphone
    — or from here. Requires the bridge to be enabled (WA_VOICE_ENABLED); without it these
    endpoints respond 503.'
- name: Passkey
  description: WebAuthn ceremony some accounts require after scanning the QR. Authenticates with
    the ceremony token in the path, not the session token, and responds with bare JSON.
- name: Dev Bench
  description: 'Test bench behind WA_ENABLE_DEV_BENCH: publishes REAL messages to the outbound
    queue, receives webhooks, and streams live events to the /dashboard/dev-bench.html panel.'
paths:
  /health:
    $ref: ./paths/system.yml#/health
  /health/ready:
    $ref: ./paths/system.yml#/health_ready
  /metrics:
    $ref: ./paths/system.yml#/metrics
  /admin/drain:
    $ref: ./paths/admin.yml#/admin_drain
  /admin/recharge:
    $ref: ./paths/admin.yml#/admin_recharge
  /admin/recharge/cancel:
    $ref: ./paths/admin.yml#/admin_recharge_cancel
  /admin/tools/bench:
    $ref: ./paths/admin.yml#/admin_tools_bench
  /admin/tools/bench/cancel:
    $ref: ./paths/admin.yml#/admin_tools_bench_cancel
  /admin/test-consumer:
    $ref: ./paths/admin.yml#/admin_test_consumer
  /admin/test-consumer/{console}/start:
    $ref: ./paths/admin.yml#/admin_test_consumer_start
  /admin/test-consumer/{console}/stop:
    $ref: ./paths/admin.yml#/admin_test_consumer_stop
  /admin/restart-sessions:
    $ref: ./paths/admin.yml#/admin_restart_sessions
  /admin/restart-sessions/cancel:
    $ref: ./paths/admin.yml#/admin_restart_sessions_cancel
  /admin/pods:
    $ref: ./paths/admin.yml#/admin_pods
  /admin/campaigns:
    $ref: ./paths/campaign.yml#/admin_campaigns
  /admin/warmup:
    $ref: ./paths/admin.yml#/admin_warmup
  /admin/warmup/{id}/resume:
    $ref: ./paths/admin.yml#/admin_warmup_resume
  /campaign:
    $ref: ./paths/campaign.yml#/campaign_create
  /campaigns:
    $ref: ./paths/campaign.yml#/campaigns_list
  /campaign/{id}:
    $ref: ./paths/campaign.yml#/campaign_get
  /campaign/{id}/pause:
    $ref: ./paths/campaign.yml#/campaign_pause
  /campaign/{id}/resume:
    $ref: ./paths/campaign.yml#/campaign_resume
  /campaign/{id}/cancel:
    $ref: ./paths/campaign.yml#/campaign_cancel
  /admin/proxies:
    $ref: ./paths/admin.yml#/admin_proxies
  /admin/proxies/{id}:
    $ref: ./paths/admin.yml#/admin_proxies_id
  /admin/inbox/dead/peek:
    $ref: ./paths/admin.yml#/admin_inbox_dead_peek
  /admin/inbox/dead/replay:
    $ref: ./paths/admin.yml#/admin_inbox_dead_replay
  /admin/inbox/dead/stats:
    $ref: ./paths/admin.yml#/admin_inbox_dead_stats
  /admin/queues:
    $ref: ./paths/admin.yml#/admin_queues
  /admin/queues/peek:
    $ref: ./paths/admin.yml#/admin_queues_peek
  /admin/queues/purge:
    $ref: ./paths/admin.yml#/admin_queues_purge
  /admin/queues/drain:
    $ref: ./paths/admin.yml#/admin_queues_drain
  /admin/queues/dlq/peek:
    $ref: ./paths/admin.yml#/admin_queues_dlq_peek
  /admin/queues/dlq/replay:
    $ref: ./paths/admin.yml#/admin_queues_dlq_replay
  /admin/queues/dlq/stats:
    $ref: ./paths/admin.yml#/admin_queues_dlq_stats
  /admin/sessions/cpu:
    $ref: ./paths/admin.yml#/admin_sessions_cpu
  /admin/sessions/stats:
    $ref: ./paths/admin.yml#/admin_sessions_stats
  /admin/sessions/all:
    $ref: ./paths/admin.yml#/admin_sessions_all
  /admin/infra:
    $ref: ./paths/admin.yml#/admin_infra
  /admin/db/slow-queries:
    $ref: ./paths/admin.yml#/admin_db_slow_queries
  /admin/redis/orphans:
    $ref: ./paths/admin.yml#/admin_redis_orphans
  /admin/redis/purge:
    $ref: ./paths/admin.yml#/admin_redis_purge
  /admin/config:
    $ref: ./paths/admin.yml#/admin_config
  /admin/config/local:
    $ref: ./paths/admin.yml#/admin_config_local
  /admin/machine:
    $ref: ./paths/admin.yml#/admin_machine
  /admin/logs:
    $ref: ./paths/admin.yml#/admin_logs
  /admin/logs/stream:
    $ref: ./paths/admin.yml#/admin_logs_stream
  /admin/logs/external:
    $ref: ./paths/admin.yml#/admin_logs_external
  /admin/logs/external/{service}:
    $ref: ./paths/admin.yml#/admin_logs_external_service
  /admin/logs/external/{service}/stream:
    $ref: ./paths/admin.yml#/admin_logs_external_service_stream
  /admin/ops/restart:
    $ref: ./paths/admin.yml#/admin_ops_restart
  /admin/ops/restart/{service}:
    $ref: ./paths/admin.yml#/admin_ops_restart_service
  /admin/ops/voice:
    $ref: ./paths/admin.yml#/admin_ops_voice
  /admin/errors:
    $ref: ./paths/admin.yml#/admin_errors
  /admin/suggestions:
    $ref: ./paths/admin.yml#/admin_suggestions
  /admin/sessions/{id}/diagnose:
    $ref: ./paths/admin.yml#/admin_sessions_id_diagnose
  /admin/sessions/{id}/health:
    $ref: ./paths/admin.yml#/admin_sessions_id_health
  /admin/sessions/{id}/health/history:
    $ref: ./paths/admin.yml#/admin_sessions_id_health_history
  /admin/sessions/{id}/timelock/refresh:
    $ref: ./paths/admin.yml#/admin_sessions_id_timelock_refresh
  /admin/sessions/{id}/messagecap/refresh:
    $ref: ./paths/admin.yml#/admin_sessions_id_messagecap_refresh
  /admin/sessions/{id}/sip-account:
    $ref: ./paths/admin.yml#/admin_sessions_id_sip_account
  /admin/sessions/{id}/sip-password:
    $ref: ./paths/admin.yml#/admin_sessions_id_sip_password
  /admin/sessions/{id}/sip-site:
    $ref: ./paths/admin.yml#/admin_sessions_id_sip_site
  /admin/users:
    $ref: ./paths/admin.yml#/admin_users
  /admin/users/{id}:
    $ref: ./paths/admin.yml#/admin_users_id
  /admin/users/{id}/full:
    $ref: ./paths/admin.yml#/admin_users_id_full
  /admin/users/{id}/contacts/{jid}:
    $ref: ./paths/admin.yml#/admin_users_id_contacts_jid
  /admin/users/{id}/suspend:
    $ref: ./paths/admin.yml#/admin_users_id_suspend
  /admin/users/{id}/unsuspend:
    $ref: ./paths/admin.yml#/admin_users_id_unsuspend
  /admin/users/{id}/appstate/recover:
    $ref: ./paths/admin.yml#/admin_users_id_appstate_recover
  /admin/users/{id}/config:
    $ref: ./paths/admin.yml#/admin_users_id_config
  /admin/users/{id}/connect:
    $ref: ./paths/admin.yml#/admin_users_id_connect
  /admin/users/{id}/disconnect:
    $ref: ./paths/admin.yml#/admin_users_id_disconnect
  /admin/users/{id}/send/{type}:
    $ref: ./paths/admin.yml#/admin_users_id_send
  /admin/users/{id}/user/info:
    $ref: ./paths/admin.yml#/admin_users_id_user_info
  /admin/users/{id}/user/avatar:
    $ref: ./paths/admin.yml#/admin_users_id_user_avatar
  /admin/users/{id}/group/create:
    $ref: ./paths/admin.yml#/admin_users_id_group_create
  /admin/users/{id}/group/join:
    $ref: ./paths/admin.yml#/admin_users_id_group_join
  /admin/users/{id}/group/inviteinfo:
    $ref: ./paths/admin.yml#/admin_users_id_group_inviteinfo
  /admin/users/{id}/settings:
    $ref: ./paths/admin.yml#/admin_users_id_settings
  /admin/users/{id}/aivoice/config:
    $ref: ./paths/admin.yml#/admin_users_id_aivoice_config
  /admin/users/{id}/avatar/config:
    $ref: ./paths/admin.yml#/admin_users_id_avatar_config
  /admin/users/{id}/avatar/clips:
    $ref: ./paths/admin.yml#/admin_users_id_avatar_clips
  /admin/users/{id}/avatar/clips/{slot}:
    $ref: ./paths/admin.yml#/admin_users_id_avatar_clips_slot
  /admin/users/{id}/voice/calls/{ref}/intelligence:
    $ref: ./paths/admin.yml#/admin_users_id_voice_calls_ref_intelligence
  /admin/users/{id}/voice/routes:
    $ref: ./paths/admin.yml#/admin_users_id_voice_routes
  /admin/users/{id}/voice/assistants:
    $ref: ./paths/admin.yml#/admin_users_id_voice_assistants
  /admin/users/{id}/voice/assistants/{name}:
    $ref: ./paths/admin.yml#/admin_users_id_voice_assistants_name
  /admin/users/{id}/pods:
    $ref: ./paths/admin.yml#/admin_users_id_pods
  /admin/users/{id}/s3/config:
    $ref: ./paths/admin.yml#/admin_users_id_s3_config
  /admin/users/{id}/s3/test:
    $ref: ./paths/admin.yml#/admin_users_id_s3_test
  /admin/users/{id}/hmac/config:
    $ref: ./paths/admin.yml#/admin_users_id_hmac_config
  /voice/call:
    $ref: ./paths/voice.yml#/voice_call
  /voice/hangup:
    $ref: ./paths/voice.yml#/voice_hangup
  /voice/account:
    $ref: ./paths/voice.yml#/voice_account
  /voice/webphone/credential:
    $ref: ./paths/voice.yml#/voice_webphone_credential
  /voice/webphone/credential/{id}:
    $ref: ./paths/voice.yml#/voice_webphone_credential_id
  /voice/calls:
    $ref: ./paths/voice.yml#/voice_calls
  /voice/calls/{ref}:
    $ref: ./paths/voice.yml#/voice_calls_ref
  /voice/group/call:
    $ref: ./paths/voice.yml#/voice_group_call
  /voice/calls/{ref}/participants:
    $ref: ./paths/voice.yml#/voice_calls_ref_participants
  /voice/calls/{ref}/switch:
    $ref: ./paths/voice.yml#/voice_calls_ref_switch
  /voice/agent/switch:
    $ref: ./paths/voice.yml#/voice_agent_switch
  /voice/intelligence:
    $ref: ./paths/voice.yml#/voice_intelligence
  /voice/calls/{ref}/intelligence:
    $ref: ./paths/voice.yml#/voice_calls_ref_intelligence
  /voice/settings:
    $ref: ./paths/voice.yml#/voice_settings
  /voice/routes:
    $ref: ./paths/voice.yml#/voice_routes
  /voice/routes/{id}:
    $ref: ./paths/voice.yml#/voice_routes_id
  /voice/routes/test:
    $ref: ./paths/voice.yml#/voice_routes_test
  /voice/assistants:
    $ref: ./paths/voice.yml#/voice_assistants
  /voice/assistants/{name}:
    $ref: ./paths/voice.yml#/voice_assistants_name
  /_internal/sip/directory:
    $ref: ./paths/voice.yml#/_internal_sip_directory
  /_internal/sip/dialplan:
    $ref: ./paths/voice.yml#/_internal_sip_dialplan
  /_internal/voice/outbound:
    $ref: ./paths/voice.yml#/_internal_voice_outbound
  /_internal/voice/site/heartbeat:
    $ref: ./paths/voice.yml#/_internal_voice_site_heartbeat
  /_internal/voice/machine/announce:
    $ref: ./paths/voice.yml#/_internal_voice_machine_announce
  /session/connect:
    $ref: ./paths/session.yml#/session_connect
  /session/pause:
    $ref: ./paths/session.yml#/session_pause
  /session/settings:
    $ref: ./paths/session.yml#/session_settings
  /session/config:
    $ref: ./paths/session.yml#/session_config
  /session/stt/config:
    $ref: ./paths/session.yml#/session_stt_config
  /session/aivoice/config:
    $ref: ./paths/session.yml#/session_aivoice_config
  /session/avatar/config:
    $ref: ./paths/session.yml#/session_avatar_config
  /session/avatar/clips:
    $ref: ./paths/session.yml#/session_avatar_clips
  /session/avatar/clips/{slot}:
    $ref: ./paths/session.yml#/session_avatar_clips_slot
  /session/proxies:
    $ref: ./paths/session.yml#/session_proxies
  /session/lid:
    $ref: ./paths/session.yml#/session_lid
  /session/lid/refresh:
    $ref: ./paths/session.yml#/session_lid_refresh
  /session/tctoken:
    $ref: ./paths/session.yml#/session_tctoken
  /session/contact-qr:
    $ref: ./paths/session.yml#/session_contact_qr
  /contact-qr/resolve:
    $ref: ./paths/session.yml#/contact_qr_resolve
  /session/debug/tctoken-probe:
    $ref: ./paths/session.yml#/session_debug_tctoken_probe
  /session/debug/query-server:
    $ref: ./paths/session.yml#/session_debug_query_server
  /session/device/name:
    $ref: ./paths/session.yml#/session_device_name
  /session/diagnose:
    $ref: ./paths/session.yml#/session_diagnose
  /session/health:
    $ref: ./paths/session.yml#/session_health
  /session/health/history:
    $ref: ./paths/session.yml#/session_health_history
  /session/appstate/restore:
    $ref: ./paths/session.yml#/session_appstate_restore
  /session/timelock/refresh:
    $ref: ./paths/session.yml#/session_timelock_refresh
  /session/messagecap/refresh:
    $ref: ./paths/session.yml#/session_messagecap_refresh
  /session/disconnect:
    $ref: ./paths/session.yml#/session_disconnect
  /session/history:
    $ref: ./paths/session.yml#/session_history
  /session/history/config:
    $ref: ./paths/session.yml#/session_history_config
  /session/hmac/config:
    $ref: ./paths/session.yml#/session_hmac_config
  /session/logout:
    $ref: ./paths/session.yml#/session_logout
  /session/pairphone:
    $ref: ./paths/session.yml#/session_pairphone
  /session/passkey:
    $ref: ./paths/session.yml#/session_passkey
  /session/proxy:
    $ref: ./paths/session.yml#/session_proxy
  /session/qr:
    $ref: ./paths/session.yml#/session_qr
  /session/s3/config:
    $ref: ./paths/session.yml#/session_s3_config
  /session/s3/test:
    $ref: ./paths/session.yml#/session_s3_test
  /session/status:
    $ref: ./paths/session.yml#/session_status
  /passkey/api/{token}/cancel:
    $ref: ./paths/passkey.yml#/passkey_api_token_cancel
  /passkey/api/{token}/challenge:
    $ref: ./paths/passkey.yml#/passkey_api_token_challenge
  /passkey/api/{token}/confirm:
    $ref: ./paths/passkey.yml#/passkey_api_token_confirm
  /passkey/api/{token}/response:
    $ref: ./paths/passkey.yml#/passkey_api_token_response
  /passkey/api/{token}/status:
    $ref: ./paths/passkey.yml#/passkey_api_token_status
  /passkey/{token}:
    $ref: ./paths/passkey.yml#/passkey_token_page
  /extension/wzapi-passkey-extension.zip:
    $ref: ./paths/system.yml#/extension_download
  /extension/version:
    $ref: ./paths/system.yml#/extension_version
  /webhook:
    $ref: ./paths/webhook.yml#/webhook
  /webhook/test:
    $ref: ./paths/webhook.yml#/webhook_test
  /_webhooks/retell:
    $ref: ./paths/webhook.yml#/retell_webhook
  /ads/attribution:
    $ref: ./paths/ads.yml#/ads_attribution
  /chat/archive:
    $ref: ./paths/chat.yml#/chat_archive
  /chat/consumption:
    $ref: ./paths/chat.yml#/chat_consumption
  /chat/delete:
    $ref: ./paths/chat.yml#/chat_delete
  /chat/delete-local:
    $ref: ./paths/chat.yml#/chat_delete_local
  /chat/mute:
    $ref: ./paths/chat.yml#/chat_mute
  /chat/ephemeral:
    $ref: ./paths/chat.yml#/chat_ephemeral
  /chat/delivery/pending:
    $ref: ./paths/chat.yml#/chat_delivery_pending
  /chat/delivery/{id}:
    $ref: ./paths/chat.yml#/chat_delivery
  /chat/downloadaudio:
    $ref: ./paths/chat.yml#/chat_downloadaudio
  /chat/downloaddocument:
    $ref: ./paths/chat.yml#/chat_downloaddocument
  /chat/downloadimage:
    $ref: ./paths/chat.yml#/chat_downloadimage
  /chat/downloadsticker:
    $ref: ./paths/chat.yml#/chat_downloadsticker
  /chat/downloadvideo:
    $ref: ./paths/chat.yml#/chat_downloadvideo
  /chat/history:
    $ref: ./paths/chat.yml#/chat_history
  /chat/history/replay:
    $ref: ./paths/chat.yml#/chat_history_replay
  /chat/history/sync:
    $ref: ./paths/chat.yml#/chat_history_sync
  /chat/label/assign:
    $ref: ./paths/chat.yml#/chat_label_assign
  /chat/label/edit:
    $ref: ./paths/chat.yml#/chat_label_edit
  /chat/label/list:
    $ref: ./paths/chat.yml#/chat_label_list
  /chat/label/sync:
    $ref: ./paths/chat.yml#/chat_label_sync
  /chat/markread:
    $ref: ./paths/chat.yml#/chat_markread
  /chat/message-pin:
    $ref: ./paths/chat.yml#/chat_message_pin
  /chat/pin:
    $ref: ./paths/chat.yml#/chat_pin
  /chat/precheck:
    $ref: ./paths/chat.yml#/chat_precheck
  /chat/presence:
    $ref: ./paths/chat.yml#/chat_presence
  /chat/react:
    $ref: ./paths/chat.yml#/chat_react
  /chat/request-unavailable-message:
    $ref: ./paths/chat.yml#/chat_request_unavailable_message
  /chat/resync:
    $ref: ./paths/chat.yml#/chat_resync
  /chat/schedule/cancel:
    $ref: ./paths/chat.yml#/chat_schedule_cancel
  /chat/schedule/pending:
    $ref: ./paths/chat.yml#/chat_schedule_pending
  /chat/send/album:
    $ref: ./paths/chat.yml#/chat_send_album
  /chat/send/audio:
    $ref: ./paths/chat.yml#/chat_send_audio
  /chat/send/buttons:
    $ref: ./paths/chat.yml#/chat_send_buttons
  /chat/send/carousel:
    $ref: ./paths/chat.yml#/chat_send_carousel
  /chat/send/comment:
    $ref: ./paths/chat.yml#/chat_send_comment
  /chat/send/contact:
    $ref: ./paths/chat.yml#/chat_send_contact
  /chat/send/contacts:
    $ref: ./paths/chat.yml#/chat_send_contacts
  /chat/send/document:
    $ref: ./paths/chat.yml#/chat_send_document
  /chat/send/edit:
    $ref: ./paths/chat.yml#/chat_send_edit
  /chat/send/event:
    $ref: ./paths/chat.yml#/chat_send_event
  /chat/send/image:
    $ref: ./paths/chat.yml#/chat_send_image
  /chat/send/list:
    $ref: ./paths/chat.yml#/chat_send_list
  /chat/send/livelocation:
    $ref: ./paths/chat.yml#/chat_send_livelocation
  /chat/send/livelocation/update:
    $ref: ./paths/chat.yml#/chat_send_livelocation_update
  /chat/send/location:
    $ref: ./paths/chat.yml#/chat_send_location
  /chat/send/poll:
    $ref: ./paths/chat.yml#/chat_send_poll
  /chat/send/request-phone:
    $ref: ./paths/chat.yml#/chat_send_request_phone
  /chat/send/sticker:
    $ref: ./paths/chat.yml#/chat_send_sticker
  /chat/send/text:
    $ref: ./paths/chat.yml#/chat_send_text
  /chat/send/video:
    $ref: ./paths/chat.yml#/chat_send_video
  /chat/star:
    $ref: ./paths/chat.yml#/chat_star
  /group/announce:
    $ref: ./paths/group.yml#/group_announce
  /group/create:
    $ref: ./paths/group.yml#/group_create
  /group/ephemeral:
    $ref: ./paths/group.yml#/group_ephemeral
  /group/info:
    $ref: ./paths/group.yml#/group_info
  /group/inviteinfo:
    $ref: ./paths/group.yml#/group_inviteinfo
  /group/invitelink:
    $ref: ./paths/group.yml#/group_invitelink
  /group/join:
    $ref: ./paths/group.yml#/group_join
  /group/joinapproval:
    $ref: ./paths/group.yml#/group_joinapproval
  /group/requests:
    $ref: ./paths/group.yml#/group_requests
  /group/leave:
    $ref: ./paths/group.yml#/group_leave
  /group/list:
    $ref: ./paths/group.yml#/group_list
  /group/locked:
    $ref: ./paths/group.yml#/group_locked
  /group/memberaddmode:
    $ref: ./paths/group.yml#/group_memberaddmode
  /group/name:
    $ref: ./paths/group.yml#/group_name
  /group/photo:
    $ref: ./paths/group.yml#/group_photo
  /group/photo/remove:
    $ref: ./paths/group.yml#/group_photo_remove
  /group/send-invite:
    $ref: ./paths/group.yml#/group_send_invite
  /group/topic:
    $ref: ./paths/group.yml#/group_topic
  /group/updateparticipants:
    $ref: ./paths/group.yml#/group_updateparticipants
  /community/create:
    $ref: ./paths/community.yml#/community_create
  /community/creategroup:
    $ref: ./paths/community.yml#/community_creategroup
  /community/info:
    $ref: ./paths/community.yml#/community_info
  /community/linkgroup:
    $ref: ./paths/community.yml#/community_linkgroup
  /community/list:
    $ref: ./paths/community.yml#/community_list
  /community/participants:
    $ref: ./paths/community.yml#/community_participants
  /community/subgroups:
    $ref: ./paths/community.yml#/community_subgroups
  /community/unlinkgroup:
    $ref: ./paths/community.yml#/community_unlinkgroup
  /user/avatar:
    $ref: ./paths/user.yml#/user_avatar
  /user/block:
    $ref: ./paths/user.yml#/user_block
  /user/blocklist:
    $ref: ./paths/user.yml#/user_blocklist
  /user/check:
    $ref: ./paths/user.yml#/user_check
  /user/contacts:
    $ref: ./paths/user.yml#/user_contacts
  /user/info:
    $ref: ./paths/user.yml#/user_info
  /user/lid/{jid}:
    $ref: ./paths/user.yml#/user_lid_jid
  /user/presence:
    $ref: ./paths/user.yml#/user_presence
  /user/privacy:
    $ref: ./paths/user.yml#/user_privacy
  /newsletter/info:
    $ref: ./paths/system.yml#/newsletter_info
  /newsletter/inviteinfo:
    $ref: ./paths/system.yml#/newsletter_inviteinfo
  /newsletter/list:
    $ref: ./paths/system.yml#/newsletter_list
  /newsletter/follow:
    $ref: ./paths/system.yml#/newsletter_follow
  /newsletter/messages:
    $ref: ./paths/system.yml#/newsletter_messages
  /newsletter/unfollow:
    $ref: ./paths/system.yml#/newsletter_unfollow
  /newsletter/create:
    $ref: ./paths/system.yml#/newsletter_create
  /newsletter/send:
    $ref: ./paths/system.yml#/newsletter_send
  /newsletter/react:
    $ref: ./paths/system.yml#/newsletter_react
  /newsletter/markviewed:
    $ref: ./paths/system.yml#/newsletter_markviewed
  /newsletter/mute:
    $ref: ./paths/system.yml#/newsletter_mute
  /newsletter/subscribe:
    $ref: ./paths/system.yml#/newsletter_subscribe
  /call/reject:
    $ref: ./paths/system.yml#/call_reject
  /misc/phone:
    $ref: ./paths/system.yml#/misc_phone
  /api/dev/publish:
    $ref: ./paths/devbench.yml#/api_dev_publish
  /api/dev/sink-url:
    $ref: ./paths/devbench.yml#/api_dev_sink_url
  /api/dev/webhook-sink:
    $ref: ./paths/devbench.yml#/api_dev_webhook_sink
  /admin/dev/raw-node/decode:
    $ref: ./paths/devbench.yml#/admin_dev_raw_node_decode
  /admin/dev/raw-node/{id}:
    $ref: ./paths/devbench.yml#/admin_dev_raw_node
  /admin/dev/raw-node/{id}/batch:
    $ref: ./paths/devbench.yml#/admin_dev_raw_node_batch
  /admin/dev/raw-node/{id}/log-level:
    $ref: ./paths/devbench.yml#/admin_dev_raw_node_log_level
  /admin/dev/raw-node/{id}/sequence:
    $ref: ./paths/devbench.yml#/admin_dev_raw_node_sequence
  /admin/dev/raw-node/{id}/sequence/cancel:
    $ref: ./paths/devbench.yml#/admin_dev_raw_node_sequence_cancel
  /admin/inbox/pending:
    $ref: ./paths/admin.yml#/admin_inbox_pending
  /ws/admin:
    $ref: ./paths/admin.yml#/ws_admin
  /ws/events:
    $ref: ./paths/devbench.yml#/ws_events
  /admin/dev/publish:
    $ref: ./paths/devbench.yml#/admin_dev_publish
  /admin/dev/sink-url:
    $ref: ./paths/devbench.yml#/admin_dev_sink_url
  /admin/dev/inject:
    $ref: ./paths/devbench.yml#/admin_dev_inject
  /admin/dev/redis/purge:
    $ref: ./paths/devbench.yml#/admin_dev_redis_purge
  /_internal/inject_event:
    $ref: ./paths/devbench.yml#/_internal_inject_event
  /admin/sim/attach:
    $ref: ./paths/devbench.yml#/admin_sim_attach
  /admin/sim/detach:
    $ref: ./paths/devbench.yml#/admin_sim_detach
  /status/set/text:
    $ref: ./paths/system.yml#/status_set_text
  /status/send:
    $ref: ./paths/system.yml#/status_send
  /profile/photo:
    $ref: ./paths/system.yml#/profile_photo
  /profile/name:
    $ref: ./paths/system.yml#/profile_name
components:
  securitySchemes:
    ApiKeyAuth:
      $ref: ./components/security.yml#/ApiKeyAuth
    AdminAuth:
      $ref: ./components/security.yml#/AdminAuth
    SIPDirectoryAuth:
      $ref: ./components/security.yml#/SIPDirectoryAuth
  schemas:
    ApiResponse:
      $ref: ./components/schemas.yml#/ApiResponse
    MessageSentResponse:
      $ref: ./components/schemas.yml#/MessageSentResponse
    ContextInfo:
      $ref: ./components/schemas.yml#/ContextInfo
    CreateUserRequest:
      $ref: ./components/schemas.yml#/CreateUserRequest
    EditUserRequest:
      $ref: ./components/schemas.yml#/EditUserRequest
    UserResponse:
      $ref: ./components/schemas.yml#/UserResponse
    UserListResponse:
      $ref: ./components/schemas.yml#/UserListResponse
    S3ConfigRequest:
      $ref: ./components/schemas.yml#/S3ConfigRequest
    MessageLocationRequest:
      $ref: ./components/schemas.yml#/MessageLocationRequest
    MessageContactRequest:
      $ref: ./components/schemas.yml#/MessageContactRequest
    DownloadMediaResponse:
      $ref: ./components/schemas.yml#/DownloadMediaResponse
    HistoryResponse:
      $ref: ./components/schemas.yml#/HistoryResponse
    GroupInfo:
      $ref: ./components/schemas.yml#/GroupInfo
    CheckUserRequest:
      $ref: ./components/schemas.yml#/CheckUserRequest
    CheckUserResponse:
      $ref: ./components/schemas.yml#/CheckUserResponse
    Proxy:
      $ref: ./components/schemas.yml#/Proxy
