P2P Money Transfer (internal) #
This flow covers transfers between two 10nPay individuals via the public gateway. It consists of fee calculation, initiation (SCA challenge), optional code resend, and execution.
0. (Optional) Determine transfer type #
Call GET /api/v1/IndividualPayment/{iban}/is-internal-customer-account to decide whether the beneficiary IBAN belongs to a 10nPay customer. If it returns true, follow the P2P steps below. Otherwise, use the third-party IBAN flow.
1. Calculate transfer fee #
POST https://api-test.10npay.com/app/get-money-transfer-charge
| Field | Type | Description |
|---|---|---|
customerAccount |
string | Source IBAN. |
amount |
number | Transfer amount. |
id |
integer | Source individual ID. |
PaymentType |
string | Use P2P for this scenario. |
Response 200 – MoneyTransferChargeResponse (account balance, fee, fee currency, etc.).
2. Initiate P2P transfer (start SCA) #
POST https://api-test.10npay.com/app/{beneficiaryIndividualId}/p2p-money-transfer
| Field | Type | Description |
|---|---|---|
sourceCustomerAccount |
string | Source IBAN. |
beneficiaryCustomerAccount |
string | Beneficiary IBAN. |
transactionAmount |
number | Amount in BGN. |
paymentNotes |
string? | Optional reference. |
deviceId |
string | Device fingerprint/ID. |
Response – returns an SCA status (HTTP 200). If SMS/OTP or in-app approval is needed, the client must prompt the user accordingly.
3. Resend verification code #
POST https://api-test.10npay.com/app/{beneficiaryIndividualId}/resend-code-p2p-money-transfer
Send the same payload as in step 2 when the OTP expired or was not received.
4. Execute P2P transfer #
POST https://api-test.10npay.com/app/{beneficiaryIndividualId}/execute-p2p-money-transfer
| Field | Description |
|---|---|
sourceCustomerAccount |
Source IBAN. |
beneficiaryCustomerAccount |
Beneficiary IBAN. |
transactionAmount |
Amount. |
paymentNotes |
Optional reference. |
code |
OTP / SCA code (if required). |
deviceId |
Device fingerprint/ID. |
Response 200 – transaction ID (string). If SCA via app is pending, the gateway may return HTTP 202 (Accepted) and the mobile app must poll/finish the in-app challenge before final success.
Error handling #
- 400 – validation errors (e.g., insufficient balance, invalid accounts).
- 404 – beneficiary not found.
- 429 – too many attempts.
- 500 – retry later.
