Wally API (0.0.1)

Download OpenAPI specification:Download

Easiest way to create and manage crypto wallets. Get started by creating an API key at https://app.wally.xyz

Getting Started (JS SDK)

npm install wally-sdk

Then follow the instructions in the README

Getting Started (API)

Create a developer account, along with an organization and your first app, at https://app.wally.xyz. You can (and most likely will) have multiple apps. This will help you manage things between your testnet and mainnet services. Store your API key somewhere to be used in your app. You won't be able to access this API key again, but we can easily generate a new one for you in the dashboard.

Somewhere in your code, (most likely in your register user endpoint), you will want to add a request to create a wallet.

  fetch(
      'https://api.wally.xyz/{v1}/wallets', {
        method: 'POST',
        body: JSON.stringify({
          'email': email,
          'id': user.id,
        }),
        headers={
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${wally_api_key}`
        },
      }
  )

(See the expected response here)

You should now successfully have a wallet for that user. You can now reference it either by the ID you passed in, or their email address.

You can now send messages or transactions to be signed on behalf of this user like follows:

  fetch(
      'https://api.wally.xyz/{v1}/wallets/${user.id}/sign-message', {
        method: 'POST',
        body: JSON.stringify({
          'message': message,
        }),
        headers={
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${wally_api_key}`
        },
      }
  )

(See the expected response here)

It's as simple as that! And users can always access their wallet via https://app.wally.xyz/wallet.

Getting Started (Analytics)

Copy the script from your app's dashboard and paste it into your app's HTML within the head tag. If you already have Google Analytics, Google Tag Manager, HotJar or another analytics script install, you can paste it after that in the same part of the code.

<script src="https://analytics.wally.xyz/index.js" clientId="WALLY-CLIENT-ID"></script>

Webflow

Navigate to the Settings for your project (note this is not in the Designer UI). Click on "Custom Code" and paste the script into the Head Code section.

Next.js

In your _document.js file, add the script inside a Head tag within your Render function. Your render function should look something like this:

render() {
  return (
    <Html>
      <Head>
        <meta
          name="description"
          content="Seamless onboarding infrastructure for the future of Web3"
        />
        <link rel="icon" href="/favicon.ico" />
        <script src="https://analytics.wally.xyz/index.js" clientId="WALLY-CLIENT-ID"></script>
      </Head>
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  );
}

Apps

Get App details

Get your App details

Securitybearer
Responses
200
500
get/v1/app
Request samples
Response samples
application/json
{
  • "id": "string",
  • "address": "string",
  • "environment": "ETHEREUM_GOERLI",
  • "name": "string",
  • "clientId": "string",
  • "redirectUrl": "string"
}

Get App wallet balance

Get the balance in your App

Securitybearer
Responses
200
500
get/v1/app/balance
Request samples
Response samples
application/json
{
  • "id": "string",
  • "balance": "string"
}

Sign a message with app wallet

Sign a message with a Wallet

Securitybearer
Request
Request Body schema: application/json
message
required
string

An unsigned message string

Responses
201
400
404
500
post/v1/app/wallet/sign-message
Request samples
application/json
{
  • "message": "string"
}
Response samples
application/json
{
  • "address": "string",
  • "signature": "string"
}

Sign a transaction (does not send to blockchain) with app wallet

Sign a transaction with a Wallet

Securitybearer
Request
Request Body schema: application/json
to
required
string
from
string
nonce
number
gasLimit
required
number
gasPrice
number
data
string
value
number
chainId
number
type
number
maxPriorityFeePerGas
number
maxFeePerGas
number
customData
object
ccipReadEnabled
boolean
Responses
201
400
404
500
post/v1/app/wallet/sign-transaction
Request samples
application/json
{
  • "to": "string",
  • "from": "string",
  • "nonce": 0,
  • "gasLimit": 0,
  • "gasPrice": 0,
  • "data": "string",
  • "value": 0,
  • "chainId": 0,
  • "type": 0,
  • "maxPriorityFeePerGas": 0,
  • "maxFeePerGas": 0,
  • "customData": { },
  • "ccipReadEnabled": true
}
Response samples
application/json
{
  • "signature": "string"
}

