Quick Start

Create your first tokenized object from zero to finish in under 5 minutes with copy-paste curl commands.

Zero-to-First-Object in 7 Steps

This guide walks you through creating your first tokenized object with complete curl examples and expected responses. Save credentials as you go.

Step 1: Register a Wallet

Create your account with a wallet registration:

Code
curl -X POST https://api-testnet.dual.network/wallets/register \\
-H "Content-Type: application/json" \\
-d '{
"email": "user@example.com",
"password": "secure-password-123",
"name": "Your Name"
}'

Response (201 Created):

Code
{
"id": "wallet_abc123xyz",
"email": "user@example.com",
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f42e0E",
"created_at": "2026-03-17T10:00:00Z"
}

Save your id, email, and address.

Step 2: Login (Get Bearer Token)

Authenticate to obtain a JWT token for subsequent API calls:

Code
curl -X POST https://api-testnet.dual.network/wallets/login \\
-H "Content-Type: application/json" \\
-d '{
"email": "user@example.com",
"password": "secure-password-123"
}'

Response (200 OK):

Code
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YWxsZXRfYWJjMTIzeHl6In0...",
"expires_in": 3600,
"user_id": "wallet_abc123xyz"
}

Save the token. Use it as: Authorization: Bearer $TOKEN

Step 3: Create an Organization

Create a workspace to organize your resources:

Code
curl -X POST https://api-testnet.dual.network/organizations \\
-H "Authorization: Bearer $TOKEN" \\
-H "Content-Type: application/json" \\
-d '{
"name": "My Company",
"description": "Production tokenization workspace"
}'

Response (201 Created):

Code
{
"id": "org_def456uvw",
"name": "My Company",
"description": "Production tokenization workspace",
"owner_id": "wallet_abc123xyz",
"created_at": "2026-03-17T10:00:00Z"
}

Save the id. You'll use it in the X-Org-Id header for all subsequent requests.

Step 4: Create an API Key

Generate an API key for programmatic access (recommended for production):

Code
curl -X POST https://api-testnet.dual.network/api-keys \\
-H "Authorization: Bearer $TOKEN" \\
-H "X-Org-Id: $ORG_ID" \\
-H "Content-Type: application/json" \\
-d '{ "name": "Production Key" }'

Response (201 Created):

Code
{
"id": "key_ghi789jkl",
"name": "Production Key",
"key": "sk_live_aBcDeF1G2h3I4j5K6l7M8n9O0p",
"created_at": "2026-03-17T10:00:00Z"
}

Save the key. This is your API key for the x-api-key header.

Step 5: Create a Template

Define the structure of your tokenized objects:

Code
curl -X POST https://api-testnet.dual.network/templates \\
-H "Authorization: Bearer $TOKEN" \\
-H "X-Org-Id: $ORG_ID" \\
-H "Content-Type: application/json" \\
-d '{
"name": "io.example.product",
"description": "A product token template",
"properties": {
"serial_number": "string",
"manufacture_date": "string",
"price": "number"
}
}'

Response (201 Created):

Code
{
"id": "tpl_mno345pqr",
"name": "io.example.product",
"description": "A product token template",
"organization_id": "org_def456uvw",
"properties": {
"serial_number": "string",
"manufacture_date": "string",
"price": "number"
},
"created_at": "2026-03-17T10:00:00Z"
}

Save the template id.

Step 6: Create an Object (Mint)

Emit your first tokenized object instance:

Code
curl -X POST https://api-testnet.dual.network/ebus/actions \\
-H "Authorization: Bearer $TOKEN" \\
-H "X-Org-Id: $ORG_ID" \\
-H "Content-Type: application/json" \\
-d '{
"action_type": "emit",
"template_id": "tpl_mno345pqr",
"properties": {
"serial_number": "SN-12345",
"manufacture_date": "2026-01-15",
"price": 99.99
}
}'

Response (202 Accepted):

Code
{
"action_id": "act_stu567vwx",
"object_id": "obj_yza678bcd",
"status": "processing",
"batch_id": "batch_efg789hij",
"created_at": "2026-03-17T10:00:00Z"
}

Save the object_id. The action is queued for processing.

Step 7: Verify the Object

Retrieve your created object to confirm it exists:

Code
curl -X GET https://api-testnet.dual.network/objects/obj_yza678bcd \\
-H "Authorization: Bearer $TOKEN" \\
-H "X-Org-Id: $ORG_ID"

Response (200 OK):

Code
{
"id": "obj_yza678bcd",
"template_id": "tpl_mno345pqr",
"template_name": "io.example.product",
"organization_id": "org_def456uvw",
"owner": "0x742d35Cc6634C0532925a3b844Bc9e7595f42e0E",
"properties": {
"serial_number": "SN-12345",
"manufacture_date": "2026-01-15",
"price": 99.99
},
"status": "active",
"created_at": "2026-03-17T10:00:05Z",
"batch_id": "batch_efg789hij",
"fingerprint": "0x1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p"
}

You're Done!

You've successfully created your first tokenized object. From here, you can:

  • Transfer the object to another wallet address
  • Update object properties
  • Create more objects from the same or different templates
  • Set up webhooks to listen for events

See Objects, Templates, and Code Samples for next steps.