NAV Navigation
JavaScript Shell

Unbound Crypto Asset Security Platform ("CASP") Management API v1.0.2106

Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

Unbound`s Crypto Asset Security Platform ("CASP") provides the advanced technology and the architecture to secure crypto asset transactions. The crypto asset solution contains the CASP service and different end points (humans or BOTs).

CASP provides the framework to create Accounts, which hold multiple Vaults where secrets are stored. Access control is managed by the Quorum Policy for all of the Participants.

For information about using these APIs, see the Unbound CASP Developers Guide, or the API references:

For more information about CASP, see:

For more information about the BIP standards, see:

Base URLs:

Email: Unbound Security Support Web: Unbound Security Support

System

Get configuration

Code samples


fetch('/api/v1.0/config',
{
  method: 'GET'

})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X GET /api/v1.0/config

GET /config

Returns the configuration including supported blockchain providers and adaptors

Responses

Status Meaning Description Schema
default Default Returns configuration None

Get system status

Code samples


fetch('/api/v1.0/status',
{
  method: 'GET'

})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X GET /api/v1.0/status

GET /status

Used for checking the system operational status

Responses

Status Meaning Description Schema
200 OK Current system status None

Ledger Operations

Get ledger address balance

Code samples


const headers = {
  'Accept':'application/json'

};

fetch('/api/v1.0/ledgers/{ledgerId}/addresses/{address}/balance',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X GET /api/v1.0/ledgers/{ledgerId}/addresses/{address}/balance \
  -H 'Accept: application/json'

GET /ledgers/{ledgerId}/addresses/{address}/balance

Request balance for one or more assets per ledger address.

Parameters

Name In Type Required Description
ledgerId path string true none
address path string true The target address the balance is required for
assets query array[string] false A list of asset symbols the balance is requested for. If this parameter is not provided, then the default asset defined for the ledger is used.

Example responses

200 Response

{
  "address": "0x7827D7fDb2B161a27fFeD3cC25C560D7aEFE2BD5",
  "balances": [
    {
      "asset": "YEENUS",
      "amount": 885.82
    },
    {
      "asset": "ETH",
      "amount": 8.2221820926
    },
    {
      "asset": "BOKKY",
      "amount": 0
    }
  ]
}

Responses

Status Meaning Description Schema
200 OK Requested balances AddressBalanceResponse
422 Unprocessable Entity One or more the provided arguments is invalid AppError

Validate ledger address

Code samples


const headers = {
  'Accept':'application/json'

};

fetch('/api/v1.0/ledgers/{ledgerId}/addresses/{address}/valid',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X GET /api/v1.0/ledgers/{ledgerId}/addresses/{address}/valid \
  -H 'Accept: application/json'

GET /ledgers/{ledgerId}/addresses/{address}/valid

Check the validity of a ledger address.

Parameters

Name In Type Required Description
ledgerId path string true none
address path string true The address to check

Example responses

200 Response

{
  "address": "0x7827D7fDb2B161a27fFeD3cC25C560D7aEFE2BD5",
  "valid": true
}

Responses

Status Meaning Description Schema
200 OK Validity test result Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
» address string false none Target address that was checked
» valid boolean false none True if the address is valid or false otherwise

Convert public key to ledger address

Code samples

const inputBody = '{
  "keys": [
    "3056301006072A8648CE3D020106052B8104000A03420004A17D64FCFCE5FE10943FCC7E6BBDE1BD49EBC596297813C4FE3CCB0343B44236DD189B32B0C88D6F12067F1237A95286C82162B078D686A79C986E1204A6E162"
  ]
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json'

};

fetch('/api/v1.0/ledgers/{ledgerId}/address-from-publickey',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X POST /api/v1.0/ledgers/{ledgerId}/address-from-publickey \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json'

POST /ledgers/{ledgerId}/address-from-publickey

Convert a public key to ledger address

Body parameter

{
  "keys": [
    "3056301006072A8648CE3D020106052B8104000A03420004A17D64FCFCE5FE10943FCC7E6BBDE1BD49EBC596297813C4FE3CCB0343B44236DD189B32B0C88D6F12067F1237A95286C82162B078D686A79C986E1204A6E162"
  ]
}

Parameters

Name In Type Required Description
ledgerId path string true none
body body object false none
» keys body [string] false none

Example responses

200 Response

{
  "items": [
    {
      "address": "0x63e4a30a5ce88660BBf99D7B0547E718558bC662"
    }
  ]
}

Responses

Status Meaning Description Schema
200 OK Keys converted successfully Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
» items [Address] false none none
»» address string false none none

Vault Operations

Refer to the Vault Operations section in the Unbound CASP Developers Guide.

For some functionality, you may need to refer to the BYOW Vault Operation APIs. For example, the endpoint to create a new vault is described there.

Get wallet balance

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'API_KEY'

};

fetch('/api/v1.0/vaults/{vaultId}/balance',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X GET /api/v1.0/vaults/{vaultId}/balance \
  -H 'Accept: application/json' \
  -H 'Authorization: API_KEY'

GET /vaults/{vaultId}/balance

Get vault wallet balance

Parameters

Name In Type Required Description
vaultId path string true none
assets query array[string] false A list of asset symbols the balance is requested for. If this parameter is not provided, then the default asset defined for the ledger is used.
coin query string false none
account query string false none

Example responses

200 Response

{
  "address": "0x7827D7fDb2B161a27fFeD3cC25C560D7aEFE2BD5",
  "balances": [
    {
      "asset": "YEENUS",
      "amount": 885.82
    },
    {
      "asset": "ETH",
      "amount": 8.2221820926
    },
    {
      "asset": "BOKKY",
      "amount": 0
    }
  ]
}

Responses

Status Meaning Description Schema
200 OK Requested vault balance VaultBalanceResponse

Create withdrawal request

Code samples

const inputBody = '{
  "amount": "1.3",
  "asset": "YEENUS",
  "recipientAddress": "0x7827D7fDb2B161a27fFeD3cC25C560D7aEFE2BD5",
  "description": "Payment 3332",
  "fee": "HIGH"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'API_KEY'

};

fetch('/api/v1.0/vaults/{vaultId}/withdrawals',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X POST /api/v1.0/vaults/{vaultId}/withdrawals \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: API_KEY'

POST /vaults/{vaultId}/withdrawals

Create a new withdrawal request.
The request is sent to CASP and starts the quorum approval process, which can take some time. Once the request is approved, CASP calls the POST /sign_complete_callback and the required signed transactions are sent to the ledger.

Body parameter

{
  "amount": "1.3",
  "asset": "YEENUS",
  "recipientAddress": "0x7827D7fDb2B161a27fFeD3cC25C560D7aEFE2BD5",
  "description": "Payment 3332",
  "fee": "HIGH"
}

Parameters

Name In Type Required Description
vaultId path string true none
body body WithdrawalRequest true none

Example responses

200 Response

{
  "id": "9767714e-4a32-4264-af91-0c48d437e698",
  "status": "EXECUTING",
  "isComplete": false,
  "appData": {
    "txs": [
      {
        "serialized": "f868808477359400828ccd94f6ff95d53e08c9660dc7820fd5a775484f77183a80b844a9059cbb0000000000000000000000007827d7fdb2b161a27ffed3cc25c560d7aefe2bd50000000000000000000000000000000000000000000000000000000007bfa480808080"
      }
    ]
  },
  "description": "dasdfa dfasdf "
}

Responses

Status Meaning Description Schema
200 OK Withdrawal request created successfully Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
» operationID string false none The operation ID from CASP
» status string false none The request status. Normally this is EXECUTING.
» isComplete boolean false none The request completion status. Normally this is false as the request has just been submitted.
» description string false none The request description
» recipientVault string false none Optionally the recipient vault
» appData WithdrawalProviderData false none none
»» request WithdrawalRequest false none none
»»» recipientAddress string true none The ledger address to recieve the assets
»»» recipientVault string false none The target vault ID for internal transfers (originally for staking-pools)
»»» asset string false none (Optional) The asset to send. If not provided, the default ledger asset is used.
»»» amount any true none The asset amount to send

oneOf

Name Type Required Restrictions Description
»»»» anonymous number(double) false none none

xor

Name Type Required Restrictions Description
»»»» anonymous string false none none

continued

Name Type Required Restrictions Description
»»» description string true none A short text that describes the puprpose of this withdrawal.
»»» fee string false none A fee constant. Usually specificied as 'HIGH', 'MEDIUM' or 'LOW', but some ledgers use custom fee constants. If not provided, the ledger's default fee is used.
»» txs [object] false none A list of ledger tranasactions created for the withdrawal
»»» serialized string false none The HEX encoded serialized transaction

Update vault info

Code samples

const inputBody = '{
  "name": "string",
  "description": "string"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'*/*',
  'Authorization':'API_KEY'

};

fetch('https://casp-server/casp/api/v1.0/mng/vaults/{id}',
{
  method: 'PUT',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X PUT https://casp-server/casp/api/v1.0/mng/vaults/{id} \
  -H 'Content-Type: application/json' \
  -H 'Accept: */*' \
  -H 'Authorization: Bearer API_KEY'

PUT /casp/api/v1.0/mng/vaults/{id}

Updates the details of an existing vault. The vault name and description can be updated.

Body parameter

{
  "name": "string",
  "description": "string"
}

Parameters

Name In Type Required Description
id path string true Vault ID
body body UpdateVaultRequest true Update vault Request

Example responses

404 Response

Responses

Status Meaning Description Schema
200 OK OK None
202 Accepted Vault update accepted and needs to be approved by admin quorum. None
404 Not Found Vault not found CASPErrorResponse
500 Internal Server Error Update vault failed CASPErrorResponse

Delete an existing vault

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'API_KEY'

};

fetch('https://casp-server/casp/api/v1.0/mng/vaults/{id}',
{
  method: 'DELETE',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X DELETE https://casp-server/casp/api/v1.0/mng/vaults/{id} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer API_KEY'

DELETE /casp/api/v1.0/mng/vaults/{id}

Deletes an existing vault. Only vaults which are not activated yet can be deleted.

Parameters

Name In Type Required Description
id path string true Vault ID

Example responses

403 Response

{
  "type": "string",
  "title": "string",
  "details": "string",
  "status": 0
}

Responses

Status Meaning Description Schema
200 OK OK None
403 Forbidden Vault deletion is not allowed CASPErrorResponse
404 Not Found Vault not found CASPErrorResponse
500 Internal Server Error Delete vault failed CASPErrorResponse

Resend sign transaction operation

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'API_KEY'

};

fetch('https://casp-server/casp/api/v1.0/mng/operations/sign/{operationid}/resend',
{
  method: 'POST',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X POST https://casp-server/casp/api/v1.0/mng/operations/sign/{operationid}/resend \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer API_KEY'

POST /casp/api/v1.0/mng/operations/sign/{operationid}/resend

Resend the sign operation metadata. This tries to resend the results of the sign operation and complete the coin transaction

Parameters

Name In Type Required Description
operationid path string true Operation ID

Example responses

400 Response

{
  "type": "string",
  "title": "string",
  "details": "string",
  "status": 0
}

Responses

Status Meaning Description Schema
200 OK OK None
400 Bad Request Cannot resend the sign operation CASPErrorResponse
404 Not Found Operation not found CASPErrorResponse
500 Internal Server Error Resend Operation failed CASPErrorResponse

List UKC vault keys

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'API_KEY'

};

fetch('https://casp-server/casp/api/v1.0/mng/vaults/{vaultId}/ukcKeys',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X GET https://casp-server/casp/api/v1.0/mng/vaults/{vaultId}/ukcKeys \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer API_KEY'

GET /casp/api/v1.0/mng/vaults/{vaultId}/ukcKeys

List UKC vault keys

Parameters

Name In Type Required Description
vaultId path string true Vault ID

Example responses

200 Response

[
  {
    "ukcKeyId": "string"
  }
]

Responses

Status Meaning Description Schema
200 OK OK Inline
404 Not Found Vault not found CASPErrorResponse
500 Internal Server Error List UKC keys failed CASPErrorResponse

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [UkcVaultKey] false none none
» ukcKeyId string true none The key UKC key ID

Public key calculation status

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'API_KEY'

};

fetch('https://casp-server/casp/api/v1.0/mng/operations/calculatePublicKey/{operationid}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X GET https://casp-server/casp/api/v1.0/mng/operations/calculatePublicKey/{operationid} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer API_KEY'

GET /casp/api/v1.0/mng/operations/calculatePublicKey/{operationid}

For some keys, calculating public keys requires approval of the admin group. This request queries the operation status.

Parameters

Name In Type Required Description
operationid path string true Operation ID

Example responses

200 Response

{
  "operationID": "string",
  "kind": "JOIN_VAULT",
  "status": "PENDING",
  "statusText": "Pending",
  "createdAt": "string",
  "vaultID": "string",
  "description": "string",
  "isApproved": true,
  "accountID": "string",
  "groups": [
    {
      "name": "string",
      "members": [
        {
          "approvedAt": "string",
          "id": "string",
          "isApproved": true,
          "name": "string",
          "status": "STARTED",
          "approvalGroupAccount": {
            "id": "string",
            "name": "string"
          },
          "label": "string",
          "isGlobal": true,
          "isActive": true,
          "globalStatus": "ACTIVATED",
          "isOffline": true
        }
      ],
      "requiredApprovals": 0,
      "order": 0,
      "deactivateAllowed": true,
      "isOffline": true
    }
  ],
  "policyDetails": {
    "id": "string",
    "name": "string"
  },
  "vaultName": "string",
  "totsParams": [
    {
      "index": 0,
      "numberOfFragments": 0
    }
  ],
  "publicKeys": [
    "string"
  ]
}

Responses

Status Meaning Description Schema
200 OK OK CalculatePublicKeyOperationDetails
404 Not Found Operation not found CASPErrorResponse
500 Internal Server Error Get Operation status failed CASPErrorResponse

Policy Management

Refer to the Policy Management section in the Unbound CASP Developers Guide.

Add member to vault

Code samples

const inputBody = '{
  "participantID": "string",
  "description": "string",
  "policyId": "string"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'API_KEY'

};

fetch('https://casp-server/casp/api/v1.0/mng/vaults/{vaultId}/approval_groups/{approvalGroupId}/members',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X POST https://casp-server/casp/api/v1.0/mng/vaults/{vaultId}/approval_groups/{approvalGroupId}/members \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer API_KEY'

POST /casp/api/v1.0/mng/vaults/{vaultId}/approval_groups/{approvalGroupId}/members

This API is used if a participant becomes unavailable or leaves an account and needs to be replaced with a new participant. A new participant may be added to an existing vault, but requires the approval of the existing vault quorum.

Body parameter

{
  "participantID": "string",
  "description": "string",
  "policyId": "string"
}

Parameters

Name In Type Required Description
vaultId path string true Vault ID
approvalGroupId path string true Approval Group Id
body body AddVaultParticipantRequest true Add vault group participant request

Example responses

200 Response

{
  "operation": {
    "operationID": "string",
    "kind": "JOIN_VAULT",
    "status": "PENDING",
    "statusText": "Pending",
    "createdAt": "string",
    "vaultID": "string",
    "description": "string",
    "isApproved": true,
    "accountID": "string",
    "groups": [
      {
        "name": "string",
        "members": [
          {
            "approvedAt": "string",
            "id": "string",
            "isApproved": true,
            "name": "string",
            "status": "STARTED",
            "approvalGroupAccount": {
              "id": "string",
              "name": "string"
            },
            "label": "string",
            "isGlobal": true,
            "isActive": true,
            "globalStatus": "ACTIVATED",
            "isOffline": true
          }
        ],
        "requiredApprovals": 0,
        "order": 0,
        "deactivateAllowed": true,
        "isOffline": true
      }
    ],
    "policyDetails": {
      "id": "string",
      "name": "string"
    },
    "vaultName": "string"
  },
  "participant": {
    "id": "string",
    "accountID": "string",
    "name": "string",
    "email": "string",
    "status": "NOT_ACTIVATED",
    "isActive": true,
    "accountName": "string",
    "role": "string",
    "pushEnabled": true,
    "offline": true,
    "activeOperations": 0,
    "deviceType": "IOS",
    "creationTime": "string",
    "modificationTime": "string"
  }
}

Responses

Status Meaning Description Schema
200 OK OK AddMemberResponse
404 Not Found Item not found CASPErrorResponse
500 Internal Server Error Add participant failed CASPErrorResponse

Set vault member status

Code samples

const inputBody = '{
  "status": "DEACTIVATED"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'API_KEY'

};

fetch('https://casp-server/casp/api/v1.0/mng/vaults/{vaultId}/members/{participantId}/status',
{
  method: 'PUT',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X PUT https://casp-server/casp/api/v1.0/mng/vaults/{vaultId}/members/{participantId}/status \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer API_KEY'

PUT /casp/api/v1.0/mng/vaults/{vaultId}/members/{participantId}/status

The suspended participant no longer takes part in the vault approval processes. Note that you can only suspend or revoke a user if the remaining number of participants is sufficient for the quorum, unless 'force' flag is provided.

Body parameter

{
  "status": "DEACTIVATED"
}

Parameters

Name In Type Required Description
participantId path string true Participant ID
vaultId path string true vault ID
force query boolean false Force update of participant status. Warning: Using this flag can result in an unusable vault!
body body UpdateParticipantStatusRequest true Participant status update request

Example responses

200 Response

{
  "id": "string",
  "name": "string",
  "status": "ACTIVATED",
  "approvalGroupAccount": {
    "id": "string",
    "name": "string"
  },
  "label": "string",
  "isGlobal": true,
  "isActive": true
}

Responses

Status Meaning Description Schema
200 OK OK ParticipantStatusChangeResponse
202 Accepted Accepted OperationDetails
403 Forbidden Suspending or revoking this participant would make the vault not operational (too few active participants left) CASPErrorResponse
404 Not Found Participant not found CASPErrorResponse
500 Internal Server Error Set vault member status failed CASPErrorResponse

Set vault member status (deprecated)

Code samples

const inputBody = '{
  "status": "DEACTIVATED",
  "policyId": "string"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'API_KEY'

};

fetch('https://casp-server/casp/api/v1.0/mng/vaults/{id}/members/{participantId}',
{
  method: 'PUT',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X PUT https://casp-server/casp/api/v1.0/mng/vaults/{id}/members/{participantId} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer API_KEY'

PUT /casp/api/v1.0/mng/vaults/{id}/members/{participantId}

The suspended participant no longer takes part in the vault transaction approval processes. Note that you can only suspend or revoke a user, if the remaining number of participants is sufficient for the quorum policy, unless 'force' flag is provided.

Body parameter

{
  "status": "DEACTIVATED",
  "policyId": "string"
}

Parameters

Name In Type Required Description
participantId path string true Participant ID
id path string true vault ID
body body UpdateParticipantStatusWithPolicyRequest true Participant status update request

Example responses

404 Response

{
  "type": "string",
  "title": "string",
  "details": "string",
  "status": 0
}

Responses

Status Meaning Description Schema
200 OK OK None
404 Not Found Participant not found CASPErrorResponse
500 Internal Server Error Set vault member status failed CASPErrorResponse

Set policy member status

Code samples

const inputBody = '{
  "status": "DEACTIVATED"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'Authorization':'API_KEY'

};

fetch('https://casp-server/casp/api/v1.0/mng/vaults/{vaultId}/policies/{policyId}/members/{participantId}/status',
{
  method: 'PUT',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X PUT https://casp-server/casp/api/v1.0/mng/vaults/{vaultId}/policies/{policyId}/members/{participantId}/status \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer API_KEY'

PUT /casp/api/v1.0/mng/vaults/{vaultId}/policies/{policyId}/members/{participantId}/status

The suspended participant no longer takes part in the vault transaction approval processes. Note that you can only suspend or revoke a user, if the remaining number of participants is sufficient for the quorum policy, unless 'force' flag is provided.

Body parameter

{
  "status": "DEACTIVATED"
}

Parameters

Name In Type Required Description
participantId path string true Participant ID
vaultId path string true vault ID
policyId path string true policy ID
force query boolean false Force update of participant status
body body UpdateParticipantStatusRequest true Participant status update request

Example responses

200 Response

{
  "id": "string",
  "name": "string",
  "status": "ACTIVATED",
  "approvalGroupAccount": {
    "id": "string",
    "name": "string"
  },
  "label": "string",
  "isGlobal": true,
  "isActive": true
}

Responses

Status Meaning Description Schema
200 OK OK ParticipantStatusChangeResponse
202 Accepted Accepted OperationDetails
403 Forbidden Suspending or revoking this participant would make the vault not operational (too few active participants left) CASPErrorResponse
404 Not Found Item not found CASPErrorResponse
500 Internal Server Error Set vault member status participant failed CASPErrorResponse

Status of add member operation

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'API_KEY'

};

fetch('https://casp-server/casp/api/v1.0/mng/operations/addmember/{operationid}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X GET https://casp-server/casp/api/v1.0/mng/operations/addmember/{operationid} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer API_KEY'

GET /casp/api/v1.0/mng/operations/addmember/{operationid}

Adding a new participant to a vault requires approval of the quorum. This request queries the status of such an asynchronous operation. The Operation ID parameter must be from an 'ADD_MEMBER' operation.

Parameters

Name In Type Required Description
operationid path string true Operation ID

Example responses

200 Response

{
  "operationID": "string",
  "kind": "JOIN_VAULT",
  "status": "PENDING",
  "statusText": "Pending",
  "createdAt": "string",
  "vaultID": "string",
  "description": "string",
  "isApproved": true,
  "accountID": "string",
  "groups": [
    {
      "name": "string",
      "members": [
        {
          "approvedAt": "string",
          "id": "string",
          "isApproved": true,
          "name": "string",
          "status": "STARTED",
          "approvalGroupAccount": {
            "id": "string",
            "name": "string"
          },
          "label": "string",
          "isGlobal": true,
          "isActive": true,
          "globalStatus": "ACTIVATED",
          "isOffline": true
        }
      ],
      "requiredApprovals": 0,
      "order": 0,
      "deactivateAllowed": true,
      "isOffline": true
    }
  ],
  "policyDetails": {
    "id": "string",
    "name": "string"
  },
  "vaultName": "string",
  "groupName": "string",
  "participantName": "string",
  "participantID": "string"
}

Responses

Status Meaning Description Schema
200 OK OK AddMemberDetails
404 Not Found Operation not found CASPErrorResponse
500 Internal Server Error Get Operation status failed CASPErrorResponse

Status of join policy vault operation

Code samples


const headers = {
  'Accept':'application/json',
  'Authorization':'API_KEY'

};

fetch('https://casp-server/casp/api/v1.0/mng/operations/joinpolicyvault/{operationid}',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X GET https://casp-server/casp/api/v1.0/mng/operations/joinpolicyvault/{operationid} \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer API_KEY'

GET /casp/api/v1.0/mng/operations/joinpolicyvault/{operationid}

Returns join policy vault operation details. The Operation ID parameter must be from a 'JOIN_POLICY_VAULT' operation.

Parameters

Name In Type Required Description
operationid path string true Operation ID

Example responses

200 Response

{
  "operationID": "string",
  "kind": "JOIN_VAULT",
  "status": "PENDING",
  "statusText": "Pending",
  "createdAt": "string",
  "vaultID": "string",
  "description": "string",
  "isApproved": true,
  "accountID": "string",
  "policies": [
    {
      "name": "string",
      "id": "string",
      "description": "string",
      "enabled": true,
      "timeZone": "string",
      "groups": [
        {
          "name": "string",
          "members": [
            {
              "approvedAt": "string",
              "id": "string",
              "isApproved": true,
              "name": "string",
              "status": "STARTED",
              "approvalGroupAccount": {
                "id": "string",
                "name": "string"
              },
              "label": "string",
              "isGlobal": true,
              "isActive": true,
              "globalStatus": "ACTIVATED",
              "isOffline": true
            }
          ],
          "requiredApprovals": 0,
          "order": 0,
          "deactivateAllowed": true,
          "isOffline": true
        }
      ],
      "rules": {
        "weeklyTimeSlots": [
          {
            "days": "string",
            "timeStart": "string",
            "timeEnd": "string"
          }
        ],
        "amountRange": {
          "property1": {
            "minimum": 0,
            "maximum": 0
          },
          "property2": {
            "minimum": 0,
            "maximum": 0
          }
        },
        "whiteList": [
          "string"
        ],
        "derivedWhiteList": [
          {
            "chainCode": "string",
            "publicKey": "string",
            "level": 0,
            "parentFingerprint": "string",
            "childNumber": 0
          }
        ],
        "attributes": [
          {
            "id": "string",
            "op": "string",
            "value": "string"
          }
        ]
      }
    }
  ],
  "vaultName": "string",
  "groupNameToJoin": "string"
}

Responses

Status Meaning Description Schema
200 OK OK JoinPolicyVaultOperationDetails
404 Not Found Operation not found CASPErrorResponse
500 Internal Server Error Get Operation status failed CASPErrorResponse

Callbacks

Sign callback URL

Code samples

const inputBody = '{
  "publicKeys": [
    "string"
  ],
  "providerData": "string",
  "dataToSign": [
    "string"
  ],
  "signatures": [
    "string"
  ],
  "v": [
    0
  ],
  "originalEntryIds": [
    0
  ]
}';
const headers = {
  'Content-Type':'application/json'

};

fetch('/api/v1.0/sign_complete_callback?ledgerId=string',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

# You can also use wget
curl -X POST /api/v1.0/sign_complete_callback?ledgerId=string \
  -H 'Content-Type: application/json'

POST /sign_complete_callback

Sign callback url from CASP

Body parameter

{
  "publicKeys": [
    "string"
  ],
  "providerData": "string",
  "dataToSign": [
    "string"
  ],
  "signatures": [
    "string"
  ],
  "v": [
    0
  ],
  "originalEntryIds": [
    0
  ]
}

Parameters

Name In Type Required Description
ledgerId query string true The id of the ledger on which the transaction should take place
body body object true Signed Operation Request
» publicKeys body [string] true Vault public key
» providerData body string true Used to store information in the CASP database. The information can subsequently be read back as needed for the coin specific coin type usage.
» dataToSign body [string] true List of data to sign
» signatures body [string] true Signatures
» v body [integer] true recovery codes
» originalEntryIds body [integer] false List of indices matching the original dataForSignature list in case the server sends a partial list of signatures (when used with policies)

Responses

Status Meaning Description Schema
default Default returns data to store in CASP None

Schemas

Address

{
  "items": [
    {
      "address": "mkoTSoVG1pdKqycgbVyXpLmmaNK7ELbRXn"
    }
  ]
}

Properties

Name Type Required Restrictions Description
address string false none none

AssetBalance

{
  "asset": "string",
  "amount": "string"
}

Properties

Name Type Required Restrictions Description
asset string false none Asset symbol
amount string false none Amount to send

BalanceResponse

{
  "balances": [
    {
      "asset": "string",
      "amount": "string"
    }
  ]
}

Properties

Name Type Required Restrictions Description
balances [AssetBalance] false none none

AddressBalanceResponse

{
  "address": "0x7827D7fDb2B161a27fFeD3cC25C560D7aEFE2BD5",
  "balances": [
    {
      "asset": "YEENUS",
      "amount": 885.82
    },
    {
      "asset": "ETH",
      "amount": 8.2221820926
    },
    {
      "asset": "BOKKY",
      "amount": 0
    }
  ]
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BalanceResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» address string false none none

VaultBalanceResponse

{
  "address": "0x7827D7fDb2B161a27fFeD3cC25C560D7aEFE2BD5",
  "balances": [
    {
      "asset": "YEENUS",
      "amount": 885.82
    },
    {
      "asset": "ETH",
      "amount": 8.2221820926
    },
    {
      "asset": "BOKKY",
      "amount": 0
    }
  ]
}

Properties

allOf

Name Type Required Restrictions Description
anonymous BalanceResponse false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» address string false none If the vault has only one address this attribute is returned. Otherwise, this attribute is ommited.
» vaultId string false none The vault ID
» coin string false none For BIP44 vaults - the coin type of the BIP44 account that was used to get the balance, otherwise ommited.
» account string false none For BIP44 vaults - indicates the BIP44 account index that was used to get the balance, otherwise ommited.

AppError

{
  "title": "Invalid argument",
  "details": "Unknown asset 'yeenussd'. Valid assets are: ETH,BOKKY,YEENUS,PAX",
  "errCode": "ERR_INVALID_ARGUMENTS",
  "type": "/errors/ERR_INVALID_ARGUMENTS"
}

Properties

Name Type Required Restrictions Description
title string false none The error title that can be used for user display
details string false none Detailed information about the error and resolution
errCode string false none A textual code that can be used to classify the error
type string false none Path for more information about the error

WithdrawalRequest

{
  "amount": "1.3",
  "asset": "YEENUS",
  "recipientAddress": "0x7827D7fDb2B161a27fFeD3cC25C560D7aEFE2BD5",
  "description": "Payment 3332",
  "fee": "HIGH"
}

Properties

Name Type Required Restrictions Description
recipientAddress string true none The ledger address to recieve the assets
recipientVault string false none The target vault ID for internal transfers (originally for staking-pools)
asset string false none (Optional) The asset to send. If not provided, the default ledger asset is used.
amount any true none The asset amount to send

oneOf

Name Type Required Restrictions Description
» anonymous number(double) false none none

xor

Name Type Required Restrictions Description
» anonymous string false none none

continued

Name Type Required Restrictions Description
description string true none A short text that describes the puprpose of this withdrawal.
fee string false none A fee constant. Usually specificied as 'HIGH', 'MEDIUM' or 'LOW', but some ledgers use custom fee constants. If not provided, the ledger's default fee is used.

WithdrawalProviderData

{
  "request": {
    "amount": "1.3",
    "asset": "YEENUS",
    "recipientAddress": "0x7827D7fDb2B161a27fFeD3cC25C560D7aEFE2BD5",
    "description": "Payment 3332",
    "fee": "HIGH"
  },
  "txs": [
    {
      "serialized": "string"
    }
  ]
}

Properties

Name Type Required Restrictions Description
request WithdrawalRequest false none none
txs [object] false none A list of ledger tranasactions created for the withdrawal
» serialized string false none The HEX encoded serialized transaction