This page tracks API paths from generated OpenAPI artifacts.
Source of truth
- Runtime OpenAPI endpoint:
GET /openapi.json
- Checked-in docs snapshot:
docs-site/openapi/openapi.json
- Runtime OpenAPI path total in
api/ test harness: 154 (TestOpenAPIContainsAllPaths)
- Checked-in docs snapshot path total: 170
WAGO parity additions (this branch)
The following endpoint surfaces were added on feat/wago-parity-api and are now part of the runtime OpenAPI generated by api/:
/v1/chats/archive
/v1/chats/history-sync
/v1/chats/mute
/v1/chats/pin
/v1/chats/unarchive
/v1/chats/unmute
/v1/chats/unpin
/v1/calls/reject
/v1/communities
/v1/communities/groups/add
/v1/communities/groups/remove
/v1/newsletters
/v1/newsletters/{newsletterJID}
/v1/newsletters/{newsletterJID}/messages
/v1/newsletters/invite-link
/v1/newsletters/subscribe
/v1/groups
/v1/groups/{groupJID}
/v1/groups/description
/v1/groups/invite-link
/v1/groups/join
/v1/groups/leave
/v1/groups/name
/v1/groups/participants
/v1/groups/photo
/v1/channels/{channelID}/groups
/v1/labels/chats/attach
/v1/labels/chats/detach
/v1/labels/messages/attach
/v1/labels/messages/detach
/v1/messages/delete
/v1/messages/edit
/v1/messages/media/download
/v1/messages/presence
/v1/messages/react
/v1/messages/read
/v1/messages/{messageID}/status
/v1/channels/{channelID}/blocked-contacts
/v1/channels/{channelID}/contacts
/v1/channels/{channelID}/logs
/v1/channels/{channelID}/pairing-code
/v1/channels/{channelID}/privacy
/v1/channels/{channelID}/profile
/v1/channels/{channelID}/proxy
/v1/channels/{channelID}/settings/advanced
/v1/contacts/block
/v1/contacts/lookup
/v1/contacts/resolve
/v1/contacts/unblock
Path groups
| Group | Paths |
|---|
| auth | 12 |
| organizations and members | 11 |
| channels | 17 |
| contacts and conversations | 25 |
| messages and media | 6 |
| cdp | 21 |
| settings | 16 |
| waba | 9 |
| system | 8 |
Wazapin public contact APIs are designed around contacts as the canonical CRM resource.
- Use
/v1/contacts and /v1/contacts/{contactID} for stored contact records.
- Use
POST /v1/contacts/resolve as the canonical CRM identity-resolution endpoint across phone, WhatsApp, email, Instagram, or external IDs.
POST /v1/contacts/lookup remains available as a compatibility alias for older clients.
- Avoid channel-specific public path conventions such as
/v1/contacts/wa/{wa_id} because they do not scale cleanly once a single contact can own multiple identities across channels.
Snapshot path list
The list below is generated from the checked-in OpenAPI snapshot at docs-site/openapi/openapi.json.
/v1/api-keys
/v1/api-keys/{keyID}
/v1/audit-logs
/v1/auth/email-verification/confirm
/v1/auth/email-verification/request
/v1/auth/fingerprint-events
/v1/auth/login
/v1/auth/logout
/v1/auth/me
/v1/auth/me/preferences
/v1/auth/me/presence
/v1/auth/onboarding
/v1/auth/password/confirm
/v1/auth/password/reset
/v1/auth/register
/v1/cdp/activity-log
/v1/cdp/contact-objects
/v1/cdp/contact-objects/{objectID}
/v1/cdp/contacts/{contactID}/activity
/v1/cdp/contacts/{contactID}/lifecycle-stage
/v1/cdp/custom-fields
/v1/cdp/custom-fields/{fieldID}
/v1/cdp/events
/v1/cdp/lifecycle-stages
/v1/cdp/lifecycle-stages/metrics
/v1/cdp/lifecycle-stages/{stageID}
/v1/cdp/object-types
/v1/cdp/object-types/{objectTypeID}
/v1/cdp/object-types/{objectTypeID}/fields
/v1/cdp/object-types/{objectTypeID}/fields/reorder
/v1/cdp/object-types/{objectTypeID}/fields/{fieldID}
/v1/cdp/segments
/v1/cdp/segments/{segmentID}
/v1/cdp/segments/{segmentID}/members
/v1/cdp/templates
/v1/cdp/templates/{templateID}
/v1/channels
/v1/channels/{channelID}
/v1/channels/{channelID}/capabilities
/v1/channels/{channelID}/connect
/v1/channels/{channelID}/disconnect
/v1/channels/{channelID}/media/{mediaID}
/v1/channels/{channelID}/network/proxy
/v1/channels/{channelID}/pairing-code
/v1/channels/{channelID}/profile/business
/v1/channels/{channelID}/qr
/v1/channels/{channelID}/reconnect
/v1/channels/{channelID}/reconnect/force
/v1/channels/{channelID}/settings/advanced
/v1/channels/{channelID}/settings/phone
/v1/channels/{channelID}/settings/phone/two-step
/v1/channels/{channelID}/settings/phone/two-step/enable
/v1/channels/{channelID}/status
/v1/contact-tags
/v1/contact-tags/{tagID}
/v1/contacts
/v1/contacts/phone/{phone}
/v1/contacts/{contactID}
/v1/contacts/{contactID}/consent/{channel}
/v1/contacts/{contactID}/notes
/v1/contacts/{contactID}/notes/{noteID}
/v1/contacts/{contactID}/suppressions
/v1/contacts/{contactID}/tags
/v1/contacts/{contactID}/tags/{tagID}
/v1/conversations
/v1/conversations/{convID}
/v1/conversations/{convID}/archive
/v1/conversations/{convID}/assign
/v1/conversations/{convID}/close
/v1/conversations/{convID}/history-sync
/v1/conversations/{convID}/labels
/v1/conversations/{convID}/labels/{labelID}
/v1/conversations/{convID}/messages
/v1/conversations/{convID}/mute
/v1/conversations/{convID}/pin
/v1/conversations/{convID}/read
/v1/conversations/{convID}/reopen
/v1/conversations/{convID}/unarchive
/v1/conversations/{convID}/unmute
/v1/conversations/{convID}/unpin
/v1/group-hubs
/v1/group-hubs/{hubID}/groups/add
/v1/group-hubs/{hubID}/groups/remove
/v1/groups
/v1/groups/mine
/v1/groups/{groupID}
/v1/groups/{groupID}/description
/v1/groups/{groupID}/invite-link
/v1/groups/{groupID}/join
/v1/groups/{groupID}/leave
/v1/groups/{groupID}/name
/v1/groups/{groupID}/participants/actions
/v1/groups/{groupID}/photo
/v1/health
/v1/invitations
/v1/invitations/{id}/accept
/v1/invitations/{invitationID}
/v1/labels
/v1/labels/{labelID}
/v1/media/assets
/v1/media/assets/{assetID}
/v1/media/uploads
/v1/members
/v1/members/{userID}
/v1/messages
/v1/messages/uploads/image
/v1/messages/{messageID}
/v1/organization
/v1/organizations
/v1/ready
/v1/settings/billing
/v1/settings/developer/webhooks
/v1/settings/developer/webhooks/alerting-settings
/v1/settings/developer/webhooks/deliveries
/v1/settings/developer/webhooks/deliveries/{messageID}/attempts
/v1/settings/developer/webhooks/deliveries/{messageID}/retry
/v1/settings/developer/webhooks/endpoints
/v1/settings/developer/webhooks/endpoints/{endpointID}
/v1/settings/developer/webhooks/endpoints/{endpointID}/rotate-secret
/v1/settings/developer/webhooks/endpoints/{endpointID}/test
/v1/settings/developer/webhooks/portal-access
/v1/settings/integrations
/v1/settings/notifications
/v1/settings/security
/v1/settings/sessions
/v1/settings/sessions/{sessionID}
/v1/teams
/v1/teams/{teamID}
/v1/teams/{teamID}/members
/v1/teams/{teamID}/members/{userID}
/v1/templates
/v1/templates/library
/v1/templates/library/{libraryItemID}
/v1/templates/sync
/v1/templates/{templateID}
/v1/templates/{templateID}/duplicate
/v1/templates/{templateID}/submit
/v1/users/lookup/check
/v1/users/lookup/info
/v1/users/me/avatar
/v1/users/me/blocklist
/v1/users/me/blocks
/v1/users/me/blocks/{userRef}
/v1/users/me/contacts
/v1/users/me/privacy
/v1/users/me/profile
/v1/version
/v1/waba/errors
/v1/waba/exchange-code
/v1/waba/labels/support
/v1/waba/oauth/start
/v1/waba/progress/{progressID}
/v1/waba/register-phone
/v1/waba/signup-event
/v1/waba/subscribe-webhook
/v1/waba/sync-meta
The checked-in OpenAPI snapshot and the runtime harness can diverge temporarily. If counts or paths disagree, use GET /openapi.json from the running API as the operational source of truth.
For WAGO-backed channels, POST /v1/newsletters/invite-link is currently provider-unsupported and returns a stable 400 client error.
The parity surface now follows a hybrid contract style:
- reads/detail/config endpoints stay resource-oriented where that is natural
- command/action endpoints use body-driven
POST routes for consistency with the existing Wazapin API style