Skip to main content

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 typeDedicated deploy endpoint(s)
ERC20POST /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
ERC3643POST /v1alpha1/transaction/token/erc3643/deploy
OFTPOST /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:

FieldTypeRequiredNotes
namestringYesHuman-readable token name
symbolstringYesToken symbol (e.g. "ETH", "BTC")
decimalsintNoDecimal places (defaults to 18)
deploymentsarrayYesList of networks and their deployment args

Per-deployment args
Each entry in the deployments array may include an args object with parameters specific to the token type. For example, an ERC20 deployment could specify an initial_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

ListOptions

Selectable fields: type, name, symbol

Responses

HTTP CodeResponse
200 OKTokenList

GET /v1alpha1/transaction/token/{token_id}

Fetch a specific token (includes deployments array).

Responses

HTTP CodeResponse
200 OKToken
404 Not FoundError

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 CodeResponse
204 No Content-
404 Not FoundError

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 CodeResponse
201 CreatedToken (updated)
400 Bad RequestError

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

FieldTypeRequiredNotes
total_supplystringYesTotal token supply
initial_supplystringNoAmount minted at deployment
ownerstringNoAddress receiving supply

Responses

HTTP CodeResponse
201 CreatedToken
400 Bad RequestError

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

ModeWhen to useRequired fieldsNotes
freshYou want a brand-new CCT and bridge poolsomit underlying_token_addressDeploys the canonical BurnMintERC20 token and deploys pool contracts.
wrap-existingWrap an existing ERC-20 tokenprovide underlying_token_addressNo new token contract is deployed. On the burn-mint endpoint the underlying token must support burn & mint.

Validation rules:

  1. Bridging mechanism and pool is encoded in the endpoint path (/lock-release/ vs /burn-mint/).
  2. wrap-existing mode is enabled by providing underlying_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 with BurnMintERC20).
  3. If underlying_token_address is provided you must omit liquidity, total_supply, initial_supply args.

Args

FieldTypeRequiredNotes
total_supplystringYesTotal token supply
underlying_token_addressstringNoExisting token to wrap (wrap-existing mode)
liquiditynumberNoOnly for fresh mode - Initial liquidity to seed the pool on that chain
initial_supplystringNoOnly for fresh mode – omit when wrapping existing token

Responses

HTTP CodeResponse
201 CreatedToken
400 Bad RequestError

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

FieldTypeRequiredNotes

| networks | string[] | Yes | Initial networks to deploy token and pools |

Args

FieldTypeRequiredNotes
total_supplystringYesTotal token supply
underlying_token_addressstring (address)NoExisting token to wrap (wrap-existing mode)
recipientstring (address)NoOnly for fresh mode - Address receiving the initial minted supply on that chain, if empty it defaults to the deployer address
initial_supplystringNoOnly for fresh mode – omit when wrapping existing token

Responses

HTTP CodeResponse
201 CreatedToken
400 Bad RequestError

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

FieldTypeRequiredNotes
total_supplystringYesTotal token supply
compliance_registrystringYesAddress of compliance registry
transfer_restrictionsbooleanNoEnable default transfer checks

Responses

HTTP CodeResponse
201 CreatedToken
400 Bad RequestError

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

FieldTypeRequiredNotes
total_supplystringYesTotal token supply
layer_zero_endpointstringYesLayerZero endpoint address
adapter_parametersobjectNoCustom adapter parameters

Responses

HTTP CodeResponse
201 CreatedToken
400 Bad RequestError

GET /v1alpha1/transaction/token/{token_id}/deployments

List all deployments for that token.

Query parameters

ListOptions

Responses

HTTP CodeResponse
200 OKDeploymentList

GET /v1alpha1/transaction/token/{token_id}/deployments/{network_id}

Fetch the deployment on a single chain.

Responses

HTTP CodeResponse
200 OKDeployment
404 Not FoundError

DELETE /v1alpha1/transaction/token/{token_id}/deployments/{network_id}

Remove only that chain's deployment record.

Responses

HTTP CodeResponse
204 No Content-
404 Not FoundError

GET /v1alpha1/transaction/token-types

Enumerate supported token standards (ERC20, ERC3643, CCT …).

Responses

HTTP CodeResponse
200 OKArray of strings e.g. ["ERC20", "ERC3643", "CCT"]

GET /v1alpha1/transaction/health

Liveness & DB connectivity probe.

Responses

HTTP CodeResponse
200 OK{ "status": "healthy" }

API objects

Token

FieldTypeRequiredNotes
kindstringNoAlways "Token"
versionstringNoAPI version (e.g. "v1alpha1")
idstringYesUnique identifier
user_idstringYesOwner user ID
namestringYesToken name
symbolstringYesToken symbol
decimalsintYesDecimal places (default 18)
total_supplystringYesTotal supply as string
typeERC20 | ERC3643 | CCT | OFTYesToken standard
specobjectNoAdditional specs (e.g. mintable)
created_atstring (RFC 3339)NoCreation timestamp
updated_atstring (RFC 3339)NoLast update timestamp
deploymentsDeployment[]NoArray of deployments

TokenList

FieldTypeRequiredNotes
kindstringNoAlways "TokenList"
itemsToken[]YesThe items of this list
metadataListMetaNoPagination metadata

Deployment

FieldTypeRequiredNotes
idstringYesUnique identifier
token_idstringYesParent token ID
network_idstringYesNetwork identifier
token_addressstringYesContract address
extra_addressesobjectNoAdditional addresses (pool, etc.)
deployment_txstringNoDeployment transaction hash
deployed_atstring (RFC 3339)NoDeployment timestamp

DeploymentList

FieldTypeRequiredNotes
kindstringNoAlways "DeploymentList"
itemsDeployment[]YesThe items of this list
metadataListMetaNoPagination metadata