Emit a simple transfer

The principle of T-REX transfers is that all the validation is performed onchain (compliance and eligibility), without any form of offchain validation done by Tokeny.

Thus, we do not offer any transfer endpoint for the investor, but we created a "validate transfer" endpoint to make sure you are not issuing a transfer that will fail onchain.

This "validate transfer" endpoint checks:

  • The eligibility, i.e. validity of the receiver ONCHAINID and wallet: is it whitelisted, does it hold the required claims for this T-REX?
  • That the balance is sufficient on the emitter wallet
  • That the transfer doesn't break the compliance rules linked to the T-REX (the recipient is not from a blacklisted country, the amount doesn't break daily/monthly limits, etc).

Authentication

cURL request

To leverage the T-REX Servicing API, you will first need to retrieve an authentication token that will allow you to perform this operation. For this use case, please make sure to get an authentication token corresponding to an investor account. If any doubts, please refer to our guide on permissions and roles.

In the testing environment, call the following signin endpoint:

curl --request POST \
  --url https://servicing-api-testing.tokeny.com/api/auth/signin \
  --header 'Content-Type: application/json' \
  --data '{"email":"[email protected]","password":"MyP@$$word"}'

Response

{
    "token": "<jwt>"
}

Validate the transfer feasibility

cURL request

curl 'https://servicing-api-testing.tokeny.com/api/tokens/:token_id/actions/validate-transfer' \
  -H 'authorization: Bearer <jwt>' \
  -H 'content-type: application/json' \
  --data-binary '{
   "tokenQuantity":"<quantity>",
   "tokenAddress":"<token_address>",
   "senderWallet":"<sender_wallet>",
   "recipientWallet":"<recipient_wallet>"
}'

Parameters

  • token_id: The identifier of the token
  • quantity: The quantity of tokens to be transferred
  • tokenAddress: The address of the T-REX
  • senderWallet: The wallet sending the T-REX
  • recipientWallet: The wallet receiving the T-REX

Response

{
   "valid":true
}

Troubleshooting

{
    "statusCode": 400,
    "timestamp": "2020-12-08T15:58:16.371Z",
    "path": "/api/tokens/:token_id/actions/validate-transfer",
    "errors": [
        {
            "target": {
                "tokenQuantity": "<quantity>",
                "ethereumNetwork": "<network>",
                "tokenAddress": "<token_address>",
                "senderWallet": "<sender_wallet>",
                "recipientWallet": "<recipient_wallet>"
            },
            "value": "-1",
            "property": "tokenQuantity",
            "children": [],
            "constraints": {
                "notContains": "tokenQuantity should not contain a - string"
            }
        }
    ],
    "message": "error found while validating input data.",
    "name": "REST_VALIDATION_ERROR"
}

The errors.constraints contains the validation errors and the constraint violated by the request.
In errors.property, you will find the property causing the error.
In errors.target, you will see your request.

Issue a simple transfer

We currently do not offer an investor endpoint for transfer, as everything is done directly using their wallet (for example, using Metamask).

Though, as an agent, you can use the forced transfer function.

Force transfer

Authenticate using your agent account to perform those actions.

cURL request

curl -XPOST 'https://servicing-api-testing.tokeny.com/api/tokens/:token_id/actions/forced-transfer' \
  -H 'authorization: Bearer <jwt>' \
  -H 'content-type: application/json' \
  --data-binary '{
   "tokenQuantity":"<quantity>",
   "senderWallet":"<sender_wallet>",
   "recipientWallet":"<recipient_wallet>"
}'

Parameters

  • token_id: The identifier of the token in the
  • quantity: The quantity of tokens to be transferred
  • senderWallet: The wallet sending the T-REX
  • recipientWallet: The wallet receiving the T-REX

Response

As a response, you will receive the following structure accompanied with a HTTP 202 code.

{
   "transactionId":"<transaction_id>",
   "hash":"<transaction_hash>",
   "id":"<id>"
}

Troubleshooting

You will receive an HTTP 400 when the data of the transfer is not valid, with the following structure:

{
    "statusCode": 400,
    "timestamp": "2020-12-08T15:58:16.371Z",
    "path": "/api/tokens/:token_id/actions/validate-transfer",
    "errors": [
        {
            "target": {
                "tokenQuantity": "<quantity>",
                "senderWallet": "<sender_wallet>",
                "recipientWallet": "<recipient_wallet>"
            },
            "value": "-1",
            "property": "tokenQuantity",
            "children": [],
            "constraints": {
                "notContains": "tokenQuantity should not contain a - string"
            }
        }
    ],
    "message": "error found while validating input data.",
    "name": "REST_VALIDATION_ERROR"
}

The errors.constraints contains the validation errors and the constraint violated by the request.
In errors.property, you will find the property causing the error.
In errors.target, you will see your request.