Sign and send a transaction to the blockchain via app wallet

Send a transaction with a Wallet

Securitybearer
Request
Request Body schema: application/json
to
required
string
from
string
nonce
number
gasLimit
required
number
gasPrice
number
data
string
value
number
chainId
number
type
number
maxPriorityFeePerGas
number
maxFeePerGas
number
customData
object
ccipReadEnabled
boolean
Responses
201
400
404
500
post/v1/app/wallet/send-transaction
Request samples
application/json
{
  • "to": "string",
  • "from": "string",
  • "nonce": 0,
  • "gasLimit": 0,
  • "gasPrice": 0,
  • "data": "string",
  • "value": 0,
  • "chainId": 0,
  • "type": 0,
  • "maxPriorityFeePerGas": 0,
  • "maxFeePerGas": 0,
  • "customData": { },
  • "ccipReadEnabled": true
}
Response samples
application/json
{
  • "response": { }
}

Get all wallets

Get a list of all the Wallet in your App

Securitybearer
Responses
200
500
get/v1/app/wallets
Request samples
Response samples
application/json
[
  • {
    }
]

Relays transaction to Thirdbuy's forwarder contract,

Designed to relay requests to Thirdbuy's forwarder contract and paygas on the caller's behalf

Request
path Parameters
clientId
required
string
Request Body schema: application/json
forwarderAddress
required
string

This is the address of the forwarder contract that will send the transaction to the actual smart contract.

request
required
object

The request to be forwarded.

signature
required
string

This is the signed signature of the address.

type
required
string

Type of request.

Responses
200
404
500
post/v1/app/gasrelay/{clientId}
Request samples
application/json
{
  • "forwarderAddress": "string",
  • "request": { },
  • "signature": "string",
  • "type": "string"
}
Response samples
application/json
{
  • "code": "NOT_FOUND",
  • "status": 404,
  • "message": "Resource not found"
}

Contracts

Deploy a contract

Deploy a contract for your App. NOTE: In order to complete this action, you will need to have Eth in your App's Wallet.

ImmutableX and MINT_NFT type contracts require metadataURI. Third Web contracts require structured metadata.

Securitybearer
Request
Request Body schema: application/json
type
string
Default: "MINT_NFT"

The type of Contract you want to deploy

Enum: "MINT_NFT" "TW_NFT_DROP" "TW_NFT_COLLECTION" "TW_SIGNATURE_DROP" "ERC_1155" "TW_EDITION_DROP"
name
string
Default: "App name"

Defines the token’s name, which other contracts and applications can identify. (e.g. Bored Ape Yacht Club)

symbol
string
Default: "App name with no vowels"

Used to define token’s shorthand name or symbol (e.g BAYC)

maxSupply
number

Used to set the max number of NFTs

units
string
Default: "gwei"

Used to set the format for the output of gas prices and transaction fees

Enum: "wei" "gwei" "ether"
collectionDescription
string

Used to set the description of the collection

collectionIconUrl
string

Used to set the description of the collection

collectionMetadataApiUrl
string

Used to set the metadata_api_url of the collection for retrieving NFT metadata json

collectionImageUrl
string

Used to set the image of the collection

metadataSchema
Array of objects
Default: [{"name":"name","type":"text","filterable":true},{"name":"description","type":"text","filterable":true},{"name":"image","type":"text","filterable":false},{"name":"properties","type":"continuous","filterable":true}]

Used to set the schema for the metadata on ImmutableX

metadataURI
string

Metadata URI for the contract. This allows you to customize things about how the contract appears on marketplaces, and set attributes like resale royalties https://docs.opensea.io/docs/contract-level-metadata.

There is a separate metadata URI that you can set for individual NFTs as well that specify data like rarity attributes. See the NFT documentation for more info on this.

object

