Create Token
curl --request POST \
--url https://dev.api.withconvexity.com/v1/tokens \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"ticker": "ACMB3",
"name": "Acme 5y 7.5% Senior Unsecured",
"price": 2,
"chain": "BASE",
"decimals": 18,
"assetClass": "MONEY_MARKET",
"tokenType": "YIELD_BEARING",
"maxShareholders": 0,
"maxTokensPerInvestor": 0,
"lockUpDuration": 0,
"yieldParams": {
"annualRate": 25,
"maturityDate": "2026-06-21",
"firstCouponDate": "2026-06-21",
"couponInterval": 1,
"dayCount": "ACT_365",
"faceValuePerToken": 2,
"gracePeriod": 240,
"callable": true,
"callDate": "2026-06-21"
}
}
'import requests
url = "https://dev.api.withconvexity.com/v1/tokens"
payload = {
"ticker": "ACMB3",
"name": "Acme 5y 7.5% Senior Unsecured",
"price": 2,
"chain": "BASE",
"decimals": 18,
"assetClass": "MONEY_MARKET",
"tokenType": "YIELD_BEARING",
"maxShareholders": 0,
"maxTokensPerInvestor": 0,
"lockUpDuration": 0,
"yieldParams": {
"annualRate": 25,
"maturityDate": "2026-06-21",
"firstCouponDate": "2026-06-21",
"couponInterval": 1,
"dayCount": "ACT_365",
"faceValuePerToken": 2,
"gracePeriod": 240,
"callable": True,
"callDate": "2026-06-21"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
ticker: 'ACMB3',
name: 'Acme 5y 7.5% Senior Unsecured',
price: 2,
chain: 'BASE',
decimals: 18,
assetClass: 'MONEY_MARKET',
tokenType: 'YIELD_BEARING',
maxShareholders: 0,
maxTokensPerInvestor: 0,
lockUpDuration: 0,
yieldParams: {
annualRate: 25,
maturityDate: '2026-06-21',
firstCouponDate: '2026-06-21',
couponInterval: 1,
dayCount: 'ACT_365',
faceValuePerToken: 2,
gracePeriod: 240,
callable: true,
callDate: '2026-06-21'
}
})
};
fetch('https://dev.api.withconvexity.com/v1/tokens', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"status": true,
"message": "Token created successfully",
"data": {
"id": "019edea4-e84d-722d-94ec-cb0fd331693d",
"chain": "BASE",
"status": "PENDING",
"operationRef": "deploy_505930f3472b5c15d7d30f6aadb3418e",
"tokenAdmin": "0xd4449db2bc50a0c2b9da5780161308e644aec13d",
"txHash": "0x581941f1a8de6b04f8d8debc82fcd8a0239ef14dda221bb52e6450442d7880de"
}
}Tokenization
Create Token
Issues a new tokenized asset and deploys it on the target chain. For a YIELD_BEARING token, supply yieldParams. Returns immediately with a PENDING token plus a deployment operationRef and txHash.
POST
/
v1
/
tokens
Create Token
curl --request POST \
--url https://dev.api.withconvexity.com/v1/tokens \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"ticker": "ACMB3",
"name": "Acme 5y 7.5% Senior Unsecured",
"price": 2,
"chain": "BASE",
"decimals": 18,
"assetClass": "MONEY_MARKET",
"tokenType": "YIELD_BEARING",
"maxShareholders": 0,
"maxTokensPerInvestor": 0,
"lockUpDuration": 0,
"yieldParams": {
"annualRate": 25,
"maturityDate": "2026-06-21",
"firstCouponDate": "2026-06-21",
"couponInterval": 1,
"dayCount": "ACT_365",
"faceValuePerToken": 2,
"gracePeriod": 240,
"callable": true,
"callDate": "2026-06-21"
}
}
'import requests
url = "https://dev.api.withconvexity.com/v1/tokens"
payload = {
"ticker": "ACMB3",
"name": "Acme 5y 7.5% Senior Unsecured",
"price": 2,
"chain": "BASE",
"decimals": 18,
"assetClass": "MONEY_MARKET",
"tokenType": "YIELD_BEARING",
"maxShareholders": 0,
"maxTokensPerInvestor": 0,
"lockUpDuration": 0,
"yieldParams": {
"annualRate": 25,
"maturityDate": "2026-06-21",
"firstCouponDate": "2026-06-21",
"couponInterval": 1,
"dayCount": "ACT_365",
"faceValuePerToken": 2,
"gracePeriod": 240,
"callable": True,
"callDate": "2026-06-21"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
ticker: 'ACMB3',
name: 'Acme 5y 7.5% Senior Unsecured',
price: 2,
chain: 'BASE',
decimals: 18,
assetClass: 'MONEY_MARKET',
tokenType: 'YIELD_BEARING',
maxShareholders: 0,
maxTokensPerInvestor: 0,
lockUpDuration: 0,
yieldParams: {
annualRate: 25,
maturityDate: '2026-06-21',
firstCouponDate: '2026-06-21',
couponInterval: 1,
dayCount: 'ACT_365',
faceValuePerToken: 2,
gracePeriod: 240,
callable: true,
callDate: '2026-06-21'
}
})
};
fetch('https://dev.api.withconvexity.com/v1/tokens', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"status": true,
"message": "Token created successfully",
"data": {
"id": "019edea4-e84d-722d-94ec-cb0fd331693d",
"chain": "BASE",
"status": "PENDING",
"operationRef": "deploy_505930f3472b5c15d7d30f6aadb3418e",
"tokenAdmin": "0xd4449db2bc50a0c2b9da5780161308e644aec13d",
"txHash": "0x581941f1a8de6b04f8d8debc82fcd8a0239ef14dda221bb52e6450442d7880de"
}
}Authorizations
OAuth 2.0 access token from Auth-Edge.
Body
application/json
Short token symbol (e.g. ACMB3).
Full token name.
Target chain (e.g. BASE).
Token decimals (e.g. 18).
Asset class (e.g. MONEY_MARKET).
ASSET for a plain token; YIELD_BEARING for one that pays yield.
Available options:
ASSET, YIELD_BEARING Issue price per token in fiat major units.
Maximum holders; 0 for unlimited.
Per-investor cap; 0 for unlimited.
Lock-up in seconds; 0 for none.
Required when tokenType is YIELD_BEARING.
Show child attributes
Show child attributes
Response
201 - application/json
Created
The response is of type object.
