MoMo · AsyncAPI Specification
Momo Webhooks
Version
View Spec
View on GitHub
PaymentsMobile PaymentsFintechDigital WalletPayment GatewayQR PaymentsDisbursementBuy Now Pay LaterE-CommerceVietnamAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-26'
method: searched
source: >-
https://developers.momo.vn/v3/docs/payment/api/result-handling/notification/,
https://developers.momo.vn/v3/docs/business-page/user-activities/user-activities-list/,
https://developers.momo.vn/v3/docs/business-page/user-activities/retry-mechanism/,
https://developers.momo.vn/v3/docs/business-page/user-activities/implement-condition/
note: >-
MoMo publishes NO AsyncAPI document, no event catalog in a machine-readable
format, and no streaming surface — searched developers.momo.vn (212-URL
sitemap), github.com/momo-wallet, and probed /asyncapi.json,
/.well-known/* on every host. What it does publish is two real, documented
server-to-server callback surfaces, captured here as a webhook catalog. This
is a Webhooks artifact, not an AsyncAPI one, and it is typed that way in
apis.yml on purpose.
surfaces:
- id: aio-ipn
name: AIO v2 Instant Payment Notification (IPN)
api: momo:aio-payment-gateway
direction: MoMo -> merchant
subscription: >-
Per-request, not per-account: the merchant supplies an `ipnUrl` in the
create/pay request body. There is no webhook registration console and no
endpoint management API.
transport: HTTPS POST
content_type: application/json
expected_response: HTTP 204 No Content, within 15 seconds
signature:
field: signature
algorithm: HMAC-SHA256
verification_required: true
note: >-
MoMo instructs merchants to validate the IPN signature AND to cross-check
partnerCode, orderId and amount against their own database before acting.
url_constraints: >-
The ipnUrl must be a path only — no query parameters, no special characters,
no unicode, no spaces.
redirect_companion:
method: GET
field: redirectUrl
note: >-
A browser redirect with query parameters is delivered alongside IPN. It is
a user-agent event, not a server event, and MoMo warns it can be lost when
the user closes the browser — which is the stated reason IPN exists.
payload_fields:
- partnerCode
- orderId
- requestId
- amount
- orderInfo
- orderType
- transId
- resultCode
- message
- payType
- responseTime
- extraData
- signature
event_semantics:
resultCode_0: Transaction succeeded
resultCode_9000: Transaction authorized successfully (awaiting capture or cancel)
resultCode_other: Transaction failed — see errors/momo-error-codes.yml
caveat: >-
MoMo states explicitly that it will NOT use the merchant's IPN response to
refund a transaction, for cash-flow and balance-reconciliation reasons. A
non-2xx IPN response does not reverse anything.
retry_policy: not-published
docs: https://developers.momo.vn/v3/docs/payment/api/result-handling/notification/
- id: business-page-user-activities
name: Business Page user-activity events
api: momo:business-page-openapi
direction: MoMo -> partner
subscription: A partner-registered callback URL, registered with MoMo (not self-serve).
transport: HTTPS
event_count: 7
events:
- code: VIEW
source: Business Page
description: A user opened the page.
- code: CLICK_ON_CTA
source: Business Page
description: A user tapped one of the page's main call-to-action buttons.
- code: SUBSCRIBE
source: Business Page
description: A user followed the page.
- code: UNSUBSCRIBE
source: Business Page
description: A user unfollowed the page.
- code: REVIEW_POST
source: Ratings & reviews
description: A user posted a rating or review.
- code: UPDATE_POST
source: Posts
description: A post's status changed.
- code: COMMENT_POST
source: Posts
description: A user interacted with a post — like, comment, share, or reply to another user's comment.
retry_policy:
published: true
schedule: [30 seconds, 5 minutes, 15 minutes]
retry_counter: >-
Redelivered events carry the same content plus a count of how many times
the event has been retried.
failure_terminal: >-
If the partner's receiver is still not responding after the retry schedule
is exhausted, MoMo stops sending events and marks the subscription
inactive — the partner must reactivate it.
docs: https://developers.momo.vn/v3/docs/business-page/user-activities/retry-mechanism/
not_published:
asyncapi_spec: false
event_schemas: >-
No JSON Schema or machine-readable payload definition for either surface —
payload fields are documented in HTML tables only.
streaming: >-
No WebSocket, SSE, Kafka, webhook-replay or event-history API on any MoMo
surface.
webhook_management_api: >-
No API to create, list, rotate or delete callback endpoints. AIO endpoints
are per-request; Business Page endpoints are registered with MoMo out of band.
signing_key_rotation: >-
The IPN signature reuses the merchant's secretKey; no separate webhook signing
secret and no rotation procedure is documented.
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/momo-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.