Structured metadata for deploying the contract. Use this instead of metadataURI when deploying Third Web contracts.

See more about Third Web metadata here: https://portal.thirdweb.com/typescript/sdk.nftcontractdeploymetadata.

Responses
201
500
post/v1/contract
Request samples
application/json
{
  • "type": "MINT_NFT",
  • "name": "App name",
  • "symbol": "App name with no vowels",
  • "maxSupply": 0,
  • "units": "wei",
  • "collectionDescription": "string",
  • "collectionIconUrl": "string",
  • "collectionMetadataApiUrl": "string",
  • "collectionImageUrl": "string",
  • "metadataSchema": [
    ],
  • "metadataURI": "string",
  • "metadata": {
    }
}
Response samples
application/json
{
  • "id": "string",
  • "contractAddress": "string",
  • "transactionHash": "string",
  • "gasPrice": "string",
  • "gasLimit": "string",
  • "type": "MINT_NFT",
  • "created": "2019-08-24T14:15:22Z"
}

Connect a contract

Connect a contract deployed by thirdweb to your App. NOTE: This only works for contracts deployed by thirdweb

Securitybearer
Request
Request Body schema: application/json
type
string
Default: "MINT_NFT"

The type of Contract you want to deploy

Enum: "MINT_NFT" "TW_NFT_DROP" "TW_NFT_COLLECTION" "TW_SIGNATURE_DROP" "ERC_1155" "TW_EDITION_DROP"
name
string
Default: "App name"

Defines the name used to display the contract in the dashboard. Has no effect on the contract itself.

contractAddress
required
string

This is the blockchain address for the contract you want to connect

Responses
201
500
post/v1/contract/connect
Request samples
application/json
{
  • "type": "MINT_NFT",
  • "name": "App name",
  • "contractAddress": "string"
}
Response samples
application/json
{
  • "id": "string",
  • "contractAddress": "string",
  • "type": "MINT_NFT"
}

Get all NFTs are that from a specific contract

Get all NFTs are that from a specific contract

Securitybearer
Request
path Parameters
contractId
required
string
Responses
200
500
get/v1/contract/{contractId}/nfts
Request samples
Response samples
application/json
[
  • {
    }
]

Set claim conditions for a deployed Third Web contract

Set the claim conditions for a contract deployed by Third Web

Securitybearer
Request
Request Body schema: application/json
contractAddress
required
string

Address of the contract to set claim conditions for

tokenId
number

Token ID of the contract if applicable (for ERC 1155 types)

Responses
201
500
post/v1/contract/set-claim-conditions
Request samples
application/json
{
  • "contractAddress": "string",
  • "tokenId": 0
}
Response samples
application/json
{ }

Estimate contract deployment fees

Estimate the fees needed to deploy a contract. Remember that gas fees fluctuate over time.

Securitybearer
Request
query Parameters
type
string
Default: "MINT_NFT"

The type of Contract you want to deploy

Enum: "MINT_NFT" "TW_NFT_DROP" "TW_NFT_COLLECTION" "TW_SIGNATURE_DROP" "ERC_1155" "TW_EDITION_DROP"
name
string
Default: "App name"

Defines the token’s name, which other contracts and applications can identify. (e.g. Bored Ape Yacht Club)

symbol
string
Default: "App name with no vowels"

Used to define token’s shorthand name or symbol (e.g BAYC)

maxSupply
number

Used to set the max number of NFTs

units
string
Default: "gwei"

Used to set the format for the output of gas prices and transaction fees

Enum: "wei" "gwei" "ether"
collectionDescription
string

Used to set the description of the collection

collectionIconUrl
string

Used to set the description of the collection

collectionMetadataApiUrl
string

Used to set the metadata_api_url of the collection for retrieving NFT metadata json

collectionImageUrl
string

Used to set the image of the collection

metadataURI
string

Metadata URI for the contract. This allows you to customize things about how the contract appears on marketplaces, and set attributes like resale royalties https://docs.opensea.io/docs/contract-level-metadata.

