Upland · AsyncAPI Specification
Upland Webhooks
Version
View Spec
View on GitHub
MetaverseWeb3GamingBlockchainNFTVirtual Real EstateDigital AssetsEscrowTournamentsAntelopeWebhooksDeveloper PlatformAsyncAPIEvents
AsyncAPI Specification
generated: '2026-09-02'
method: searched
source: https://docs.developers.upland.me/upland-developers/api-definitions/webhooks-notifications
docs:
- https://docs.developers.upland.me/upland-developers/api-definitions/webhooks-notifications
- https://docs.developers.upland.me/upland-developers/application-management/third-party-applications
asyncapi_spec_published: false
summary: >-
Upland publishes no AsyncAPI document, but it does publish a complete, exhaustive webhook catalog:
eighteen notification types across five families, each with its documented JSON payload. This is
the load-bearing half of the Upland integration — authentication tokens and every asset-movement
outcome arrive here, not in an HTTP response. Captured as a Webhooks surface; nothing is
fabricated into AsyncAPI form.
transport:
protocol: HTTPS
method: POST
direction: Upland -> application
destination: The Webhook URL the developer registers when creating the application.
envelope: '{"type": "<EventName>", "data": { ... }}'
content_type: application/json
authentication: >-
A Webhook Access Token supplied by the developer at application creation. No HMAC signature, no
timestamp header and no replay protection are documented.
retries: not published
ordering: not published
delivery_guarantee: not published
observability: >-
GET /app-usage/webhook-calls (AppUsageController_findWebhookCalls) lets an application query the
webhook calls Upland sent it, filtered by notificationType, isSuccess, containerId and a
startDate/endDate range. This is the only delivery-audit surface and it is a genuine one.
event_count: 18
channels:
- family: Authentication
events:
- type: AuthenticationSuccess
payload: {code: string, userId: uuid, accessToken: jwt}
meaning: The player completed authorization. This is how the application receives the player Bearer token; there is no other delivery path.
- type: AuthenticationFailure
payload: {code: string, message: string}
meaning: The authorization flow failed or the connection code expired.
- type: UserDisconnectedApplication
payload: {appId: number, userId: uuid}
meaning: The player disconnected the application. Discard the stored token.
- family: Transaction to Escrow
events:
- type: TransactionToEscrowCreated
payload: {containerId: number, transactionId: uuid, ownerEosId: string}
meaning: Transaction created and awaiting the player's signature.
- type: TransactionToEscrowSigned
payload: {containerId: number, transactionId: uuid, ownerEosId: string}
meaning: The player signed. Explicitly NOT a completion signal — the docs warn not to assume blockchain finality here.
- type: TransactionToEscrowFinal
payload: {containerId: number, transactionId: uuid, ownerEosId: string}
meaning: Terminal success. Assets have moved from the players to the container on-chain.
terminal: true
- type: TransactionToEscrowFailure
payload: {containerId: number, transactionId: uuid, ownerEosId: string, message: string}
meaning: Terminal failure at finalization.
terminal: true
- type: TransactionToEscrowExpired
payload: {containerId: number, transactionId: uuid, ownerEosId: string}
meaning: The player did not sign within ten minutes.
terminal: true
window: 10 minutes
- type: TransactionToEscrowRejected
payload: {containerId: number, transactionId: uuid, ownerEosId: string}
meaning: The player rejected the request.
terminal: true
- family: Transaction from Escrow
events:
- type: TransactionFromEscrowCreated
payload: {containerId: number, transactionId: uuid}
meaning: The application requested final resolution and Upland is handling it. Not yet final.
- type: TransactionFromEscrowFinal
payload: {containerId: number, transactionId: uuid}
meaning: Terminal and irreversible. The container is resolved and accepts no further transactions.
terminal: true
irreversible: true
- type: TransactionFromEscrowFailure
payload: {containerId: number, transactionId: uuid}
meaning: The resolution transaction failed.
terminal: true
- family: Escrow Container
events:
- type: ContainerExpired
payload: {containerId: number}
meaning: The container expired before resolution; it is closed and assets return to their original owners without charge.
terminal: true
- family: Tournament
events:
- type: RumbleTournamentNewParticipantAdded
payload: {appId: number, participantId: uuid, tournamentId: uuid, transactionId: uuid, userId: uuid, status: string}
- type: RumbleTournamentParticipantStatusUpdated
payload: {appId: number, participantId: uuid, tournamentId: uuid, transactionId: uuid, userId: uuid, status: string}
status_values: [WAITING_PAYMENT, PROCESSING_PAYMENT, ACTIVE, REMOVED]
- type: RumbleTournamentStatusUpdated
payload: {appId: number, tournamentId: uuid, transactionId: uuid, status: string, error: "string (optional)"}
status_values: [WAITING_FOR_PARTICIPANTS, WAITING_PAYMENT, REGISTRATION_CLOSED, IN_PROGRESS, DISTRIBUTING_PRIZES, CLOSED, FAILED]
note: The optional `error` string is the tournament-level failure channel.
- type: RumbleTournamentClosed
payload: {appId: number, tournamentId: uuid, transactionId: uuid, status: CLOSED}
terminal: true
- type: RumbleTournamentCanceled
payload: {appId: number, tournamentId: uuid, transactionId: uuid, status: CANCELED}
terminal: true
gaps:
- No AsyncAPI document.
- No webhook signature scheme (HMAC/JWS) and no replay protection.
- No published retry policy, backoff or dead-letter behaviour.
- No delivery-order or at-least-once/at-most-once guarantee stated.
- Payload types are documented as inline placeholder annotations, not as a schema.
Work with this as data
Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/upland-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.