Token
Represents a token and its deployments across networks.
The current token types supported are ERC20
| ERC3643
| CCT
| OFT
, with many more coming soon!
Supported token types & extra parameters
Token type | Dedicated deploy endpoint(s) |
---|---|
ERC20 | POST /v1alpha1/transaction/token/erc20/deploy |
CCT (lock-release) | POST /v1alpha1/transaction/token/cct/lock-release/deploy |
CCT (burn-mint) | POST /v1alpha1/transaction/token/cct/burn-mint/deploy |
ERC3643 | POST /v1alpha1/transaction/token/erc3643/deploy |
OFT | POST /v1alpha1/transaction/token/oft/deploy |
Description
A Token
object contains the configuration of a token and its deployments on various networks.
To create and deploy a token atomically, use the type-specific deploy endpoint. The following request will create an ERC20 token and deploy it to networks 1 and 137:
POST /v1alpha1/transaction/token/erc20/deploy
Content-Type: application/json
{
"name": "MyToken",
"symbol": "MTK",
"decimals": 18,
"deployments": [
{
"network_id": "1",
"args": {
"total_supply": "1000000000000000000000000",
"initial_supply": "500000000000000000000000",
"owner": "0xAB...01"
}
},
{
"network_id": "137",
"args": {
"total_supply": "1000000000000000000000000",
"initial_supply": "500000000000000000000000",
"owner": "0xCD...02"
}
}
]
}
The server responds immediately with 201 Created
and background controllers will start the deployment process.
You may request the token you just created:
GET /v1alpha1/transaction/token/{token_id}
And the server responds with:
{
"kind": "Token",
"version": "v1alpha1",
"id": "uuid-string",
"user_id": "your-user-id",
"name": "MyToken",
"symbol": "MTK",
"decimals": 18,
"created_at": "2023-10-01T12:00:00Z",
"updated_at": "2023-10-01T12:00:00Z",
"deployments": [
{
"id": "deployment-uuid",
"token_id": "uuid-string",
"network_id": "1",
"token_address": "0x742D35Cc6cC12f7732be67ade26b28dd3e6f4a87",
"args": {
"total_supply": "1000000000000000000000000",
"initial_supply": "500000000000000000000000",
"owner": "0xAB...01"
},
"extra_addresses": {},
"deployment_tx": "0x1a2b3c4d...",
"deployed_at": "2023-10-01T12:00:00Z"
}
]
}
If you no longer need a token, you may delete it:
DELETE /v1alpha1/transaction/token/{token_id}
Operations
Deploy endpoints summary
Use the type-specific deploy endpoints shown below. Replace {type}
with one of erc20
, erc3643
, cct
, or oft
(lower-case):
POST /v1alpha1/transaction/token/{type}/deploy
These endpoints validate only the fields relevant to the given token standard and return clearer error messages.
Common token payload structure
All deploy endpoints accept the same top-level structure:
Field | Type | Required | Notes |
---|---|---|---|
name | string | Yes | Human-readable token name |
symbol | string | Yes | Token symbol (e.g. "ETH", "BTC") |
decimals | int | No | Decimal places (defaults to 18) |
deployments | array | Yes | List of networks and their deployment args |
Per-deployment args
Each entry in thedeployments
array may include anargs
object with parameters specific to the token type. For example, an ERC20 deployment could specify aninitial_supply
while a CCT deployment may pool configurations. The schema of this object therefore varies per standard and is documented in the sections below.
GET /v1alpha1/transaction/token
List tokens that belong to the caller.
Query parameters
Selectable fields: type
, name
, symbol
Responses
HTTP Code | Response |
---|---|
200 OK | TokenList |
GET /v1alpha1/transaction/token/{token_id}
Fetch a specific token (includes deployments array).
Responses
HTTP Code | Response |
---|---|
200 OK | Token |
404 Not Found | Error |
DELETE /v1alpha1/transaction/token/{token_id}
Remove a token and all its deployments from your list of existing tokens (cascade deletion). The token will still exist on the blockchain but will no longer appear in your token list.
Responses
HTTP Code | Response |
---|---|
204 No Content | - |
404 Not Found | Error |
POST /v1alpha1/transaction/token/{token_id}/add-deployments
Deploy and add existing token to one or many additional networks in one call.
Request body
{
"networks": ["1", "137"],
"args": { /* token-type-specific args e.g. { "initial_supply": "..." } */ }
}
Responses
HTTP Code | Response |
---|---|
201 Created | Token (updated) |
400 Bad Request | Error |
POST /v1alpha1/transaction/token/erc20/deploy
Create and deploy an ERC20 token.
Request body
Same as the example in the Description section. The args
object inside each deployment may contain:
Args
Field | Type | Required | Notes |
---|---|---|---|
total_supply | string | Yes | Total token supply |
initial_supply | string | No | Amount minted at deployment |
owner | string | No | Address receiving supply |
Responses
HTTP Code | Response |
---|---|
201 Created | Token |
400 Bad Request | Error |
POST /v1alpha1/transaction/token/cct/lock-release/deploy
Create and deploy a CCT using the lock-release bridging mechanism.
wrap-existing
is supported on this endpoint: provide underlying_token_address
to wrap an existing ERC-20, or omit it to create a fresh token.
Request body (wrap-existing example)
{
"name": "WrappedToken",
"symbol": "WTT",
"decimals": 18,
"deployments": [
{ "network_id": "1", "args": { "underlying_token_address": "0x742D35Cc6cC12f7732be67ade26b28dd3e6f4a87"} },
{ "network_id": "137", "args": { "total_supply": "1000000", "liquidity": 500 } }
]
}
Deployment modes
Mode | When to use | Required fields | Notes |
---|---|---|---|
fresh | You want a brand-new CCT and bridge pools | omit underlying_token_address | Deploys the canonical BurnMintERC20 token and deploys pool contracts. |
wrap-existing | Wrap an existing ERC-20 token | provide underlying_token_address | No new token contract is deployed. On the burn-mint endpoint the underlying token must support burn & mint. |
Validation rules:
- Bridging mechanism and pool is encoded in the endpoint path (
/lock-release/
vs/burn-mint/
). wrap-existing
mode is enabled by providingunderlying_token_address
on either endpoint.
• For/lock-release/deploy
the underlying token can be any ERC-20.
• For/burn-mint/deploy
the underlying token must implement burn & mint functions (e.g. be compatible withBurnMintERC20
).- If
underlying_token_address
is provided you must omitliquidity
,total_supply
,initial_supply
args.
Args
Field | Type | Required | Notes |
---|---|---|---|
total_supply | string | Yes | Total token supply |
underlying_token_address | string | No | Existing token to wrap (wrap-existing mode) |
liquidity | number | No | Only for fresh mode - Initial liquidity to seed the pool on that chain |
initial_supply | string | No | Only for fresh mode – omit when wrapping existing token |
Responses
HTTP Code | Response |
---|---|
201 Created | Token |
400 Bad Request | Error |
POST /v1alpha1/transaction/token/cct/burn-mint/deploy
Create and deploy a CCT using the burn-mint bridging pool. If underlying_token_address
is omitted, the service deploys a new BurnMintERC20 token; otherwise it reuses the provided token (must be burn-mint-capable).
Request body
{
"name": "MyCCT",
"symbol": "MCCT",
"decimals": 18,
"deployments": [
{ "network_id": "1", "args": { "total_supply": "1000000", "recipient": "0xOwner1" } },
{ "network_id": "137", "args": { "total_supply": "1000000", "recipient": "0xOwner2" } }
]
}
spec
extensions
Field | Type | Required | Notes |
---|
| networks | string[]
| Yes | Initial networks to deploy token and pools |
Args
Field | Type | Required | Notes |
---|---|---|---|
total_supply | string | Yes | Total token supply |
underlying_token_address | string (address) | No | Existing token to wrap (wrap-existing mode) |
recipient | string (address) | No | Only for fresh mode - Address receiving the initial minted supply on that chain, if empty it defaults to the deployer address |
initial_supply | string | No | Only for fresh mode – omit when wrapping existing token |
Responses
HTTP Code | Response |
---|---|
201 Created | Token |
400 Bad Request | Error |
POST /v1alpha1/transaction/token/erc3643/deploy
Create and deploy an ERC3643 token.
Request body
{
"name": "My3643",
"symbol": "M3643",
"decimals": 18,
"spec": {
},
"deployments": [
{ "network_id": "1", "args": { "total_supply": "1000000", "compliance_registry": "0x1234...abcd",
"transfer_restrictions": true } }
]
}
Args
Field | Type | Required | Notes |
---|---|---|---|
total_supply | string | Yes | Total token supply |
compliance_registry | string | Yes | Address of compliance registry |
transfer_restrictions | boolean | No | Enable default transfer checks |
Responses
HTTP Code | Response |
---|---|
201 Created | Token |
400 Bad Request | Error |
POST /v1alpha1/transaction/token/oft/deploy
Create and deploy an OFT (Omnichain Fungible Token).
Request body
{
"name": "MyOFT",
"symbol": "MOFT",
"decimals": 18,
"spec": {
"layer_zero_endpoint": "0x1111...eeee",
"adapter_parameters": {
"lz_fee": "0.05"
}
},
"deployments": [
{ "network_id": "1", "args": {"total_supply": "1000000", "layer_zero_endpoint": "0x1111...eeee"} },
{ "network_id": "42161", "args": {"total_supply": "1000000", "layer_zero_endpoint": "0x1111...eeee", "adapter_parameters": {"lz_fee": "0.05"}} }
]
}
Args
Field | Type | Required | Notes |
---|---|---|---|
total_supply | string | Yes | Total token supply |
layer_zero_endpoint | string | Yes | LayerZero endpoint address |
adapter_parameters | object | No | Custom adapter parameters |
Responses
HTTP Code | Response |
---|---|
201 Created | Token |
400 Bad Request | Error |
GET /v1alpha1/transaction/token/{token_id}/deployments
List all deployments for that token.
Query parameters
Responses
HTTP Code | Response |
---|---|
200 OK | DeploymentList |
GET /v1alpha1/transaction/token/{token_id}/deployments/{network_id}
Fetch the deployment on a single chain.
Responses
HTTP Code | Response |
---|---|
200 OK | Deployment |
404 Not Found | Error |
DELETE /v1alpha1/transaction/token/{token_id}/deployments/{network_id}
Remove only that chain's deployment record.
Responses
HTTP Code | Response |
---|---|
204 No Content | - |
404 Not Found | Error |
GET /v1alpha1/transaction/token-types
Enumerate supported token standards (ERC20, ERC3643, CCT …).
Responses
HTTP Code | Response |
---|---|
200 OK | Array of strings e.g. ["ERC20", "ERC3643", "CCT"] |
GET /v1alpha1/transaction/health
Liveness & DB connectivity probe.
Responses
HTTP Code | Response |
---|---|
200 OK | { "status": "healthy" } |
API objects
Token
Field | Type | Required | Notes |
---|---|---|---|
kind | string | No | Always "Token" |
version | string | No | API version (e.g. "v1alpha1") |
id | string | Yes | Unique identifier |
user_id | string | Yes | Owner user ID |
name | string | Yes | Token name |
symbol | string | Yes | Token symbol |
decimals | int | Yes | Decimal places (default 18) |
total_supply | string | Yes | Total supply as string |
type | ERC20 | ERC3643 | CCT | OFT | Yes | Token standard |
spec | object | No | Additional specs (e.g. mintable) |
created_at | string (RFC 3339) | No | Creation timestamp |
updated_at | string (RFC 3339) | No | Last update timestamp |
deployments | Deployment [] | No | Array of deployments |
TokenList
Field | Type | Required | Notes |
---|---|---|---|
kind | string | No | Always "TokenList" |
items | Token [] | Yes | The items of this list |
metadata | ListMeta | No | Pagination metadata |
Deployment
Field | Type | Required | Notes |
---|---|---|---|
id | string | Yes | Unique identifier |
token_id | string | Yes | Parent token ID |
network_id | string | Yes | Network identifier |
token_address | string | Yes | Contract address |
extra_addresses | object | No | Additional addresses (pool, etc.) |
deployment_tx | string | No | Deployment transaction hash |
deployed_at | string (RFC 3339) | No | Deployment timestamp |
DeploymentList
Field | Type | Required | Notes |
---|---|---|---|
kind | string | No | Always "DeploymentList" |
items | Deployment [] | Yes | The items of this list |
metadata | ListMeta | No | Pagination metadata |