There is a separate metadata URI that you can set for individual NFTs as well that specify data like rarity attributes. See the NFT documentation for more info on this.

description
string

A human readable description of the item.

external_link
string

Optional url for the contract.

fee_recipient
string

The address that will receive the proceeds from secondary sales (royalties).

image
string

The URL to the image of the item. Can be just about any type of image, and can be IPFS URLs or paths.

name
string

Name of the item.

platform_fee_basis_points
number

The percentage (in basis points) of platform fees.

platform_fee_recipient
string

The address that will receive the proceeds from platform fees.

primary_sale_recipient
string

The address that will receive the proceeds from primary sales. Defaults to app wallet address if not provided.

seller_fee_basis_points
number

The percentage (in basis points) of royalties for secondary sales.

symbol
string

Symbol for the NFTs

trusted_forwarders
Array of strings

Custom gasless trusted forwarder addresses

Responses
200
500
get/v1/contracts/estimated-deployment-fees
Request samples
Response samples
application/json
{
  • "gasUnits": "string",
  • "feeData": {
    },
  • "type": "MINT_NFT",
  • "fees": "string"
}

Wallets

Create a wallet

Create a new Wallet for the App specified in the authorization header

If email is provided and wallet address is NOT provided, it will attempt to create the user and the wallet. If the wallet address is provided, it will record the wallet address with the provided email or id if it exists in the request.

Securitybearer
Request
Request Body schema: application/json
email
string

The email we should associate with the Wallet

id
string

Unique ID that can be used to reference this Wallet later

address
string

Wallet's on-chain address

tags
Array of strings

Tags you would like to associate with this Wallet

Responses
201
400
409
500
post/v1/wallets
Request samples
application/json
{
  • "email": "string",
  • "id": "string",
  • "address": "string",
  • "tags": [
    ]
}
Response samples
application/json
{
  • "id": "string",
  • "address": "string",
  • "tags": [
    ]
}

Search wallets

Search wallets by user email or tags

Securitybearer
Request
query Parameters
email
string

The email associated with the Wallet

tag
string

Tags associated with this Wallet

contractAddress
string

Wallets that contain at least one NFT from a specific contract

Responses
200
400
409
500
get/v1/wallets
Request samples
Response samples
application/json
[
  • {
    }
]

WalletsController_clientIdConnect

Create a wallet from analytics script upon metamask connect event

Request
Request Body schema: application/json
device_id
required
string

User's uuid identifier from the analytics script

address
required
string or null

Wallet's on-chain address

clientId
required
string

Client ID of the app associated with the wallet

provider_name
required
string or null

Name of wallet provider (e.g. Metamask)

chain_name
required
string or null

Chain ID of the wallet collected

device_type
required
string

Device type ('mobile' or 'desktop')

Responses
201
400
409
500
post/v1/wallets/analytics/connect
Request samples
application/json
{
  • "device_id": "string",
  • "address": "string",
  • "clientId": "string",
  • "provider_name": "string",
  • "chain_name": "string",
  • "device_type": "string"
}
Response samples
application/json
{ }

WalletsController_clientIdView

Log user and create wallet if available from analytics script upon view page event

Request
Request Body schema: application/json
device_id
required
string

User's uuid identifier from the analytics script

address
required
string or null

Wallet's on-chain address

clientId
required
string

Client ID of the app associated with the wallet

provider_name
required
string or null

Name of wallet provider (e.g. Metamask)

chain_name
required
string or null

Chain ID of the wallet collected

device_type
required
string

Device type ('mobile' or 'desktop')

Responses
201
400
409
500
post/v1/wallets/analytics/page
Request samples
application/json
{
  • "device_id": "string",
  • "address": "string",
  • "clientId": "string",
  • "provider_name": "string",
  • "chain_name": "string",
  • "device_type": "string"
}
Response samples
application/json
{ }

Retrieve a wallet

Get Wallet details

