External ID support to simplify transaction, vault, and wallet reconciliation
This feature is in BETA. Please reach out if you would like to use it.
Why
Palisade Transfers API makes it easy to specify an intent to move an asset and have the platform translate and securely execute a transaction in order to fulfil that intent. This API reduces errors and risks related to executing raw transactions by abstracting the underlying blockchain transaction away.
However, every call to the Transfers API creates a new intent. There is no way for the platform to differentiate between an existing request and a new request as there is no relatability between the two.
The final product of a Transfer call is a Transaction that is registered on Palisade and is executed in accordance with controls and execution instructions. While every transaction is uniquely identifiable with a transaction ID, it is up to the caller to map it to their internal ID for tracking purposes.
Similarly, when creating vaults and wallets through their respective APIs, customers need to manually map the system-generated IDs to their internal systems for tracking and reconciliation purposes, creating unnecessary overhead and potential for errors.
Feature
Today, we are releasing support for externalId
across Transfers, Vaults and Wallets.
Transfers
It is an optional field and may be used in the Create Transfer request body as follows:
{
"destinationAddress": "rMhieePimPBNQZByxQxX1HXY6VyxEep2JE",
"qty": "0.000003",
"symbol": "XRP",
"externalId": "95a770cd-8766-4dd5-938c-3c10ead1c4b1"
}
This will result in a response similar to the following (containing the same externalId
field):
{
"id": "0195b3dd-5b95-7d89-8528-f22af192af39",
...
"status": "REQUESTED",
"action": "PALISADE_TRANSFER",
"externalId": "95a770cd-8766-4dd5-938c-3c10ead1c4b1",
...
Note the externalId
in the response.
Subsequent calls to the Create Transfer API using the same externalId
value will return the same Transaction object.
Vaults
It is an optional field and may be used in the Create Vault request body as follows:
{
"name": "Treasury",
"externalId": "95a770cd-8766-4dd5-938c-3c10ead1c4b1"
}
This will result in a response similar to the following (containing the same externalId
field):
{
"id": "0195b3dd-5b95-7d89-8528-f22af192af39",
...
"name": "Treasury",
"externalId": "95a770cd-8766-4dd5-938c-3c10ead1c4b1",
...
Note the externalId
in the response.
Subsequent calls to the Create Vault API using the same externalId
value will return the same Vault object.
Wallets
It is an optional field and may be used in the Create Wallet request body as follows:
{
"name": "USD Issuance",
"blockchain": "AVALANCHE",
"keystore": "HSM",
"externalId": "95a770cd-8766-4dd5-938c-3c10ead1c4b1"
}
This will result in a response similar to the following (containing the same externalId
field):
{
"id": "0195b3dd-5b95-7d89-8528-f22af192af39",
...
"name": "USD Issuance",
"blockchain": "AVALANCHE",
"keystore": "HSM",
"externalId": "95a770cd-8766-4dd5-938c-3c10ead1c4b1",
...
Note the externalId
in the response.
Subsequent calls to the Create Wallet API using the same externalId
value will return the same Wallet object.
Properties of externalId
field
externalId
fieldexternalId
field is optional and nullable. Empty string value is treated as a null value.externalId
field if specified must be minimum of 1 character and a maximum of 64 characters in length.externalId
must be unique org-wide. This means that two wallets cannot have transactions containing the sameexternalId
.- The API will create a new object for every request that has
externalId
set to null.