PYUSD — One-time payments (Ethereum)
Base URL
https://api.transacty.ai
Summary
Accept one-time PYUSD payments on Ethereum. The payer sends PYUSD to a
deposit address. When settlementStatus is settled, Transacty credits your
PYUSD USDC wallet (PYUSD-USDC) once — a dedicated pocket, separate from
Europe USDC.
There is no merchant PYUSD withdraw in this phase. EUR payouts cannot debit
PYUSD-USDC. Do not treat PYUSD as settling to your Europe USDC wallet.
Live only
Tekko has no sandbox. Use a live API key. Requests with a test key return
503 { "code": "payment_unavailable" }.
Settlement & credit rule
| Collect | Payer sends PYUSD on Ethereum to depositAddress |
| Settle | When settlementStatus is settled, Transacty credits PYUSD-USDC once (display PYUSD USDC) |
| Spend | No merchant PYUSD / PYUSD-USDC withdraw in this phase. EUR payouts cannot debit this pocket |
| Live only | Tekko has no sandbox. Use a live API key. test → 503 payment_unavailable |
| Market | pyusd must be approved |
- Transactions appear on the
pyusdrail. USDC(Europe) andPYUSD-USDCare different pockets. List them separately onGET /v1/balanceitems[].
Enable the pyusd market first. Until the market is KYB-approved,
/v1/pyusd/* returns 403 (market_not_enabled).
Limits
- Minimum amount: 1 PYUSD
- Maximum amount: 500,000 PYUSD per intent
- Scope:
payin:create Idempotency-Keyrequired on create
Required headers
Every request uses HMAC authentication (same scheme as all /v1/* endpoints):
X-Transacty-KeyX-Transacty-Timestamp(Unix seconds)X-Transacty-Signature=HMAC-SHA256(secret, "{timestamp}.{rawBody}")Content-Type: application/jsonIdempotency-Key(required on create — money write)
Required scope
payin:create
Merchant flow
| Step | Merchant server | Transacty API |
|---|---|---|
| 1 | Create payment intent | POST /v1/pyusd/payment-intents |
| 2 | Show depositAddress + amount (QR / copy). Network is always Ethereum | — |
| 3 | Payer sends PYUSD | — |
| 4 | Poll or wait for webhook | GET /v1/pyusd/payment-intents/:transactionId |
| 5 | Mark the order paid only when settled is true (or settlementStatus is settled) | — |
Do not treat “customer sent crypto” as credited.
Webhook events
When a webhook URL is configured, Transacty sends:
payin.completed— PYUSD-USDC credited (currency: "PYUSD-USDC",paidAmount= net credited)payin.failed— expired or failed intent
See Webhooks for signature verification.