Enoki API Specification
HTTP API for Enoki
Create zkLogin nonce
Generates a nonce used in the zkLogin OAuth flow. Using this API is not required, you can also construct a nonce client-side if desired.
In: header
The Sui network you wish to use. Defaults to mainnet.
"mainnet""testnet" | "mainnet" | "devnet"The ephemeral public key created during the zkLogin process, encoded as a base64 string.
The amount of epochs that you would like to have the nonce be valid for.
20 <= value <= 30Response Body
curl -X POST "https://api.enoki.mystenlabs.com/v1/zklogin/nonce" \  -H "Content-Type: application/json" \  -d '{    "ephemeralPublicKey": "string"  }'{
  "data": {
    "nonce": "string",
    "randomness": "string",
    "epoch": 0,
    "maxEpoch": 0,
    "estimatedExpiration": 0
  }
}Create zkLogin ZKP
Creates a zero-knowledge proof, which is used to submit transactions to Sui.
In: header
Header Parameters
The JWT of the user signed in with zkLogin.
The Sui network you wish to use. Defaults to mainnet.
"mainnet""testnet" | "mainnet" | "devnet"The ephemeral public key created during the zkLogin process, encoded as a base64 string.
The maxEpoch created during the zkLogin process.
0 <= valueThe randomness created during the zkLogin process.
Response Body
curl -X POST "https://api.enoki.mystenlabs.com/v1/zklogin/zkp" \  -H "zklogin-jwt: string" \  -H "Content-Type: application/json" \  -d '{    "ephemeralPublicKey": "string",    "maxEpoch": 0,    "randomness": "string"  }'{
  "data": {
    "proofPoints": null,
    "issBase64Details": null,
    "headerBase64": null,
    "addressSeed": "string"
  }
}Create sponsored transaction
Creates sponsored transaction
In: header
Header Parameters
The JWT of the user signed in with zkLogin.
The Sui network you wish to use. Defaults to mainnet.
"mainnet""testnet" | "mainnet" | "devnet"Bytes of the transaction with the onlyTransactionKind flag set to true.
The address sending the transaction. Include this parameter if not including the zklogin-jwt header. This option is only supported when calling the API from a backend service using a private key.
List of Sui addresses that can be present in the transaction. These addresses are combined with the list configured in the Enoki Developer Portal. Transactions attempting to refer to or transfer assets outside of these addresses are rejected.
List of permitted Move targets the sponsored user's transactions can call.
Response Body
curl -X POST "https://api.enoki.mystenlabs.com/v1/transaction-blocks/sponsor" \  -H "zklogin-jwt: string" \  -H "Content-Type: application/json" \  -d '{    "transactionBlockKindBytes": "string"  }'{
  "data": {
    "digest": "string",
    "bytes": "string"
  }
}Submits a sponsored transaction for execution
Submits a transaction created from /transaction-blocks/sponsor for execution.
In: header
Path Parameters
The digest of the previously-created sponsored transaction block to execute.
User signature of the transaction.
Response Body
curl -X POST "https://api.enoki.mystenlabs.com/v1/transaction-blocks/sponsor/string" \  -H "Content-Type: application/json" \  -d '{    "signature": "string"  }'{
  "data": {
    "digest": "string"
  }
}Get address for zkLogin user
Returns the address and salt value for the given JWT. If the JWT is not valid, the API will return an error code.
In: header
Header Parameters
The JWT of the user signed in with zkLogin.
Response Body
curl -X GET "https://api.enoki.mystenlabs.com/v1/zklogin" \  -H "zklogin-jwt: string"{
  "data": {
    "salt": "string",
    "address": "string",
    "publicKey": "string"
  }
}Get addresses for zkLogin user
Returns the addresses for a given JWT. If the JWT is not valid, the API will return an error code.
In: header
Header Parameters
The JWT of the user signed in with zkLogin.
Response Body
curl -X GET "https://api.enoki.mystenlabs.com/v1/zklogin/addresses" \  -H "zklogin-jwt: string"{
  "data": {
    "addresses": [
      {
        "clientId": "string",
        "salt": "string",
        "address": "string",
        "publicKey": "string",
        "legacy": true
      }
    ]
  }
}Get app metadata
Returns the public metadata (configured in the Enoki Developer Portal) of the app associated with the API key.
In: header
Response Body
curl -X GET "https://api.enoki.mystenlabs.com/v1/app"{
  "data": {
    "allowedOrigins": [
      "https://example.com"
    ],
    "authenticationProviders": [
      {
        "providerType": "google",
        "clientId": "..."
      }
    ],
    "domains": [
      {
        "nftId": "string",
        "name": "string",
        "network": "testnet"
      }
    ]
  }
}Get a list of subnames for an address
Get a list of subnames for an address
In: header
Query Parameters
The network subnames are registered on.
"mainnet""testnet" | "mainnet"The domain name the subname is on.
The address to resolve subnames for
Response Body
curl -X GET "https://api.enoki.mystenlabs.com/v1/subnames?network=testnet&domain=string&address=string"{
  "data": {
    "subnames": [
      {
        "name": "string",
        "status": "PENDING",
        "createdAt": "2025-08-06T14:30:00.000Z"
      }
    ]
  }
}Create a subname
Initiates the creation of a subname. The subname request is added to a processing queue and will be created asynchronously, typically within a few seconds. Note: A successful response from this API does not guarantee that the subname has been created yet. To check the status of the subname, use the get subname API or resolve the name directly on Sui.
In: header
Header Parameters
The JWT of the user signed in with zkLogin.
The domain name to create the subname under.
The network the domain and subname are registered on.
"mainnet""testnet" | "mainnet"The subname to create.
The address the new subname will resolve to
Response Body
curl -X POST "https://api.enoki.mystenlabs.com/v1/subnames" \  -H "zklogin-jwt: string" \  -H "Content-Type: application/json" \  -d '{    "domain": "string",    "subname": "string"  }'{
  "data": {
    "name": "string",
    "status": "PENDING",
    "createdAt": "2025-08-06T14:30:00.000Z"
  }
}Delete a subname
Initiates the deletion of a subname. The subname request is added to a processing queue and will be deleted asynchronously, typically within a few seconds. Note: A successful response from this API does not guarantee that the subname has been deleted yet. To check the status of the subname, use the get subname API or resolve the name directly on Sui.
In: header
The domain name the subname is on.
The network the domain and subname are registered on.
"mainnet""testnet" | "mainnet"The subname to delete.
The address the new subname will resolve to
Response Body
curl -X DELETE "https://api.enoki.mystenlabs.com/v1/subnames" \  -H "Content-Type: application/json" \  -d '{    "domain": "string",    "subname": "string"  }'{
  "data": {
    "name": "string",
    "status": "PENDING",
    "createdAt": "2025-08-06T14:30:00.000Z"
  }
}