Capitalist · AsyncAPI Specification
Capitalist Webhooks
Version
View Spec
View on GitHub
Bulk PayoutsCryptocurrencyFinanceMass PaymentsPayment PlatformPaymentsPayoutsRemittanceAsyncAPIEvents
AsyncAPI Specification
generated: '2026-09-05'
method: searched
source: >-
https://docs.capitalist.net/api/integration-api.html sections 4.4.1
(callbackUrl), 4.8.1-4.8.3 (KYC callbacks) and 5 (Payment Callbacks)
provider: Capitalist
providerId: capitalist
type: Webhooks
description: >-
Capitalist's event surface is a per-request callback, not a subscription. The
integrator supplies a callbackUrl on the operation that starts the work
(payment creation, KYC initiation) and Capitalist POSTs a signed body to that
URL when a final status is reached. There is no event catalog endpoint, no
subscription management API, no event type field, no delivery-attempt or
retry policy, and no replay endpoint. Capitalist publishes no AsyncAPI
document, so this is a webhook catalog rather than an AsyncAPI spec.
asyncapi_published: false
asyncapi_probe_note: >-
No /asyncapi.yaml, /asyncapi.json or event-catalog surface exists on
capitalist.net, api.capitalist.net or api2.capitalist.net, and the GitHub org
capitalist-net publishes none (5 public repos, checked 2026-09-05).
transport: HTTPS POST to a caller-supplied URL
registration:
style: per-request
mechanism: >-
A `callbackUrl` string field on the request body of the initiating
operation. There is no endpoint to register, list, update or delete a
webhook destination.
operations:
- POST /v1/payment
- POST /v1/kyc/start
security:
signed: true
headers:
- name: X-Request-Timestamp
description: Current timestamp in epoch milliseconds.
- name: Signature
description: sha256_hex(X-Request-Timestamp + raw request body + API secret)
verification: >-
Recompute sha256_hex(X-Request-Timestamp header + raw body + your API
secret) and compare with the Signature header. The construction is identical
to the outbound request signature, so the same helper verifies both.
docs: https://docs.capitalist.net/api/integration-api.html
events:
- name: payment.final-state
description: >-
Sent when a payment created via POST /v1/payment reaches a final state.
The docs describe it as "A POST request will be sent to this URL when a
final status is received."
trigger: Payment reaches EXECUTED or DECLINED
payload_fields:
- {name: state, type: string, required: true, description: 'Document final state (EXECUTED, DECLINED)'}
- {name: fee, type: number, required: true, description: Transaction fee amount}
- {name: documentId, type: integer, required: true, description: Unique identifier of the transaction document}
- {name: comment, type: string, required: false, description: Additional information or notes about the transaction}
- {name: amount, type: number, required: true, description: Transaction amount}
- {name: currency, type: string, required: true, description: 'Transaction currency code (e.g. USD, EUR)'}
- {name: type, type: string, required: true, description: 'Payment channel type (e.g. RUCARD, PAYONEER)'}
- {name: accountFrom, type: string, required: true, description: Source account identifier}
- {name: userRequestId, type: string, required: true, description: The client-supplied unique request identifier}
- {name: callbackUrl, type: string, required: true, description: The URL the callback was sent to}
example:
state: EXECUTED
fee: 1.12
documentId: 123
comment: Own funds
amount: 100.00
currency: USD
type: PAYONEER
accountFrom: U0123504
userRequestId: '9876543219'
callbackUrl: https://some-domain.com/for-callbacks
equivalent_poll: GET /v1/payment/{userRequestId}
docs: https://docs.capitalist.net/api/integration-api.html
- name: kyc.status-changed
description: >-
Sent when the status of a KYC case started via POST /v1/kyc/start changes.
The documentation states the callback body is identical to the response of
GET /v1/kyc/status/{kycExternalUserId}/{sort}.
trigger: KYC status transition
payload_fields:
- {name: kycExternalUserId, type: string, description: Your unique final user id}
- {name: status, type: string, description: 'One of INITIATED, OPENED, COMPLETED, APPROVED, DECLINED, EXPIRED'}
- {name: reason, type: string, description: Optional free-text explanation of the status}
- {name: uuid, type: string, description: UUID of the KYC case}
example:
kycExternalUserId: some your user unique id
status: FAILED
reason: photo is dirty
uuid: a-b-c
equivalent_poll: GET /v1/kyc/statusByUuid/{uuid}
docs: https://docs.capitalist.net/api/integration-api.html
delivery:
retries: not documented
timeout: >-
Not documented. The provider's Best Practices section says only "Ensure your
callback URL is always accessible and responds within timeout limits".
ordering: not documented
deduplication: >-
Not documented. The stable correlation keys on the payment callback are
documentId and userRequestId; a consumer should treat delivery as
at-least-once and dedupe on those.
replay_endpoint: null
ip_allowlist_for_inbound: not published
gaps:
- No AsyncAPI or CloudEvents description of the callback bodies.
- No event type/name field in the payload — the consumer infers the event from
which URL it registered.
- No subscription management, so a callback URL cannot be rotated for
in-flight payments.
- No retry, timeout or delivery-guarantee statement.
- Only final states are delivered; intermediate PENDING transitions are not.
maintainers:
- FN: Kin Lane
email: kin@apievangelist.com
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/capitalist-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.