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:

curl -X POST https://gateway-48587430648.europe-west6.run.app/wallets/register \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "password": "secure-password-123",
    "name": "Your Name"
  }'

Response (201 Created):

{
  "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. First request an OTP:

curl -X POST https://gateway-48587430648.europe-west6.run.app/auth/otp \
  -H "Content-Type: application/json" \
  -d '{"email": "user@example.com"}'

Then authenticate with the OTP:

curl -X POST https://gateway-48587430648.europe-west6.run.app/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "otp": "123456"
  }'

Response (200 OK):

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YWxsZXRfYWJjMTIzeHl6In0...",
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "expires_in": 3600
}

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

Step 3: Create an Organization

Create a workspace to organize your resources:

curl -X POST https://gateway-48587430648.europe-west6.run.app/organizations \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My Company",
    "description": "Production tokenization workspace"
  }'

Response (201 Created):

{
  "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):

curl -X POST https://gateway-48587430648.europe-west6.run.app/api-keys \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Org-Id: $ORG_ID" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Production Key" }'

Response (201 Created):

{
  "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:

curl -X POST https://gateway-48587430648.europe-west6.run.app/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):

{
  "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:

curl -X POST https://gateway-48587430648.europe-west6.run.app/ebus/execute \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Org-Id: $ORG_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "action": {
      "emit": {
        "template_id": "tpl_mno345pqr",
        "properties": {
          "serial_number": "SN-12345",
          "manufacture_date": "2026-01-15",
          "price": 99.99
        }
      }
    }
  }'

Response (202 Accepted):

{
  "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:

curl -X GET https://gateway-48587430648.europe-west6.run.app/objects/obj_yza678bcd \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Org-Id: $ORG_ID"

Response (200 OK):

{
  "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.