Securitybearer
Request
path Parameters
id
required
string
Responses
200
404
500
get/v1/wallet/{id}
Request samples
Response samples
application/json
{
  • "id": "string",
  • "address": "string",
  • "tags": [
    ]
}

Get wallet balance

Get the amount of Eth stored in the Wallet

Securitybearer
Request
path Parameters
id
required
string
Responses
200
404
500
get/v1/wallet/{id}/balance
Request samples
Response samples
application/json
{
  • "id": "string",
  • "balance": "string"
}

Fetch NFTs

Get all the NFTs in a Wallet

Securitybearer
Request
path Parameters
id
required
string
Responses
200
404
500
get/v1/wallet/{id}/nfts
Request samples
Response samples
application/json
[
  • {
    }
]

Sign a message

Sign a message with a Wallet

Securitybearer
Request
path Parameters
id
required
string
Request Body schema: application/json
message
required
string

An unsigned message string

Responses
201
400
404
500
post/v1/wallet/{id}/sign-message
Request samples
application/json
{
  • "message": "string"
}
Response samples
application/json
{
  • "address": "string",
  • "signature": "string"
}

Sign a transaction (does not send to blockchain)

Sign a transaction with a Wallet

Securitybearer
Request
path Parameters
id
required
string
Request Body schema: application/json
to
required
string
from
string
nonce
number
gasLimit
required
number
gasPrice
number
data
string
value
number
chainId
number
type
number
maxPriorityFeePerGas
number
maxFeePerGas
number
customData
object
ccipReadEnabled
boolean
Responses
201
400
404
500
post/v1/wallet/{id}/sign-transaction
Request samples
application/json
{
  • "to": "string",
  • "from": "string",
  • "nonce": 0,
  • "gasLimit": 0,
  • "gasPrice": 0,
  • "data": "string",
  • "value": 0,
  • "chainId": 0,
  • "type": 0,
  • "maxPriorityFeePerGas": 0,
  • "maxFeePerGas": 0,
  • "customData": { },
  • "ccipReadEnabled": true
}
Response samples
application/json
{
  • "signature": "string"
}

Sign typed data with a wallet

Sign typed data with a Wallet

Request
path Parameters
id
required
string
Request Body schema: application/json
types
required
object

Type definitions for the message contents

primaryType
required
string

The top-level type of the message. Should be one of the keys in the types object.

required
object

Standardized EIP-712 transaction domain data

message
required
object

The message content

Responses
201
400
404
500
post/v1/wallet/{id}/sign-typed-data
Request samples
application/json
{
  • "types": { },
  • "primaryType": "string",
  • "domain": {
    },
  • "message": { }
}
Response samples
application/json
{
  • "address": "string",
  • "signature": "string"
}

Sign and send a transaction to the blockchain

Send a transaction with a Wallet

Securitybearer
Request
path Parameters
id
required
string
Request Body schema: application/json
to
required
string
from
string
nonce
number
gasLimit
required
number
gasPrice
number
data
string
value
number
chainId
number
type
number
maxPriorityFeePerGas
number
maxFeePerGas
number
customData
object
ccipReadEnabled
boolean
Responses
201
400
404
500
post/v1/wallet/{id}/send-transaction
Request samples
application/json
{
  • "to": "string",
  • "from": "string",
  • "nonce": 0,
  • "gasLimit": 0,
  • "gasPrice": 0,
  • "data": "string",
  • "value": 0,
  • "chainId": 0,
  • "type": 0,
  • "maxPriorityFeePerGas": 0,
  • "maxFeePerGas": 0,
  • "customData": { },
  • "ccipReadEnabled": true
}
Response samples
application/json
{
  • "response": { }
}

Generate permit proof to allow permitted address to do transfer on user behalf

Preauthorize the transfer of an NFT created

Securitybearer
Request
path Parameters
fromAddress
required
string
contractAddress
required
string
query Parameters
payer
required
string
Responses
200
400
404
500
get/v1/wallet/{fromAddress}/permit/{contractAddress}
Request samples
Response samples
application/json
{
  • "allowed": true,
  • "expiry": { },
  • "holder": "string",
  • "nonce": 0,
  • "r": "string",
  • "s": "string",
  • "spender": "string",
  • "v": 0
}

