Skip to main content

Transfer API Fundamentals

The Transfer API is built on REST principles, using standard HTTP methods and returning JSON-encoded responses. This guide covers the fundamentals you need to integrate successfully.

Base URL​

Production: https://wallet.paysera.com/transfer/rest/v1

The current API version is v2. The API uses REST principles with standard HTTP methods (GET, POST, PUT, DELETE) and JSON for requests and responses.

Request Format​

Content Type​

All POST and PUT requests must use JSON:

POST /transfer/rest/v1/transfers HTTP/1.1
Host: wallet.paysera.com
Content-Type: application/json

Character Encoding​

Always use UTF-8 encoding for request and response bodies:

Content-Type: application/json; charset=utf-8

Request Headers​

Required Headers​

Authorization: MAC id="client_id", ts="1234567890", nonce="random", mac="signature"
Content-Type: application/json

Optional Headers​

Accept: application/json
Accept-Language: en
User-Agent: YourApp/1.0

Request Body Example​

{
"amount": {
"amount": "100.00",
"currency": "EUR"
},
"beneficiary": {
"type": "bank",
"name": "John Doe",
"bank_account": {
"iban": "LT123456789012345678"
}
},
"payer": {
"account_number": "EVP9876543210"
},
"purpose": {
"details": "Payment for services"
},
"callback": {
"url": "https://your-server.com/webhooks/transfer"
}
}

Response Format​

Success Response​

Successful requests return HTTP status 200 with JSON body:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
"id": "239441503",
"status": "waiting",
"amount": {
"amount": "100.00",
"currency": "EUR"
},
"created_at": 1596014146,
"confirmation_url": "https://bank.paysera.com/transfer/confirm/abc123"
}

Response Structure​

  • Always present - Fields that always exist
  • Optional - Fields that may be null or missing entirely
Null Values

If optional fields are null, they are omitted from the response entirely. Don't assume optional fields will always be present.

Example with Optional Fields​

{
"id": "123456",
"status": "done",
"amount": {
"amount": "50.00",
"currency": "EUR"
}
// Note: optional fields are omitted (not included as null)
}

Error Handling​

Error Response Structure​

When an error occurs, the API returns a non-200 status code with an error object:

{
"error": "error_code",
"error_description": "Human-readable description",
"error_uri": "https://docs.paysera.com/errors/error_code"
}
FieldTypeAlways PresentDescription
errorstringYesMachine-readable error code
error_descriptionstringUsuallyHuman-readable description
error_uristringSometimesLink to error documentation

Common HTTP Status Codes​

Status CodeError CodeDescription
200-Success
400invalid_requestMalformed request or invalid JSON
400invalid_parametersMissing or invalid parameters
401unauthorizedAuthentication failed
403forbiddenInsufficient permissions
404not_foundResource doesn't exist
406not_acceptableUnsupported format
409invalid_stateInvalid state transition
500internal_server_errorServer error - retry or contact support

Common Patterns​

POST /transfer/rest/v1/transfers HTTP/1.1
Host: wallet.paysera.com
Authorization: MAC id="...", ts="...", nonce="...", mac="..."
Content-Type: application/json

{
"amount": {
"amount": "100.00",
"currency": "EUR"
},
"beneficiary": {
"type": "bank",
"name": "John Doe",
"bank_account": {
"iban": "LT123..."
}
},
"payer": {
"account_number": "EVP9876543210"
},
"purpose": {
"details": "Payment description"
}
}

Additional Resources​

Support​

Need help with complex integrations?

Contact: tech_support@paysera.com