curl --request POST \
--url https://api.sandbox.brickken.com/prepare-transactions \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"method": "newTokenization",
"signerAddress": "0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b",
"chainId": "aa36a7",
"tokenizerEmail": "tokenizer@example.com",
"name": "Example Token",
"tokenSymbol": "EXMPL",
"tokenType": "EQUITY",
"supplyCap": "1000000",
"url": "https://example.com/token-docs",
"preMints": [
{
"amount": "1000"
}
],
"initialHolders": [
{
"walletAddress": "0x1111111111111111111111111111111111111111"
}
]
}
'import requests
url = "https://api.sandbox.brickken.com/prepare-transactions"
payload = {
"method": "newTokenization",
"signerAddress": "0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b",
"chainId": "aa36a7",
"tokenizerEmail": "tokenizer@example.com",
"name": "Example Token",
"tokenSymbol": "EXMPL",
"tokenType": "EQUITY",
"supplyCap": "1000000",
"url": "https://example.com/token-docs",
"preMints": [{ "amount": "1000" }],
"initialHolders": [{ "walletAddress": "0x1111111111111111111111111111111111111111" }]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
method: 'newTokenization',
signerAddress: '0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b',
chainId: 'aa36a7',
tokenizerEmail: 'tokenizer@example.com',
name: 'Example Token',
tokenSymbol: 'EXMPL',
tokenType: 'EQUITY',
supplyCap: '1000000',
url: 'https://example.com/token-docs',
preMints: [{amount: '1000'}],
initialHolders: [{walletAddress: '0x1111111111111111111111111111111111111111'}]
})
};
fetch('https://api.sandbox.brickken.com/prepare-transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.brickken.com/prepare-transactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'method' => 'newTokenization',
'signerAddress' => '0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b',
'chainId' => 'aa36a7',
'tokenizerEmail' => 'tokenizer@example.com',
'name' => 'Example Token',
'tokenSymbol' => 'EXMPL',
'tokenType' => 'EQUITY',
'supplyCap' => '1000000',
'url' => 'https://example.com/token-docs',
'preMints' => [
[
'amount' => '1000'
]
],
'initialHolders' => [
[
'walletAddress' => '0x1111111111111111111111111111111111111111'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.brickken.com/prepare-transactions"
payload := strings.NewReader("{\n \"method\": \"newTokenization\",\n \"signerAddress\": \"0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b\",\n \"chainId\": \"aa36a7\",\n \"tokenizerEmail\": \"tokenizer@example.com\",\n \"name\": \"Example Token\",\n \"tokenSymbol\": \"EXMPL\",\n \"tokenType\": \"EQUITY\",\n \"supplyCap\": \"1000000\",\n \"url\": \"https://example.com/token-docs\",\n \"preMints\": [\n {\n \"amount\": \"1000\"\n }\n ],\n \"initialHolders\": [\n {\n \"walletAddress\": \"0x1111111111111111111111111111111111111111\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sandbox.brickken.com/prepare-transactions")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"method\": \"newTokenization\",\n \"signerAddress\": \"0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b\",\n \"chainId\": \"aa36a7\",\n \"tokenizerEmail\": \"tokenizer@example.com\",\n \"name\": \"Example Token\",\n \"tokenSymbol\": \"EXMPL\",\n \"tokenType\": \"EQUITY\",\n \"supplyCap\": \"1000000\",\n \"url\": \"https://example.com/token-docs\",\n \"preMints\": [\n {\n \"amount\": \"1000\"\n }\n ],\n \"initialHolders\": [\n {\n \"walletAddress\": \"0x1111111111111111111111111111111111111111\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.brickken.com/prepare-transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"method\": \"newTokenization\",\n \"signerAddress\": \"0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b\",\n \"chainId\": \"aa36a7\",\n \"tokenizerEmail\": \"tokenizer@example.com\",\n \"name\": \"Example Token\",\n \"tokenSymbol\": \"EXMPL\",\n \"tokenType\": \"EQUITY\",\n \"supplyCap\": \"1000000\",\n \"url\": \"https://example.com/token-docs\",\n \"preMints\": [\n {\n \"amount\": \"1000\"\n }\n ],\n \"initialHolders\": [\n {\n \"walletAddress\": \"0x1111111111111111111111111111111111111111\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"transactions": [
{
"from": "0x1234567890abcdef1234567890abcdef12345678",
"to": "0xabcdef1234567890abcdef1234567890abcdef12",
"value": "0x00",
"nonce": 3792,
"chainId": 11155111,
"data": "0xd362e8a70000000000000000000000000000000000000000000000000000000000000040...",
"type": 2,
"maxPriorityFeePerGas": "1150000",
"maxFeePerGas": "1156037",
"gasLimit": "0xccef"
}
],
"txId": "0x46adea7bdf49c576a760102e0d6bc9ecd650b3998588cd3d7f576a7973426aad",
"info": {
"tokenizerEmail": "tokenizer@example.com",
"tokenSymbol": "EXMPL",
"investorEmail": "investor@example.com"
}
}Prepare Transactions
Description: This endpoint prepares unsigned transactions for the method selected in the method field. For the exact required and optional body fields of a single method, open the matching page under Prepare Transactions.
For a payment-token approve used before dividendDistribution, call GET /get-tokenizer-info for the tokenized asset and set spenderAddress to its returned tokenAddress. Do not use escrowAddress; the approval must be confirmed on-chain before preparing the distribution.
Headers:
x-api-key:YOUR_API_KEYfor API-key auth, orX-Paymentfor x402 retries on eligible agentic methodsContent-Type:application/json
Common Request Body Parameters:
method(string, required): Operation to prepare.chainId(string, required): Blockchain network identifier. Hex format is recommended, for exampleaa36a7for Sepolia.signerAddress(string, conditionally required): Wallet address that signs the prepared transaction. Most methods require it;newInvestandclaimTokenscan useinvestorAddressas the signer.
curl --request POST \
--url https://api.sandbox.brickken.com/prepare-transactions \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"method": "newTokenization",
"signerAddress": "0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b",
"chainId": "aa36a7",
"tokenizerEmail": "tokenizer@example.com",
"name": "Example Token",
"tokenSymbol": "EXMPL",
"tokenType": "EQUITY",
"supplyCap": "1000000",
"url": "https://example.com/token-docs",
"preMints": [
{
"amount": "1000"
}
],
"initialHolders": [
{
"walletAddress": "0x1111111111111111111111111111111111111111"
}
]
}
'import requests
url = "https://api.sandbox.brickken.com/prepare-transactions"
payload = {
"method": "newTokenization",
"signerAddress": "0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b",
"chainId": "aa36a7",
"tokenizerEmail": "tokenizer@example.com",
"name": "Example Token",
"tokenSymbol": "EXMPL",
"tokenType": "EQUITY",
"supplyCap": "1000000",
"url": "https://example.com/token-docs",
"preMints": [{ "amount": "1000" }],
"initialHolders": [{ "walletAddress": "0x1111111111111111111111111111111111111111" }]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
method: 'newTokenization',
signerAddress: '0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b',
chainId: 'aa36a7',
tokenizerEmail: 'tokenizer@example.com',
name: 'Example Token',
tokenSymbol: 'EXMPL',
tokenType: 'EQUITY',
supplyCap: '1000000',
url: 'https://example.com/token-docs',
preMints: [{amount: '1000'}],
initialHolders: [{walletAddress: '0x1111111111111111111111111111111111111111'}]
})
};
fetch('https://api.sandbox.brickken.com/prepare-transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.brickken.com/prepare-transactions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'method' => 'newTokenization',
'signerAddress' => '0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b',
'chainId' => 'aa36a7',
'tokenizerEmail' => 'tokenizer@example.com',
'name' => 'Example Token',
'tokenSymbol' => 'EXMPL',
'tokenType' => 'EQUITY',
'supplyCap' => '1000000',
'url' => 'https://example.com/token-docs',
'preMints' => [
[
'amount' => '1000'
]
],
'initialHolders' => [
[
'walletAddress' => '0x1111111111111111111111111111111111111111'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.brickken.com/prepare-transactions"
payload := strings.NewReader("{\n \"method\": \"newTokenization\",\n \"signerAddress\": \"0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b\",\n \"chainId\": \"aa36a7\",\n \"tokenizerEmail\": \"tokenizer@example.com\",\n \"name\": \"Example Token\",\n \"tokenSymbol\": \"EXMPL\",\n \"tokenType\": \"EQUITY\",\n \"supplyCap\": \"1000000\",\n \"url\": \"https://example.com/token-docs\",\n \"preMints\": [\n {\n \"amount\": \"1000\"\n }\n ],\n \"initialHolders\": [\n {\n \"walletAddress\": \"0x1111111111111111111111111111111111111111\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sandbox.brickken.com/prepare-transactions")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"method\": \"newTokenization\",\n \"signerAddress\": \"0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b\",\n \"chainId\": \"aa36a7\",\n \"tokenizerEmail\": \"tokenizer@example.com\",\n \"name\": \"Example Token\",\n \"tokenSymbol\": \"EXMPL\",\n \"tokenType\": \"EQUITY\",\n \"supplyCap\": \"1000000\",\n \"url\": \"https://example.com/token-docs\",\n \"preMints\": [\n {\n \"amount\": \"1000\"\n }\n ],\n \"initialHolders\": [\n {\n \"walletAddress\": \"0x1111111111111111111111111111111111111111\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.brickken.com/prepare-transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"method\": \"newTokenization\",\n \"signerAddress\": \"0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b\",\n \"chainId\": \"aa36a7\",\n \"tokenizerEmail\": \"tokenizer@example.com\",\n \"name\": \"Example Token\",\n \"tokenSymbol\": \"EXMPL\",\n \"tokenType\": \"EQUITY\",\n \"supplyCap\": \"1000000\",\n \"url\": \"https://example.com/token-docs\",\n \"preMints\": [\n {\n \"amount\": \"1000\"\n }\n ],\n \"initialHolders\": [\n {\n \"walletAddress\": \"0x1111111111111111111111111111111111111111\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"transactions": [
{
"from": "0x1234567890abcdef1234567890abcdef12345678",
"to": "0xabcdef1234567890abcdef1234567890abcdef12",
"value": "0x00",
"nonce": 3792,
"chainId": 11155111,
"data": "0xd362e8a70000000000000000000000000000000000000000000000000000000000000040...",
"type": 2,
"maxPriorityFeePerGas": "1150000",
"maxFeePerGas": "1156037",
"gasLimit": "0xccef"
}
],
"txId": "0x46adea7bdf49c576a760102e0d6bc9ecd650b3998588cd3d7f576a7973426aad",
"info": {
"tokenizerEmail": "tokenizer@example.com",
"tokenSymbol": "EXMPL",
"investorEmail": "investor@example.com"
}
}Common Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
chainId | string | Yes | Blockchain network identifier (hex format) |
method | string | Yes | Transaction method type |
signerAddress | string | Conditional | Address that will sign the transaction. Most methods require it; newInvest and claimTokens can use investorAddress as the signer. |
Supported Methods
| Method | Description |
|---|---|
newTokenization | Create a new tokenized asset. |
mintToken | Mint tokens to one or more investors. |
whitelist | Whitelist or blacklist investor wallets. |
burnToken | Burn tokens from the signer balance. |
transferFrom | Transfer tokens from an approved owner address. |
transferTo | Transfer tokens from the signer address. |
approve | Approve token spending. |
dividendDistribution | Distribute payment-token dividends. |
newSto | Create a Security Token Offering. |
newInvest | Prepare an STO investment. |
claimTokens | Claim tokens from a successful STO. |
closeOffer | Close an active STO. |
Response Format
The response includes the transaction details, metadata, and a unique transaction ID that must be saved for use with the/send-transactions endpoint.
Important: The txId is NOT a blockchain transaction hash - it’s an internal identifier used to link the prepared transactions with the send operation.
Response Fields
| Field | Type | Description |
|---|---|---|
transactions | array | Array of unsigned transaction objects ready for signing |
info | object | Metadata about the operation including emails and token symbol |
txId | string | Unique identifier for this transaction batch (required for /send-transactions) |
- Sign each transaction in the
transactionsarray - Submit the signed transactions along with the
txIdto/send-transactions
Next step
Preparing does not touch the chain. The response gives youtxId and an array of unsigned transactions — you still have to sign and submit them.
Sign every returned transaction
signerAddress, or investorAddress for newInvest and claimTokens. It must be whitelisted by Brickken, and it needs native gas on the target chain.Submit the signed payloads
POST them to /send-transactions as { txId, signedTransactions } and Brickken broadcasts for you.If you would rather broadcast yourself, prepare with executionMode: "client-broadcast" and confirm afterwards with { txId, txHash } instead.Poll until it confirms
GET /get-transaction-status with the txId. A pending status means it is broadcast but not yet mined — do not resubmit.Authorizations
Body
The operation to be performed. Includes standard tokenization methods and x402-eligible agentic methods. Agentic methods can also be addressed through /x402/... facade endpoints, where the method is derived from the path. newTokenizedAgent remains a legacy alias for direct /prepare-transactions calls and is not listed in x402scan discovery.
newTokenization, newSto, newInvest, claimTokens, mintToken, whitelist, approve, burnToken, transferFrom, transferTo, dividendDistribution, closeOffer, newTokenizedAgent, agentRegister, agentSetURI, agentSetMetadata, agentSetWallet, agentTransferOwnership, agentGiveFeedback, agentRevokeFeedback, agentAppendFeedbackResponse, agentCreateToken, agentMintToken, agentBurnToken, agentTransferToken, agentTransferFromToken, agentApproveToken "newTokenization"
Required. Blockchain network identifier. Hex format is recommended, for example Sepolia aa36a7.
"aa36a7"
Optional. Wallet address that will sign the prepared transaction. If omitted, the API uses investorAddress for this method.
"0x742d35Cc6634C0532925a3b8D4C9db96c4b4d8b"
Required. Token symbol. Must be 2 to 5 uppercase letters or numbers.
"EXMPL"
Optional. Token type. Defaults to EQUITY when omitted.
EQUITY, DEBT, BILL_FACTORING, ICO, STABLECOIN, REVENUE_SHARE, RWA_TOKEN, PROFIT_SHARING "EQUITY"
Optional. Tokenizer email. Required for newTokenization, newSto, and closeOffer.
"tokenizer@example.com"
Required. Accepted payment token symbol.
"USDT"
Optional. Amount used by approve, burnToken, transferFrom, transferTo, and dividendDistribution.
"100"
Required. STO end date.
"2026-12-31T23:59:59.000Z"
Optional. Source address required by transferFrom.
^0x[a-fA-F0-9]{40}$"0x1111111111111111111111111111111111111111"
Optional. Initial holders paired by index with preMints. Provide walletAddress directly, or email when a DFNS wallet can be resolved.
Show child attributes
Show child attributes
[
{
"walletAddress": "0x1111111111111111111111111111111111111111"
}
]
Required. Payment-token amount to invest.
"1000"
Optional. Investor wallet address. Required for newInvest and claimTokens; optional for approve payment-token owner scope.
^0x[a-fA-F0-9]{40}$"0x1111111111111111111111111111111111111111"
Optional. Investor email. Required for newInvest, claimTokens, burnToken, and each whitelist/mint recipient.
"investor@example.com"
Required. Maximum investment amount.
"10000"
Required. Maximum raise amount in USD.
"100000"
Required. Minimum investment amount.
"100"
Required. Minimum raise amount in USD.
"10000"
Required. Name of the tokenized asset.
"Example Token"
Optional. Default profile data used when creating missing investor users.
Show child attributes
Show child attributes
Required. Name of the STO offering.
"Series A"
Optional. Payment token symbol used by newInvest. If omitted, the chain default payment token is used.
"USDT"
Optional. Pre-mint amounts. If provided, initialHolders must also be provided with the same length.
Show child attributes
Show child attributes
[{ "amount": "1000" }]
Optional. Spender address required by approve. Before dividendDistribution, this must be the STO tokenAddress returned by GET /get-tokenizer-info, not escrowAddress.
^0x[a-fA-F0-9]{40}$"0x3333333333333333333333333333333333333333"
Required. STO start date.
"2026-09-01T00:00:00.000Z"
Optional. Maximum token supply. Defaults to 0 when omitted.
"1000000"
Optional. Destination address required by transferFrom and transferTo.
^0x[a-fA-F0-9]{40}$"0x2222222222222222222222222222222222222222"
Required. Number of tokens offered in the STO.
"1000"
Optional. Tokenizer wallet address used by tokenization setup flows. It is required by approve when tokenSymbol is a shared payment token; use companyWalletAddress from GET /get-tokenizer-info for the related asset.
^0x[a-fA-F0-9]{40}$"0x4444444444444444444444444444444444444444"
Optional. Token documentation URL. Defaults to an empty string when omitted.
"https://example.com/token-docs"
Required. Users to mint tokens to.
1Show child attributes
Show child attributes
[
{
"investorEmail": "investor@example.com",
"investorAddress": "0x1111111111111111111111111111111111111111",
"amount": "100",
"needWhitelist": true
}
]
Required. Users to whitelist or blacklist.
1Show child attributes
Show child attributes
[
{
"investorAddress": "0x1111111111111111111111111111111111111111",
"investorEmail": "investor@example.com",
"whitelistStatus": true
}
]
Tokenizer owner email used by agentic methods.
"owner@example.com"
Tracking email used by feedback and agent token methods.
"reviewer@example.com"
Agent service descriptors used by agentRegister.
Agent metadata stored in the registration file.
AI model name for agent registration or metadata updates.
"gpt-4o"
AI model provider stored in the agent profile.
"openai"
Internal tokenized agent UUID returned by agentRegister.
On-chain ERC-8004 agent ID.
Metadata key used by agentSetMetadata.
"modelName"
Metadata value used by agentSetMetadata.
Encoding mode for agentSetMetadata.
string, json, hex Agent wallet assigned by agentSetWallet.
Hex signature used by agentSetWallet.
Signature deadline used by agentSetWallet.
Feedback index used by reputation methods.
Reviewer/client address used by agentAppendFeedbackResponse.
Off-chain response URI used by agentAppendFeedbackResponse.
Off-chain feedback URI used by agentGiveFeedback.
Optional 32-byte content hash for feedback.
Optional 32-byte content hash for a feedback response.
Operational agent wallet used by agentCreateToken.
Agent token symbol used by agentCreateToken.
"MAT"
Human-readable premint amount used by agentCreateToken.
Agent token decimals. Defaults to 18.
Deployed agent token address used by agentMintToken and agentBurnToken.
Whether the registered agent declares x402 support in its profile.
Whether the registered agent should appear active.
Optional. Payment token contract address override. If omitted, the chain default payment token is used.
^0x[a-fA-F0-9]{40}$"0x5555555555555555555555555555555555555555"
Response
Successful response
Array of unsigned transaction objects ready for signing
Show child attributes
Show child attributes
Unique identifier for this transaction batch (required for /send-transactions). This is NOT a blockchain transaction hash.
"0x46adea7bdf49c576a760102e0d6bc9ecd650b3998588cd3d7f576a7973426aad"
Metadata about the operation
Show child attributes
Show child attributes