Capability requests API
Open, move, and track a capability request over the API — the endpoints, the product codes, and what a parent platform can do today.
Who this section is for
Developers who open capability requests over the API instead of the merchant dashboard —
activating a payment method (GCash, Maya, GrabPay, ShopeePay, cards), requesting account
activation or a standard wallet, filing a tax document, or changing the business profile.
A capability request is an application to turn something on for an account. PayMongo reviews
it, and the request moves through a fixed set of statuses. Every status change is also pushed as
a webhook event — those payloads live in
Capability request webhooks.
Before you begin
Prerequisites
- Authenticate with the account's secret key using HTTP Basic auth
(Authorization: Basic base64(sk_xxx:)).- Register a webhook endpoint if you want to be told when review finishes — see
Setup & Management.- Use the same mode (
sk_test_…/sk_live_…) as the webhook you registered. The key used on
POST /v1/requestsfixes thelivemodeof every event that request goes on to emit.
Base URL: https://api.paymongo.com.
Endpoints
| Call | Body | New status | Event emitted |
|---|---|---|---|
POST /v1/requests | required | draft or submitted | none — see Creating a request |
POST /v1/requests/{id}/submit | none | submitted | capability_request.submitted |
POST /v1/requests/{id}/review | none | under_review | capability_request.under_review |
POST /v1/requests/{id}/review/finish | none | processing | capability_request.processing |
POST /v1/requests/{id}/resubmit | none | under_review | capability_request.under_review |
POST /v1/requests/{id}/cancel | none | cancelled | capability_request.cancelled |
PATCH /v1/requests/{id} | partial | unchanged, or under_review | capability_request.under_review only when the patch moves the status |
GET /v1/requests | — | — | none |
GET /v1/requests/{id} | — | — | none |
GET /v1/requests/eligibility/{product_code} | — | — | none |
pending_clarification, processing, completed and declined are set by PayMongo during
review. There is no merchant-facing API call for them — you observe them through the webhook (or
by polling GET /v1/requests/{id}).
Status lifecycle
flowchart LR A[draft] -->|submit| B[submitted] B -->|review| C[under_review] C -->|needs info| D[pending_clarification] D -->|resubmit| C C -->|approved| E[processing] E --> F[completed] C -->|rejected| G[declined]
Entry points. Most requests start in draft and move on submit, but payment method,
account activation and tax document requests are created directly in submitted.
Terminal statuses. completed, declined and cancelled. A declined request can only be
reopened by PayMongo, which re-emits capability_request.submitted on the same request ID.
Cancelling. Allowed from draft, submitted, under_review and pending_clarification —
these paths are left off the diagram to keep it readable. Cancel is rejected from processing,
because the capability is already being provisioned, and from all three terminal statuses.
Creating a request
curl -X POST https://api.paymongo.com/v1/requests \
-u sk_live_xxxxxxxxxxxx: \
-H 'Content-Type: application/json' \
-d '{
"request_type": "product_request",
"product_code": "prd_svc_paymongo_ewallet_maya",
"requester_id": "usr_xxxxxxxxxxxx",
"kyb_data": {}
}'| Field | Required | Description |
|---|---|---|
request_type | yes | onboarding, product_request, config_update, or account_update. |
product_code | yes | The capability being requested. See Product codes. |
requester_id | yes | The user opening the request. Prefixed usr_. |
kyb_data | no | Application data. Send {} for payment method activation — the account is the source of truth. |
Creation does not emit an eventA create is not a status change, so no
capability_request.*event is published for it. The
response body already tells you the resulting status — use that, not a webhook.Payment method, account activation and tax document requests are created directly in
submitted; they never pass throughdraft, socapability_request.submitteddoes not fire
for them either. The first event you will see iscapability_request.under_review.Two creates are decided immediately and the outcome event does fire:
aprd_svc_paymongo_account_updatethat only changesbusiness_sizeand/orbusiness_ageis
auto-approved and emitscapability_request.completed; a request whose registered business
website is on PayMongo's prohibited list is auto-declined and emits
capability_request.declined.
Only one open request per product code is allowed. A second create while one is still in
draft, submitted, under_review or pending_clarification is rejected. For
account_update the check is per field: a second request is rejected only if it touches a field
or document already being changed by an open request.
Check eligibility first
For payment methods, check first so you fail fast:
curl https://api.paymongo.com/v1/requests/eligibility/prd_svc_paymongo_ewallet_maya \
-u sk_live_xxxxxxxxxxxx:{ "eligible": false, "missing": ["business_type", "files_valid_id"] }missing lists the business type, documents and fields the account still has to supply. Fix
those on the account first — the same set is enforced when creating the request.
Moving a request
Transitions take no request body:
curl -X POST https://api.paymongo.com/v1/requests/req_xxxxxxxxxxxx/review \
-u sk_live_xxxxxxxxxxxx:Use resubmit after a capability_request.pending_clarification event, once you have supplied
what data.merchant_note asked for. To correct kyb_data first, PATCH the request — the patch
shallow-merges into the stored kyb_data, replacing top-level keys you send and leaving the rest
alone — then call resubmit.
Product codes
| Product code | Capability |
|---|---|
prd_svc_paymongo_ewallet_gcash | GCash payment method |
prd_svc_paymongo_ewallet_maya | Maya payment method |
prd_svc_paymongo_ewallet_grabpay | GrabPay payment method |
prd_svc_paymongo_ewallet_shopeepay | ShopeePay payment method |
prd_svc_paymongo_card_visa_mastercard | Visa / Mastercard card acceptance |
prd_svc_paymongo_account_activation | Account activation |
prd_svc_paymongo_std_wallet | Standard wallet |
prd_svc_paymongo_tax_document | Tax document filing |
prd_svc_paymongo_account_update | Business profile update |
For parent platforms
A capability request is always scoped to the account whose secret key made the call. There is
no Account-Id header on this API, and the account_id field on POST /v1/requests is ignored
for merchant keys — merchant authentication is locked to its own account. So a parent uses these
endpoints for its own capabilities, not a child's.
What a parent can do today
| Goal | How |
|---|---|
| Activate a payment method on the parent account | POST /v1/requests with the parent's secret key, as above. |
| Update the parent's business profile | POST /v1/requests with product_code: prd_svc_paymongo_account_update. |
| Give a child its default capabilities | Activate the child — see Quick start. Defaults are provisioned at activation. |
| Apply the same defaults to every new child | Auto-configuration. |
| Get an extra capability onto a child | The child's authorized representative requests it from the Dashboard, if dashboard access is enabled. Otherwise contact [email protected]. |
| Transact on an activated child | Account-Id header — see Linked transactions. |
Coming soon — parent-initiated capability requestsRequesting, viewing and reviewing capabilities per child over this API is on the roadmap.
Until it ships, a parent cannot open a capability request against a child account. See
Account capabilities for the current state.
Recommended parent flow
- Check eligibility —
GET /v1/requests/eligibility/{product_code}before you show the
capability as available in your own UI. - Create the request —
POST /v1/requests. Store the returnedreq_ID against your own
record, and read the returnedstatus: payment method and activation requests come back
alreadysubmitted. - Listen, do not poll — subscribe to
capability_request.*and key your handler on
data.attributes.data.id. See
Capability request webhooks. - Handle
pending_clarification— readmerchant_note.note,merchant_note.requested_fields
andmerchant_note.requested_files, collect what is asked for,PATCHthe request, then
POST .../resubmit. - Settle on
completedordeclined— both are terminal. A declined request can only be
reopened by PayMongo, which re-emitscapability_request.submitted.
Related pages
- Capability request webhooks — every event, payload sample, and resource field.
- Account capabilities — what a child gets at activation and what is coming.
- Troubleshooting — stuck, parked, and declined requests.
- Account capabilities (catalog) — the canonical capability catalog and requirements.
- Quick start — create, verify, update, activate a child account.
- Linked transactions — operating on an activated child.
Updated 9 days ago
