1. Reference
Partner API
  • Getting Started
    • Introduction
    • Authentication
    • Business Use Cases
  • API References
    • Partner Operations
      • Balances & Transaction History
        • Get Balances
        • Get Transaction History
        • Create Wallet
      • Currency Exchange
        • Retrieve Exchange Rate
        • Retrieve Exchange Rate and Create a Lock
        • Create and Finalize an Exchange
        • Retrieve Detailed Exchange Information
      • SEPA Transfers
        • Get SEPA Deposit Info
        • Get SEPA Deposit Contact List
        • Create a SEPA Transfer
        • Get SEPA Transfer Details
      • Crypto Withdrawal
        • Get Network Fee
        • Create Crypto Withdrawal
        • Get Crypto Withdrawal Details
      • Crypto Deposits
        • Update Travel Rule
      • Orders
        • Get Rates
        • Retrieve Order Rate and Create a Lock
        • Create and Finalize an Order
        • Get Order Details
      • Payment link & Checkout Link
        • Generate Payment Link
        • Generate Hosted Checkout
        • Get Payment Link Details
    • User Operations
      • Onboarding & KYC Flow
        • Create User Account
        • Method A: Add KYC File
        • Method B: Creating KYC Verification
        • Method B: Redirect to Verification
        • Method B: Get KYC Status
        • Add User Verification
        • Add POA File
      • Account Management
        • Update Existing User
        • Delete User
        • Suspend User
        • Unsuspend User
      • Balances & Transaction History
        • Get User Balances
        • Get User Transaction History
      • Currency Exchange
        • Retrieve Exchange Rate
        • Retrieve Exchange Rate and Create a Lock
        • Create and Finalize an Exchange
        • Retrieve Detailed Exchange Information
      • SEPA Transfers
        • Get SEPA Deposit Info
        • GET SEPA Deposit Contact List
        • Create a SEPA Transfer
        • Get SEPA Transfer Details
      • Crypto Withdrawal
        • Get Network Fee
        • Create Crypto Withdrawal
        • Get Crypto Withdrawal Details
      • Crypto Deposits
        • Update Travel Rule
      • Internal Transfers
        • Create a Transfer
        • Get Transfer Details
      • Virtual Cards
        • Create Virtual Card
        • Get All User Cards
        • Get Card Details
        • Update Card PIN
        • Block Card
        • Unblock Card
        • Get Card Limits
        • Update Card Limits
        • Delete Card
  • Integration
    • SDKs & Integration Guides
    • Transaction Processing
    • Error Handling
    • Rate Limiting
    • Webhooks
      • User & KYC Webhooks
        • User Balance Generation Webhook
        • KYC File Added Webhook
        • POA Verification Status Webhook
        • KYC Verification Status Webhook
        • Create Wallet Webhook
        • High Risk KYC Verification Webhook
      • Transfers & Payments Webhooks
        • Internal Transfer Webhook
        • IBAN Status Webhook
        • Partner SEPA Transfer Webhook
        • User SEPA Transfer Webhook
        • SEPA Deposit Webhook
        • Crypto Withdrawal Webhook
        • Crypto Deposit Webhook
        • Exchange Webhook
        • Card Transaction Webhook
        • Order status Webhook
        • Payment Link Webhook
      • Card Webhooks
        • Card 3DS Code Webhook
        • Card Activation Code Webhook
  • Reference
    • Supported Countries
    • Supported Currencies
    • Fees
    • FAQ
    • Changelog
    • Support
  1. Reference

FAQ

Quick answers to common questions about using the P100 Partner API
Find solutions to the most frequently encountered issues and questions during API integration.

šŸ” General & Authentication#

How do I get an API key?
To access the P100 Partner API, you'll need a P100 Business Account:
1.
Apply for a Business Account → Visit P100.io
2.
Account Review → Our team will review your application.
3.
Onboarding → Once approved, you'll receive:
Staging API key (partner-api-stage.p100.io)
Production API key (partner-api.p100.io)
Integration documentation and dedicated support
What's the difference between staging and production environments?
EnvironmentURLPurposeData
Staginghttps://partner-api-stage.p100.ioDevelopment & TestingTest data, no real money
Productionhttps://partner-api.p100.ioLive OperationsReal transactions & funds
Best Practices:
Always test thoroughly in staging before production deployment.
Never use production keys in development/testing.
Ensure your backend dynamically switches the URL based on the environment.
āŒ Getting "401 Unauthorized" error?
This indicates an API key authentication problem. Check the following:
āœ… Quick Fix Checklist:
Common Issues:
āŒ Header Name — Must be exactly x-api-key (all lowercase).
āŒ Key Value — Ensure there are no leading or trailing spaces.
āŒ Environment Mismatch — Using a staging key on a production URL will result in a 401.

šŸ‘¤ User Management & KYC#

