Mint & transfer tokens
Passify checks compliance, then returns an unsigned transaction. Your user signs it in their own wallet — Passify never holds keys or moves funds.
The signing model
Token endpoints return a base64-encoded unsigned transaction. Your application passes it to the user's wallet (Phantom, Solflare, or a wallet-as-a-service provider) for signing, then submits the signed transaction to the network. This keeps a hard boundary: Passify enforces policy and assembles instructions but can never sign on a user's behalf.
Mint to a verified wallet
Minting requires a valid attestation that satisfies the asset's compliance rules:
curl -X POST https://passify.biz/api/v1/token/mint \
-H "Authorization: Bearer passify_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"user_pubkey": "7xKXtg2...",
"mint_config": "us_real_estate_fund_v1",
"amount": "1000"
}'{ "status": "success", "unsigned_transaction_base64": "AQABA..." }Transfer between wallets
Transfers check the sender's attestation and any runtime rules — jurisdiction, holder caps, and transfer locks — before returning an unsigned transaction:
curl -X POST https://passify.biz/api/v1/token/transfer \
-H "Authorization: Bearer passify_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"mint_config": "us_real_estate_fund_v1",
"sender": "7xKXtg2...",
"recipient": "4mNp...",
"amount": "500"
}'Compliance errors
If a check fails, Passify returns 403 with a specific reason and no transaction:
error | Cause |
|---|---|
attestation_required | The wallet has no valid attestation. |
attestation_expired | The attestation has lapsed; renew it. |
rule_violation | A rule failed; detail names which (e.g. min_investment_usd_100). |
Integration checklist
- Confirm a
verifiedstatus before offering a mint or transfer in the UI. - Handle
403reasons explicitly so users know exactly what to fix. - Submit the signed transaction and confirm it on-chain before updating your own records.
- For confidential assets, transfers may route through a privacy provider — the API contract is unchanged.
Last updated