Skip to main content
POST
/
private
/
Pay
/
transfer
/
create
Create a pay transfer
curl --request POST \
  --url https://api.kraken.com/0/private/Pay/transfer/create \
  --header 'API-Key: <api-key>' \
  --header 'API-Sign: <api-key>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "nonce": "<string>",
  "amount": "<string>",
  "asset": "<string>",
  "to": "<string>",
  "external_id": "<string>",
  "note": "<string>",
  "return_for": "<string>"
}
'
{
  "error": [
    {
      "severity": "E",
      "errorClass": "<string>",
      "type": "<string>",
      "errorMessage": "<string>"
    }
  ],
  "result": {}
}

Documentation Index

Fetch the complete documentation index at: https://kraken-sandbox.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

API-Key
string
header
required

The "API-Key" header should contain your API key.

API-Sign
string
header
required

Authenticated requests should be signed with the "API-Sign" header, using a signature generated with your private key, nonce, encoded payload, and URI path.

Body

application/json
nonce
string
required

Nonce used in construction of API-Sign header

amount
required

The amount to be transferred, denominated in asset.

asset
string
required

The name of the asset to be transferred. It is assumed that this is always a "currency" asset.

to
string
required

The kraktag to send the transfer to

external_id
string
required

Your (the API user's) unique id to globally identify transfers and requests.

We will accept anything from 1-16 bytes, the format is base64 without padding ( https://en.wikipedia.org/wiki/Base64#Decoding_Base64_without_padding )

This is the id you will use to identify all transfers and requests in the API and also in the callback we send you.

You MUST make sure this is commited in your database before calling our API, that way if you don't get a response, you can make the same call again and we'll fail with an error saying your id is already used. (this is the only way to prevent double requests or sends)

We highly recommend you generate and send a UUID here, but if instead you have a database auto-increment id that is 64 bits, just send that, perhaps pre-pended by an application id or something. The format is completely up to you but keep in mind it must be forever unique across all your transfers and requests.

note
string | null

An optional note which will be viewable by both the sender and recipient.

return_for
string | null

An optional external id of another transfer this transfer is a return for.

Response

200 - application/json
error
object[]
required
result
object