Transfer tokens using the generated permit proof

Transfer using token using permit

Securitybearer
Request
path Parameters
contractAddress
required
string
Request Body schema: application/json
required
object (PermitSig)
tokenId
required
string
gasPrice
number
data
string
value
number
chainId
number
type
number
maxPriorityFeePerGas
number
maxFeePerGas
number
toAddress
string
Responses
201
400
404
500
post/v1/wallet/transfer-with-permit/{contractAddress}
Request samples
application/json
{
  • "proof": {
    },
  • "tokenId": "string",
  • "gasPrice": 0,
  • "data": "string",
  • "value": 0,
  • "chainId": 0,
  • "type": 0,
  • "maxPriorityFeePerGas": 0,
  • "maxFeePerGas": 0,
  • "toAddress": "string"
}
Response samples
application/json
{
  • "permit": { },
  • "transfer": { }
}

NFTs

Creates NFT(s) on ImmutableX

Create an NFT from a uri and assign it to a Wallet

Securitybearer
Request
Request Body schema: application/json
contractID
required
string

The contract to use when minting. If no ID is provided, the most recently deployed contract is used. This contract must have already been registered with ImmutableX.

object
Default: false

Options to configure the process of minting the NFT

tokenID
required
number

The tokenId to start the minting from. TokenId starts from 1 and is incremented on each mint. It is necessary to keep track of this value so that you do not try to mint the same tokens twice and waste gas fees.

walletID
required
string

The Wallet you want to assign the NFT to

amount
required
number

The amount of NFTs to mint via the IMX network

Responses
201
400
402
404
500
post/v1/nfts/immutablex/mint
Request samples
application/json
{
  • "contractID": "string",
  • "options": false,
  • "tokenID": 0,
  • "walletID": "string",
  • "amount": 0
}
Response samples
application/json
{
  • "appBalance": "string",
  • "contractAddress": "string",
  • "nfts": [
    ],
  • "walletId": "string"
}

Create an ERC721 NFT from a uri

Create an ERC721 NFT from a uri and assign it to a Wallet

Securitybearer
Request
Request Body schema: application/json
contractId
string

The contract to use when minting. If no ID is provided, the most recently deployed contract is used

object
Default: false

Options to configure the process of minting the NFT

uri
required
string

The location of the resource that will be converted to an NFT

walletId
required
string

The Wallet you want to assign the NFT to

Responses
201
400
402
404
500
post/v1/nfts/mint/erc-721/from-uri
Request samples
application/json
{
  • "contractId": "string",
  • "options": false,
  • "uri": "string",
  • "walletId": "string"
}
Response samples
application/json
{
  • "id": "string",
  • "appBalance": "string",
  • "contractAddress": "string",
  • "txHash": "string",
  • "uri": "string",
  • "walletId": "string"
}

Create an ERC721 NFT from structured metadata

