thirdweb Engine
Backend transaction execution engine providing server wallets with automated nonce management, gas handling, transaction queueing and retries, plus contract write/read, encoding, signing, and transaction analytics endpoints.
Backend transaction execution engine providing server wallets with automated nonce management, gas handling, transaction queueing and retries, plus contract write/read, encoding, signing, and transaction analytics endpoints.
openapi: 3.0.1
info:
title: thirdweb API
description: >-
thirdweb provides a unified interface for Web3 development. This
specification documents real, publicly documented HTTP endpoints across the
thirdweb unified API (api.thirdweb.com - wallets, transactions, contracts,
tokens, payments and bridge), Engine (backend transaction execution),
Insight (indexed on-chain data) and Nebula (AI blockchain interface).
Authenticate frontend usage with an x-client-id header (plus x-bundle-id for
native apps) or a Bearer JWT, and backend usage with an x-secret-key header.
termsOfService: https://thirdweb.com/tos
contact:
name: thirdweb Support
url: https://thirdweb.com/support
version: '1.22'
servers:
- url: https://api.thirdweb.com
description: thirdweb unified API (wallets, transactions, contracts, tokens, payments, bridge)
- url: https://engine.thirdweb.com
description: thirdweb Engine (backend transaction execution)
- url: https://insight.thirdweb.com
description: thirdweb Insight (indexed on-chain data)
- url: https://nebula-api.thirdweb.com
description: thirdweb Nebula (AI blockchain interface)
security:
- SecretKeyAuth: []
- ClientAuth: []
- BearerAuth: []
tags:
- name: Authentication
description: Wallet authentication flows.
- name: Wallets
description: User and server wallet management, signing, and transfers.
- name: Contracts
description: Smart contract read, write, and deployment.
- name: Transactions
description: Transaction submission and status.
- name: Tokens
description: Token creation, listing, and ownership.
- name: Payments
description: Bridge, swap, convert, onramp, and x402 payments.
- name: Engine
description: Backend transaction execution with server wallets.
- name: Insight
description: Indexed on-chain events, transactions, tokens, and NFTs.
- name: Nebula
description: AI blockchain interface.
paths:
/v1/auth/initiate:
post:
operationId: initiateAuth
tags:
- Authentication
summary: Initiate a wallet authentication flow.
description: Starts an authentication flow (email, phone, OAuth, or SIWE) and triggers any verification step such as an OTP.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AuthInitiateRequest'
responses:
'200':
description: Authentication initiated.
/v1/auth/complete:
post:
operationId: completeAuth
tags:
- Authentication
summary: Complete a wallet authentication flow.
description: Completes authentication by verifying the challenge and returns a JWT access token and wallet address.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AuthCompleteRequest'
responses:
'200':
description: Authenticated.
content:
application/json:
schema:
$ref: '#/components/schemas/AuthResult'
/v1/wallets/me:
get:
operationId: getMyWallet
tags:
- Wallets
summary: Get the authenticated user's wallet.
security:
- BearerAuth: []
responses:
'200':
description: Wallet details.
content:
application/json:
schema:
$ref: '#/components/schemas/Wallet'
/v1/wallets/user:
get:
operationId: listUserWallets
tags:
- Wallets
summary: List user wallets.
responses:
'200':
description: A list of user wallets.
post:
operationId: createUserWallet
tags:
- Wallets
summary: Create a user wallet.
responses:
'201':
description: User wallet created.
/v1/wallets/server:
get:
operationId: listServerWallets
tags:
- Wallets
summary: List server wallets.
responses:
'200':
description: A list of server wallets.
post:
operationId: createServerWallet
tags:
- Wallets
summary: Create a server wallet.
responses:
'201':
description: Server wallet created.
/v1/wallets/{address}/balance:
get:
operationId: getWalletBalance
tags:
- Wallets
summary: Get a wallet's token balance.
parameters:
- $ref: '#/components/parameters/Address'
- name: chainId
in: query
required: true
schema:
type: integer
- name: tokenAddress
in: query
schema:
type: string
responses:
'200':
description: Balance result.
/v1/wallets/sign-message:
post:
operationId: signMessage
tags:
- Wallets
summary: Sign an arbitrary message with a wallet.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SignMessageRequest'
responses:
'200':
description: Signature result.
/v1/wallets/sign-typed-data:
post:
operationId: signTypedData
tags:
- Wallets
summary: Sign EIP-712 typed data with a wallet.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: Signature result.
/v1/wallets/send:
post:
operationId: sendTokens
tags:
- Wallets
summary: Send native or ERC-20/721/1155 tokens to recipients.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SendTokensRequest'
responses:
'200':
description: Transaction queued.
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionResult'
/v1/contracts/read:
post:
operationId: readContract
tags:
- Contracts
summary: Read from one or more smart contracts.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ContractReadRequest'
responses:
'200':
description: Read results.
/v1/contracts/write:
post:
operationId: writeContract
tags:
- Contracts
summary: Write to one or more smart contracts.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ContractWriteRequest'
responses:
'200':
description: Transaction queued.
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionResult'
/v1/contracts:
post:
operationId: deployContract
tags:
- Contracts
summary: Deploy a smart contract.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: Deployment queued.
/v1/contracts/{chainId}/{address}/events:
get:
operationId: getContractEvents
tags:
- Contracts
summary: Get events emitted by a contract.
parameters:
- $ref: '#/components/parameters/ChainId'
- $ref: '#/components/parameters/Address'
responses:
'200':
description: Contract events.
/v1/transactions:
get:
operationId: listTransactions
tags:
- Transactions
summary: List transactions.
responses:
'200':
description: A list of transactions.
post:
operationId: sendTransactions
tags:
- Transactions
summary: Send a batch of transactions.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: Transactions queued.
/v1/transactions/{transactionId}:
get:
operationId: getTransaction
tags:
- Transactions
summary: Get a transaction by ID.
parameters:
- name: transactionId
in: path
required: true
schema:
type: string
responses:
'200':
description: Transaction details.
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionResult'
/v1/tokens:
get:
operationId: listTokens
tags:
- Tokens
summary: List tokens.
responses:
'200':
description: A list of tokens.
post:
operationId: createToken
tags:
- Tokens
summary: Create (deploy) a token.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTokenRequest'
responses:
'200':
description: Token creation queued.
/v1/tokens/{chainId}/{address}/owners:
get:
operationId: getTokenOwners
tags:
- Tokens
summary: Get owners of a token.
parameters:
- $ref: '#/components/parameters/ChainId'
- $ref: '#/components/parameters/Address'
responses:
'200':
description: Token owners.
/v1/bridge/chains:
get:
operationId: bridgeChains
tags:
- Payments
summary: List chains supported for bridging.
responses:
'200':
description: Supported chains.
/v1/bridge/routes:
get:
operationId: bridgeRoutes
tags:
- Payments
summary: List supported bridge/swap routes.
responses:
'200':
description: Supported routes.
/v1/bridge/convert:
get:
operationId: bridgeConvert
tags:
- Payments
summary: Convert a fiat amount to a crypto quote.
responses:
'200':
description: Conversion quote.
/v1/bridge/swap:
post:
operationId: bridgeSwap
tags:
- Payments
summary: Swap or bridge tokens.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BridgeSwapRequest'
responses:
'200':
description: Swap prepared.
/v1/payments/x402/verify:
post:
operationId: x402Verify
tags:
- Payments
summary: Verify an x402 payment.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: Verification result.
/v1/payments/x402/settle:
post:
operationId: x402Settle
tags:
- Payments
summary: Settle an x402 payment.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: Settlement result.
/v1/payments/x402/supported:
get:
operationId: x402Supported
tags:
- Payments
summary: List supported x402 payment methods.
responses:
'200':
description: Supported payment methods.
/ai/chat:
post:
operationId: aiChat
tags:
- Nebula
summary: Chat with the thirdweb AI to read and write on-chain.
servers:
- url: https://api.thirdweb.com
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: AI chat response.
/v1/write/contract:
post:
operationId: engineWriteContract
tags:
- Engine
summary: Write to a contract via Engine.
servers:
- url: https://engine.thirdweb.com
security:
- SecretKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: Transaction queued by Engine.
/v1/read/contract:
post:
operationId: engineReadContract
tags:
- Engine
summary: Read from a contract via Engine.
servers:
- url: https://engine.thirdweb.com
security:
- SecretKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: Read result.
/v1/accounts:
get:
operationId: engineListServerWallets
tags:
- Engine
summary: List Engine server wallets.
servers:
- url: https://engine.thirdweb.com
security:
- SecretKeyAuth: []
responses:
'200':
description: A list of server wallets.
post:
operationId: engineGetOrCreateServerWallet
tags:
- Engine
summary: Get or create an Engine server wallet.
servers:
- url: https://engine.thirdweb.com
security:
- SecretKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: Server wallet.
/v1/events:
get:
operationId: insightGetEvents
tags:
- Insight
summary: Get indexed on-chain events.
servers:
- url: https://insight.thirdweb.com
security:
- ClientAuth: []
- SecretKeyAuth: []
parameters:
- $ref: '#/components/parameters/InsightChainId'
responses:
'200':
description: Indexed events.
/v1/transactions/{contractAddress}:
get:
operationId: insightGetContractTransactions
tags:
- Insight
summary: Get indexed transactions for a contract.
servers:
- url: https://insight.thirdweb.com
security:
- ClientAuth: []
- SecretKeyAuth: []
parameters:
- name: contractAddress
in: path
required: true
schema:
type: string
- $ref: '#/components/parameters/InsightChainId'
responses:
'200':
description: Indexed transactions.
/v1/tokens/erc20/{ownerAddress}:
get:
operationId: insightGetErc20Balances
tags:
- Insight
summary: Get ERC-20 balances for an address.
servers:
- url: https://insight.thirdweb.com
security:
- ClientAuth: []
- SecretKeyAuth: []
parameters:
- name: ownerAddress
in: path
required: true
schema:
type: string
- $ref: '#/components/parameters/InsightChainId'
responses:
'200':
description: ERC-20 balances.
/v1/nfts/balance/{ownerAddress}:
get:
operationId: insightGetNftBalances
tags:
- Insight
summary: Get NFT balances for an address.
servers:
- url: https://insight.thirdweb.com
security:
- ClientAuth: []
- SecretKeyAuth: []
parameters:
- name: ownerAddress
in: path
required: true
schema:
type: string
- $ref: '#/components/parameters/InsightChainId'
responses:
'200':
description: NFT balances.
/v1/webhooks:
get:
operationId: insightListWebhooks
tags:
- Insight
summary: List Insight webhooks.
servers:
- url: https://insight.thirdweb.com
security:
- ClientAuth: []
- SecretKeyAuth: []
responses:
'200':
description: A list of webhooks.
post:
operationId: insightCreateWebhook
tags:
- Insight
summary: Create an Insight webhook for on-chain events.
servers:
- url: https://insight.thirdweb.com
security:
- ClientAuth: []
- SecretKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookCreateRequest'
responses:
'201':
description: Webhook created.
/chat:
post:
operationId: nebulaChat
tags:
- Nebula
summary: Send a message to a Nebula AI session.
servers:
- url: https://nebula-api.thirdweb.com
security:
- SecretKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: Nebula response.
/execute:
post:
operationId: nebulaExecute
tags:
- Nebula
summary: Have Nebula execute an on-chain action.
servers:
- url: https://nebula-api.thirdweb.com
security:
- SecretKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: Execution result.
/session:
post:
operationId: nebulaCreateSession
tags:
- Nebula
summary: Create a Nebula session.
servers:
- url: https://nebula-api.thirdweb.com
security:
- SecretKeyAuth: []
responses:
'200':
description: Session created.
components:
securitySchemes:
ClientAuth:
type: apiKey
in: header
name: x-client-id
description: Client ID for frontend usage. Web sends x-client-id only; native apps also send x-bundle-id.
BundleIdAuth:
type: apiKey
in: header
name: x-bundle-id
description: Bundle ID for native (desktop/mobile) platform authentication alongside x-client-id.
SecretKeyAuth:
type: apiKey
in: header
name: x-secret-key
description: Secret key for backend usage; never expose publicly.
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: JWT access token obtained from wallet authentication, for frontend usage.
parameters:
Address:
name: address
in: path
required: true
description: An EVM wallet or contract address.
schema:
type: string
ChainId:
name: chainId
in: path
required: true
description: The numeric EVM chain ID.
schema:
type: integer
InsightChainId:
name: chain
in: query
required: false
description: One or more chain IDs to scope the query.
schema:
type: integer
schemas:
AuthInitiateRequest:
type: object
properties:
method:
type: string
description: Authentication method (e.g. email, phone, siwe, an OAuth provider).
email:
type: string
phone:
type: string
required:
- method
AuthCompleteRequest:
type: object
properties:
method:
type: string
code:
type: string
description: Verification code or signed payload completing the challenge.
required:
- method
AuthResult:
type: object
properties:
token:
type: string
description: JWT access token.
walletAddress:
type: string
isNewUser:
type: boolean
Wallet:
type: object
properties:
address:
type: string
smartWalletAddress:
type: string
createdAt:
type: string
format: date-time
SignMessageRequest:
type: object
properties:
from:
type: string
description: The wallet address signing the message.
message:
type: string
chainId:
type: integer
required:
- message
SendTokensRequest:
type: object
properties:
from:
type: string
chainId:
type: integer
recipients:
type: array
items:
type: object
properties:
address:
type: string
quantity:
type: string
tokenAddress:
type: string
tokenId:
type: string
required:
- chainId
- recipients
ContractCall:
type: object
properties:
contractAddress:
type: string
method:
type: string
description: Function signature or name to call.
params:
type: array
items: {}
required:
- contractAddress
- method
ContractReadRequest:
type: object
properties:
chainId:
type: integer
calls:
type: array
items:
$ref: '#/components/schemas/ContractCall'
required:
- chainId
- calls
ContractWriteRequest:
type: object
properties:
chainId:
type: integer
from:
type: string
description: The wallet address sending the transactions.
calls:
type: array
items:
$ref: '#/components/schemas/ContractCall'
idempotencyKey:
type: string
required:
- chainId
- calls
CreateTokenRequest:
type: object
properties:
chainId:
type: integer
name:
type: string
symbol:
type: string
description:
type: string
imageUrl:
type: string
owner:
type: string
maxSupply:
type: string
required:
- chainId
- name
- symbol
- description
- imageUrl
BridgeSwapRequest:
type: object
properties:
tokenIn:
type: object
description: Source token (chainId and address).
tokenOut:
type: object
description: Destination token (chainId and address).
exact:
type: string
description: Exact input or output amount.
from:
type: string
receiver:
type: string
slippageToleranceBps:
type: integer
required:
- tokenIn
- tokenOut
TransactionResult:
type: object
properties:
transactionId:
type: string
transactionHash:
type: string
chainId:
type: integer
status:
type: string
description: Queued, submitted, mined, or errored.
WebhookCreateRequest:
type: object
properties:
webhookUrl:
type: string
name:
type: string
filters:
type: object
description: Event/transaction filters scoping which on-chain activity triggers the webhook.
required:
- webhookUrl