PayCA surfaces programme fees directly to your tenant. This guide explains when fees appear, how to capture them, and reports you can build on top of the data.
Fee Signals
You’ll see fees in two places:
feesThisMonthinsideGET /v1/users/stats– running total per currency.account_transactionwebhooks withtype=fee– event-level detail.
Each fee references the transaction that generated it via referenceId. No additional ledger digging is required.
Fee Catalogue
| Scenario | Webhook subtype |
Typical Timing |
|---|---|---|
| Authorization approved | authorization_fee |
Immediately after card_transaction (authorization). |
| Provider decline | decline_fee |
Alongside card_transaction (declined). |
| Settlement posted | settlement_fee |
When the card clears. |
| Platform fee | platform_fee |
According to your commercial agreement. |
All amounts match the card currency unless your contract specifies otherwise.
Sample Webhook
{
"event": "account_transaction",
"data": {
"id": "fee-82f9",
"accountId": "tenant-usd",
"type": "fee",
"subtype": "authorization_fee",
"amount": "0.35",
"currency": "USD",
"referenceId": "auth-789",
"timestamp": "2025-06-02T11:24:12Z"
}
}
Store the payload using data.id and link it back to the originating card transaction with referenceId. This lets you build customer-level fee summaries or aggregate by BIN, merchant, or programme.
Reporting Checklist
| Report | How to Build It |
|---|---|
| Daily fee tally | Sum webhook amounts by subtype and currency. |
| Fee per user | Join fee events (via cardId) to your user records. |
| Net programme revenue | (authorization + decline + settlement + platform) - reversals. |
| Statement reconciliation | Compare webhook totals with PayCA monthly invoice. |
Revenue Sweeps
When you’re ready to move the recognised fees back to treasury, transfer them out of the tenant balance:
curl -s -X POST "$PAYCA_BASE_URL/v1/users/transfer" \
-H "Content-Type: application/json" \
-H "x-client-id: $PAYCA_CLIENT_ID" \
-H "x-client-secret: $PAYCA_CLIENT_SECRET" \
-H "Idempotency-Key: sweep-jun-2025" \
-d '{
"fromAccountId": "tenant-usd",
"toAccountId": "treasury-usd",
"amount": "1450.20",
"currency": "USD"
}'
Tag the request with metadata (period, journal reference) if you plan to ingest it into an ERP.
Audit Considerations
- Archive every fee webhook payload (S3, BigQuery, etc.).
- Tie fee totals to specific card transactions via
referenceIdfor audit trails. - Use
feesThisMonthto sanity-check your daily exports.
Frequently Asked Questions
Do I need to account for provider settlement ledgers?
No. PayCA reconciles those internally and reduces your tenant balance when a fee applies.
Can I change fee tiers mid-month?
Contact your PayCA account manager. Updates apply prospectively; existing authorisations keep the original tier.
Can sandbox replay fees?
Yes—enable them during onboarding so you can test reporting before launch.
Next step: confirm your webhook ingestion is resilient by following Webhook Handling Patterns.