Create an ERC721 NFT from structured metadata and assign it to a Wallet based on the OpenSea metadata standard (https://docs.opensea.io/docs/metadata-standards)

Securitybearer
Request
Request Body schema: application/json
object
Default: false

Options to configure the process of minting the NFT

contractAddress
string

The contract to use when minting. If no ID is provided, the most recently deployed contract is used

metadata
required
object

Metadata in Opensea metadata format

walletId
required
string

The Wallet you want to assign the NFT to

Responses
201
400
402
404
422
500
post/v1/nfts/mint/erc-721/from-structured-metadata
Request samples
application/json
{
  • "options": false,
  • "contractAddress": "string",
  • "metadata": { },
  • "walletId": "string"
}
Response samples
application/json
{
  • "id": "string",
  • "appBalance": "string",
  • "contractAddress": "string",
  • "txHash": "string",
  • "uri": "string",
  • "walletId": "string"
}

Create an ERC1155 NFT from token

Create an ERC721 NFT from structured metadata and assign it to a Wallet based on the OpenSea metadata standard (https://docs.opensea.io/docs/metadata-standards)

Securitybearer
Request
Request Body schema: application/json
object
Default: false

Options to configure the process of minting the NFT

contractAddress
string

The contract to use when minting. If no ID is provided, the most recently deployed contract is used

tokenId
number

The tokenId to assign to NFT that will be minted. It is necessary to keep track of this value so that you do not try to mint the same tokens twice and waste gas fees. If you are working with thirdweb, this should be available in your dashboard.

walletId
required
string

The Wallet you want to assign the NFT to

Responses
201
400
402
404
422
500
post/v1/nfts/mint/erc-1155/from-token
Request samples
application/json
{
  • "options": false,
  • "contractAddress": "string",
  • "tokenId": 0,
  • "walletId": "string"
}
Response samples
application/json
{
  • "id": "string",
  • "appBalance": "string",
  • "contractAddress": "string",
  • "txHash": "string",
  • "uri": "string",
  • "walletId": "string"
}

Create an NFT from structured metadataDeprecated

Create an NFT from structured metadata and assign it to a Wallet based on the OpenSea metadata standard (https://docs.opensea.io/docs/metadata-standards)

Securitybearer
Request
Request Body schema: application/json
object
Default: false

Options to configure the process of minting the NFT

tokenId
number

For ImmutableX apps and ERC-1155 contracts. Not applicable to ERC-721. For IMX apps - The tokenId to assign to NFT that will be minted. TokenId starts from 1 and is incremented on each mint. It is necessary to keep track of this value so that you do not try to mint the same tokens twice and waste gas fees. For ERC-1155 - the Token ID for the NFT being minted. If you are working with thirdweb, this should be available in your dashboard.

contractId
string

The contract to use when minting. If no ID is provided, the most recently deployed contract is used

metadata
object

Metadata in Opensea metadata format

walletId
required
string

The Wallet you want to assign the NFT to

Responses
201
400
402
404
422
500
post/v1/nfts/structured-metadata
Request samples
application/json
{
  • "options": false,
  • "tokenId": 0,
  • "contractId": "string",
  • "metadata": { },
  • "walletId": "string"
}
Response samples
application/json
{
  • "id": "string",
  • "appBalance": "string",
  • "contractAddress": "string",
  • "txHash": "string",
  • "uri": "string",
  • "walletId": "string"
}

Create an NFT from a uriDeprecated

Create an NFT from a uri and assign it to a Wallet

Securitybearer
Request
Request Body schema: application/json
tokenId
number

Used mainly for ImmutableX apps. The tokenId to start the minting from. TokenId starts from 1 and is incremented on each mint. It is necessary to keep track of this value so that you do not try to mint the same tokens twice and waste gas fees.

contractId
string

The contract to use when minting. If no ID is provided, the most recently deployed contract is used

object
Default: false

Options to configure the process of minting the NFT

uri
required
string

The location of the resource that will be converted to an NFT

walletId
required
string

The Wallet you want to assign the NFT to

Responses
201
400
402
404
500
post/v1/nfts/uri
Request samples
application/json
{
  • "tokenId": 0,
  • "contractId": "string",
  • "options": false,
  • "uri": "string",
  • "walletId": "string"
}
Response samples
application/json
{
  • "id": "string",
  • "appBalance": "string",
  • "contractAddress": "string",
  • "txHash": "string",
  • "uri": "string",
  • "walletId": "string"
}

Update an NFT from structured metadata

Update an NFTs from a uri and assign it to an existing NFT

Securitybearer
Request
Request Body schema: application/json
uri
required
string

The location of the resource that will be converted to an NFT

nftId
required
string

The NFT you want to update

contractId
required
string

The contract the NFT belongs to

Responses
200
400
402
404
422
500
patch/v1/nfts/uri
Request samples
application/json
{
  • "uri": "string",
  • "nftId": "string",
  • "contractId": "string"
}
Response samples
application/json
{
  • "id": "string",
  • "uri": "string"
}

Search NFTs by wallet, address, and/or contract

Search NFTs by wallet, address, and/or contract

Securitybearer
Request
query Parameters
walletId
string

Wallet reference id

walletAddress
string

Wallet address

contractId
string

Contract id

Responses
200
400
402
404
422
500
get/v1/nfts
Request samples
Response samples
application/json
[
  • {
    }
]

Get details about an NFT

Get details about an NFT created with Wally

Securitybearer
Request
path Parameters
id
required
string
Responses
200
404
500
get/v1/nft/{id}
Request samples
Response samples
application/json
{
  • "id": "string",
  • "contractAddress": "string",
  • "txHash": "string",
  • "uri": "string",
  • "walletId": "string",
  • "metadata": { }
}

Transfer NFT (Internal)

Transfer an NFT created with Wally to another Wallet within Wally

Securitybearer
Request
path Parameters
id
required
string
Request Body schema: application/json
id
required
string

The id of the NFT you want to transfer

toWalletId
required
string

The Wallet you want to transfer the NFT to

Responses
201
404
500
post/v1/nft/{id}/transfer/internal
Request samples
application/json
{
  • "id": "string",
  • "toWalletId": "string"
}
Response samples
application/json
{
  • "id": "string",
  • "contractAddress": "string",
  • "txHash": "string",
  • "uri": "string",
  • "walletId": "string",
  • "metadata": { }
}

Transfer NFT (External)

Transfer an NFT created with Wally to an external wallet address

Securitybearer
Request
path Parameters
walletID
required
string
Request Body schema: application/json
nftId
required
string

The id of the NFT you want to transfer

toAddress
required
string

The external address you want to transfer the NFT to

Responses
201
404
500
post/v1/nft/{id}/transfer/external
Request samples
application/json
{
  • "nftId": "string",
  • "toAddress": "string"
}
Response samples
application/json
{
  • "id": "string",
  • "contractAddress": "string",
  • "txHash": "string",
  • "uri": "string",
  • "walletId": "string",
  • "metadata": { }
}

Files

Upload a file

Upload a File to IPFS

Securitybearer
Request
Request Body schema: multipart/form-data
file
required
string <binary>

A File that is meant to be uploaded

name
required
string

Name of the file

Responses
201
500
post/v1/file
Request samples
Response samples
application/json
{
  • "id": "string",
  • "hash": "string",
  • "name": "string",
  • "uri": "string"
}

Delete a file

Delete a File

Securitybearer
Request
path Parameters
id
required
string
Responses
200
404
500
delete/v1/file/{id}
Request samples
Response samples
application/json
{
  • "code": "NOT_FOUND",
  • "status": 404,
  • "message": "Resource not found"
}

Get details about a file

Get file details

Securitybearer
Request
path Parameters
id
required
string
Responses
200
404
500
get/v1/file/{id}
Request samples
Response samples
application/json
{
  • "id": "string",
  • "hash": "string",
  • "name": "string",
  • "uri": "string"
}

Tokens

Transfer tokens to another Wallet

Transfer tokens between internal Wallets

Securitybearer
Request
Request Body schema: application/json
amount
required
number

The amount of the token you want to transfer

walletId
required
string

The Wallet you want to transfer the NFT to

Responses
201
400
402
404
500
post/v1/tokens/transfer/internal
Request samples
application/json
{
  • "amount": 0,
  • "walletId": "string"
}
Response samples
application/json
{
  • "walletId": "string"
}

Transfer tokens to an external address

Transfer tokens to external wallet addresses

Securitybearer
Request
Request Body schema: application/json
amount
required
number

The amount of the token you want to transfer

toAddress
required
string

The external address you want to transfer the NFT to

Responses
201
400
402
404
500
post/v1/tokens/transfer/external
Request samples
application/json
{
  • "amount": 0,
  • "toAddress": "string"
}
Response samples
application/json
{
  • "address": "string"
}