1.4.3. Money transfer¶
Funds transfer¶
Request¶
HTTP Request
POST https://${hostname}/paynet/api/v3/transfer/{endpointId}/{clientOrderId}
Request body
In the request body, supply data with the following structure:
{
"sender": {
"address": {
"city": "string",
"country": "string",
"postcodeZip": "string",
"state": "string",
"street": "string",
"street2": "string"
},
"firstName": "string",
"lastName": "string",
"phone": "string",
"email": "string",
"ipAddress": "string"
},
"receiver": {
"address": {
"city": "string",
"country": "string",
"postcodeZip": "string",
"state": "string",
"street": "string",
"street2": "string"
},
"firstName": "string",
"lastName": "string",
"phone": "string"
},
"sourceOfFunds": {
"card": {
"expiry": {
"month": "integer",
"year": "integer"
},
"holder":{
"firstName": "string",
"lastName": "string"
},
"number": "string",
"securityCode": "string"
},
"reference": {
"cardReferenceId": "long",
"securityCode": "string"
},
"cardMapping": {
"subscriberId": "string",
"subscriberType": "enum",
"alias": "string",
"securityCode": "string"
}
},
"destinationOfFunds": {
"card": {
"number": "string",
},
"reference": {
"cardReferenceId": "long"
},
"cardMapping": {
"subscriberId": "string",
"subscriberType": "enum",
"alias": "string"
}
},
"order": {
"description": "string",
"siteUrl": "string",
"purpose": "string"
},
"urls": {
"redirectUrl": "string",
"callbackUrl": "string"
},
"transaction": {
"amountCentis": "long",
"currency": "string"
}
}
Property name | Value | Description |
---|---|---|
Required properties | ||
sourceOfFunds | object | |
sourceOfFunds.card | object | only one of these subtypes (card, reference, cardMapping) should be populated |
sourceOfFunds.card.expiry | object | |
sourceOfFunds.card.expiry.month | integer(2) | |
sourceOfFunds.card.expiry.year | integer(2) | |
sourceOfFunds.card.holder | object | |
sourceOfFunds.card.holder.firstName | string(1-50) | |
sourceOfFunds.card.holder.lastName | string(1-50) | |
sourceOfFunds.card.number | string(9-19) | the source card number (PAN) |
sourceOfFunds.card.securityCode | string(3-4) | |
sourceOfFunds.reference | object | only one of these subtypes (card, reference, cardMapping) should be populated |
sourceOfFunds.reference.cardReferenceId | long | the source card reference identifier |
sourceOfFunds.reference.securityCode | string(3-4) | |
sourceOfFunds.cardMapping | object | only one of these subtypes (card, reference, cardMapping) should be populated |
sourceOfFunds.cardMapping.subscriberId | string(1-99) | |
sourceOfFunds.cardMapping.subscriberType | enum | Possible values: PHONE_NUMBER , EMAIL_ADDRESS , TWITTER |
sourceOfFunds.cardMapping.alias | string(1-20) | |
sourceOfFunds.cardMapping.securityCode | string(3-4) | |
destinationOfFunds | object | |
destinationOfFunds.card | object | only one of these subtypes (card, reference, cardMapping) should be populated |
destinationOfFunds.card.number | string(9-19) | the destination card number (PAN) |
destinationOfFunds.reference | object | only one of these subtypes (card, reference, cardMapping) should be populated |
destinationOfFunds.reference.cardReferenceId | long | the destination card reference identifier |
destinationOfFunds.cardMapping | object | only one of these subtypes (card, reference, cardMapping) should be populated |
destinationOfFunds.cardMapping.subscriberId | string(1-99) | |
destinationOfFunds.cardMapping.subscriberType | enum | Possible values: PHONE_NUMBER , EMAIL_ADDRESS , TWITTER |
destinationOfFunds.cardMapping.alias | string(1-20) | |
transaction | object | |
transaction.amountCentis | long | transaction amount, 1.00 EUR = 100 centis |
transaction.currency | string(3) | upper case letters (ISO 4217 alpha code) |
Conditional properties | ||
sender | object | Must be populated if sourceOfFunds.card is populated |
sender.address | object | |
sender.address.city | string(1-100) | |
sender.address.country | string(3) | ISO 3166-1 alpha-3 code |
sender.address.postcodeZip | string(1-10) | |
sender.address.state | string(1-20) | Must be filled if address is filled and country has states |
sender.address.street | string(1-50) | |
sender.firstName | string(1-50) | |
sender.lastName | string(1-50) | |
sender.ipAddress | string(1-45) | |
sender.paymentPassword | string(1-128) | Some Acquirers require additional payment passwords for transfer operations |
receiver | object | Must be populated if destinationOfFunds.card is populated |
receiver.address | object | |
receiver.address.city | string(1-100) | |
receiver.address.country | string(3) | ISO 3166-1 alpha-3 code |
receiver.address.postcodeZip | string(1-10) | |
receiver.address.state | string(1-20) | Must be filled if address is filled and country has states |
receiver.address.street | string(1-50) | |
receiver.firstName | string(1-50) | |
receiver.lastName | string(1-50) | |
Optional properties | ||
sender.address.street2 | string(1-50) | |
sender.phone | string(1-20) | |
sender.email | string(1-128) | |
receiver.address.street2 | string(1-50) | |
receiver.phone | string(1-20) | |
order | object | |
order.description | string(128) | Brief transaction description. May be mandatory for certain Acquirer Banks |
order.siteUrl | string(128) | URL of website associated with the transaction |
order.purpose | string(128) | May be used for better transaction control or additional checks |
urls | object | |
urls.redirectUrl | string(128) | URL to which cardholder will be redirected after transfer has been completed |
urls.callbackUrl | string(128) | URL to which a notification using HTTP request will be sent upon completion |
Response¶
If successful, this method returns the following response body:
{
"clientOrderId": "string",
"paynetOrderId": "long",
"sessionToken": "string",
"requestSerialNumber": "string"
}
Property name | Value | Description |
---|---|---|
clientOrderId | string | order identifier assigned by the caller |
paynetOrderId | string | order identifier assigned by the server |
sessionToken | string | the session token which is to be used when calling Transfer status |
In case of a failure, this method returns the following response body:
{
"error": {
"code": "string",
"message": "string"
},
"clientOrderId": "string"
}
Property name | Value | Description |
---|---|---|
error | object | |
error.code | string | the error code |
error.message | string | the description of the error |
clientOrderId | string | order identifier assigned by the caller |
Funds transfer form¶
Request¶
HTTP Request
POST https://${hostname}/paynet/api/v3/transfer-form/{endpointId}/{clientOrderId}
Request body
In the request body, supply data with the following structure:
{
"sender": {
"address": {
"city": "string",
"country": "string",
"postcodeZip": "string",
"state": "string",
"street": "string",
"street2": "string"
},
"firstName": "string",
"lastName": "string",
"phone": "string",
"email": "string",
"ipAddress": "string"
},
"receiver": {
"address": {
"city": "string",
"country": "string",
"postcodeZip": "string",
"state": "string",
"street": "string",
"street2": "string"
},
"firstName": "string",
"lastName": "string",
"phone": "string"
},
"sourceOfFunds": {
"reference": {
"cardReferenceId": "long",
"securityCode": "string"
},
"cardMapping": {
"subscriberId": "string",
"subscriberType": "enum",
"alias": "string",
"securityCode": "string"
}
},
"destinationOfFunds": {
"reference": {
"cardReferenceId": "long"
},
"cardMapping": {
"subscriberId": "string",
"subscriberType": "enum",
"alias": "string"
}
},
"order": {
"description": "string",
"siteUrl": "string",
"purpose": "string"
},
"urls": {
"redirectUrl": "string",
"callbackUrl": "string"
},
"transaction": {
"amountCentis": "long",
"currency": "string"
}
}
Property name | Value | Description |
---|---|---|
Required properties | ||
transaction | object | |
transaction.amountCentis | long | transaction amount, 1.00 EUR = 100 centis |
transaction.currency | string(3) | upper case letters (ISO 4217 alpha code) |
Conditional properties | ||
sourceOfFunds | object | |
sourceOfFunds.reference | object | only one of these subtypes (reference, cardMapping) should be populated |
sourceOfFunds.reference.cardReferenceId | long | the source card reference identifier |
sourceOfFunds.reference.securityCode | string(3-4) | |
sourceOfFunds.cardMapping | object | only one of these subtypes (reference, cardMapping) should be populated |
sourceOfFunds.cardMapping.subscriberId | string(1-99) | |
sourceOfFunds.cardMapping.subscriberType | enum | Possible values: PHONE_NUMBER , EMAIL_ADDRESS , TWITTER |
sourceOfFunds.cardMapping.alias | string(1-20) | |
sourceOfFunds.cardMapping.securityCode | string(3-4) | |
destinationOfFunds | object | |
destinationOfFunds.reference | object | only one of these subtypes (reference, cardMapping) should be populated |
destinationOfFunds.reference.cardReferenceId | long | the destination card reference identifier |
destinationOfFunds.cardMapping | object | only one of these subtypes (reference, cardMapping) should be populated |
destinationOfFunds.cardMapping.subscriberId | string(1-99) | |
destinationOfFunds.cardMapping.subscriberType | enum | Possible values: PHONE_NUMBER , EMAIL_ADDRESS , TWITTER |
destinationOfFunds.cardMapping.alias | string(1-20) | |
sender | object | Must be populated if sourceOfFunds.cardReferenceId or sourceOfFunds.cardMapping is NOT populated |
sender.address | object | |
sender.address.city | string(1-100) | |
sender.address.country | string(3) | ISO 3166-1 alpha-3 code |
sender.address.postcodeZip | string(1-10) | |
sender.address.state | string(1-20) | Must be filled if address is filled and country has states |
sender.address.street | string(1-50) | |
sender.firstName | string(1-50) | |
sender.lastName | string(1-50) | |
sender.ipAddress | string(1-45) | |
sender.paymentPassword | string(1-128) | Some Acquirers require additional payment passwords for transfer operations |
receiver | object | Must be populated if destinationOfFunds.cardReferenceId or destinationOfFunds.cardMapping is NOT populated |
receiver.address | object | |
receiver.address.city | string(1-100) | |
receiver.address.country | string(3) | ISO 3166-1 alpha-3 code |
receiver.address.postcodeZip | string(1-10) | |
receiver.address.state | string(1-20) | Must be filled if address is filled and country has states |
receiver.address.street | string(1-50) | |
receiver.firstName | string(1-50) | |
receiver.lastName | string(1-50) | |
Optional properties | ||
sender.address.street2 | string(1-50) | |
sender.phone | string(1-20) | |
sender.email | string(1-128) | |
receiver.address.street2 | string(1-50) | |
receiver.phone | string(1-20) | |
order | object | |
order.description | string(128) | Brief transaction description. May be mandatory for certain Acquirer Banks |
order.siteUrl | string(128) | URL of website associated with the transaction |
order.purpose | string(128) | May be used for better transaction control or additional checks |
urls | object | |
urls.redirectUrl | string(128) | URL to which cardholder will be redirected after transfer has been completed |
urls.callbackUrl | string(128) | URL to which a notification using HTTP request will be sent upon completion |
Request body example¶
This example shows the body of transfer form request that should be sent in “Credit card to card reference” case.
{
"sender": {
"address": {
"city": "Moscow",
"country": "RUS",
"postcodeZip": "123123",
"street": "Red sq, 1"
},
"firstName": "John",
"lastName": "Smith",
"ipAddress": "127.0.0.1"
},
"destinationOfFunds": {
"reference": {
"cardReferenceId": "11223344"
}
},
"order": {
"description": "Test order",
"siteUrl": "https://example.com",
"purpose": "transfer to reference"
},
"urls": {
"redirectUrl": "https://example.com/finalorder",
"callbackUrl": "https://example.com/callback"
},
"transaction": {
"amountCentis": "12300",
"currency": "RUB"
}
}
Response¶
If successful, this method returns the following response body:
{
"clientOrderId": "string",
"paynetOrderId": "long",
"sessionToken": "string",
"requestSerialNumber": "string",
"redirectUrl": "string"
}
Property name | Value | Description |
---|---|---|
clientOrderId | string | order identifier assigned by the caller |
paynetOrderId | string | order identifier assigned by the server |
sessionToken | string | the session token which is to be used when calling Transfer status |
redirectUrl | string | URL to which cardholder needs to be redirected to fill transfer form |
In case of a failure, this method returns the following response body:
{
"error": {
"code": "string",
"message": "string"
},
"clientOrderId": "string"
}
Property name | Value | Description |
---|---|---|
error | object | |
error.code | string | the error code |
error.message | string | the description of the error |
clientOrderId | string | order identifier assigned by merchant |
Transfer status¶
Request¶
HTTP Request
POST https://${hostname}/paynet/api/v3/transfer/status/{endpointId}/{clientOrderId}
Request body
In the request body, supply data with the following structure:
{
"sessionToken": "string"
}
Property name | Value | Description |
---|---|---|
Required properties | ||
sessionToken | string(16-36) | the session token of transfer transaction |
Response¶
If successful, this method returns the following response body:
{
"bankOrderId": "string",
"clientOrderId": "string",
"redirectUrl": "string",
"state": "enum",
"errorCode": "integer",
"errorMessage": "string"
}
Property name | Value | Description |
---|---|---|
clientOrderId | string | order identifier assigned by the caller |
state | enum | possible values: PROCESSING , REDIRECT_REQUEST , APPROVED , DECLINED , |
FILTERED , ERROR , UNKNOWN |
||
Conditional properties | ||
bankOrderId | string(128) | required if state is APPROVED or DECLINED |
redirectUrl | string(128) | required if state is REDIRECT_REQUEST |
Optional properties | ||
errorCode | integer | error code (in case of error) |
errorMessage | string(256) | error message (in case of error) |
createdCardReferences | object | card references for new cards may be created automatically in specific cases. Please ask your manager for details |
sourceCardReferenceId | long | created card reference for source card |
destinationCardReferenceId | long | created card reference for destination card |
In case of a failure, this method returns the following response body:
{
"error": {
"code": "string",
"message": "string"
},
"clientOrderId": "string"
}
Property name | Value | Description |
---|---|---|
error | object | |
error.code | string | the error code |
error.message | string | the description of the error |
clientOrderId | string | order identifier assigned by the caller |