How do I get a user's balance for the first time?
Balances and crypto wallets are not created immediately when you create a user account. They are generated only after the user passes full compliance verification.
The Event-Driven Flow:
1.
Create User — Provide externalUserId and mandatory citizenship.
2.
Submit KYC — Use Method A (Direct API) or Method B (Hosted Page).
3.
Wait for Approval — Our system performs automated and manual reviews.
4.
Listen for Webhook — Once approved, we send the User Balance Generation Webhook.
5.
Success — This webhook confirms that balances and wallet addresses are ready. You can now call GET /v1/user/balances/{externalUserId}.
What is POA and when is it required?
POA = Proof of Address
A document (e.g., utility bill, bank statement) that verifies the user's residential address for AML compliance purposes.
When is it required?
POA is optional by default. However, it becomes strictly mandatory if a user is flagged as High Risk by our AML system. If the Create User Account response or a subsequent webhook indicates poaRequired: true, you must submit a POA file to proceed.
Acceptable Documents:
Utility bills (gas, electricity, water)
Bank statements
Official government correspondence
Can a user change their country of residence?
No. Due to strict AML regulations, once a user account is created, the country of residence cannot be modified.
If a user needs to change their country, you must:
1.
Delete the existing user account.
2.
Create a new account with a fresh KYC process for the new jurisdiction.

šŸ¦ SEPA & Internal Transfers#

Why can't my user withdraw to their bank account?
P100 operates on a Closed Loop policy. Users can only withdraw EUR to a bank account (IBAN) that has been previously verified through a deposit.
The IBAN Whitelisting Flow:
1.
Retrieve Details — Call Get SEPA Deposit Info to get the unique IBAN and Reference (REF) assigned to the user.
2.
Verification Deposit — The user sends a small amount from their personal bank account to that IBAN.
3.
Manual Matching — We verify that the Sender's Name strictly matches the P100 Account Name.
4.
Webhook — You receive an IBAN Status Webhook once the IBAN is approved.
5.
Withdraw — You can now call Create a SEPA Transfer to that specific IBAN.
How do Internal Transfers work?
Use the Internal Transfers module to move funds between your Partner Master Wallet and your users:
DirectionDescription
FundingMove funds from Partner balance → User balance
CollectionMove funds (commissions/fees) from User balance → Partner balance
Key Properties:
āœ… Transfers are instant.
āœ… Occur off-chain — no blockchain network fees.

šŸ“ˆ Exchange & Payments#

Difference between Get Rates and Create a Lock?
The key difference is that Get Rates provides an indicative, non-guaranteed market price, while Create a Lock provides a guaranteed, executable rate for a specific transaction.
Use Get Rates for informational purposes.
Think of it as a live market snapshot. It's ideal for displaying an estimated conversion rate in your UI.
Use Create a Lock to prepare for an actual transaction.
This endpoint provides a guaranteed exchange rate for a specific user, locked for 60 seconds. You must use the lockId from this response to execute the actual exchange.
Rule of Thumb:
1.
Show the user an estimate using Get Rates.
2.
When the user is ready to confirm, call Create a Lock to get a final rate.
3.
Immediately use the lockId to execute the transaction.
What's the difference between Standard Payment Link and Hosted Checkout?
FeatureStandard Payment LinkHosted Checkout
ConfigurationGeneric P100 checkoutFollows your dedicated Partner configuration
BrandingStandard P100 brandingCustom branding available
SettlementAll crypto payments auto-converted to EUR, settled to your balanceSpecific settlement rules per Partner config
Use CaseQuick, one-size-fits-all payment collectionTailored checkout experience for your brand
What is the Travel Rule and when does it apply?
The Travel Rule is a global Anti-Money Laundering (AML) regulation that requires sharing sender and recipient information for crypto transactions above certain thresholds.
When it applies:
Large crypto deposits (e.g., from custodial exchanges).
Transactions flagged by our compliance systems.
What happens:
The deposit is held with status WAITING_FOR_TR_DATA.
How to resolve:
Use the Update Travel Rule endpoint to submit the sender's details and release the funds:

šŸ“” Webhooks#

How do I verify webhook authenticity?
Verifying every webhook is a critical security measure. Every webhook request includes an Authorization HTTP header containing your unique secret token.
Verification Process:
1.
Extract Token — Read the value from the Authorization header.
2.
Compare Secret — Securely compare the received token with the secret provided during account setup.
3.
Validate:
Tokens match → Process the payload and return 200 OK.
Tokens do not match (or header is missing) → Discard the request and return 401 Unauthorized.
What happens if my webhook endpoint fails?
Automatic Retry System
P100 uses an exponential backoff retry strategy for failed webhooks (non-2xx responses):
AttemptDelay After Previous Failure
1st— (Initial delivery)
2nd~8 seconds
3rd~16 seconds
4th~32 seconds
5th~64 seconds
Retry Conditions:
Non-2xx HTTP response from your server.
Connection timeout.
DNS resolution failures or SSL/TLS errors.
Important: Ensure your webhook endpoint is idempotent — it should handle duplicate notifications gracefully, as the same event may be delivered more than once.

Need Help?#

šŸ’¬ Support
Can't find what you're looking for? Contact our support team for assistance.
Previous
Fees
Next
Changelog
Built with