SUI JSON-RPC read API for object and coin data
Authentication, rate limits, and error handling
See our JSON-RPC API overview doc.
Reading Object Data
sui_getObject
Description
Return the object data for a specified object.
Params
id
: the ID of the queried objectoptions
:SuiObjectDataOptions
- Optional. Sui options for specifying the object content to be returned. All options default to false if not provided.
Example Request Template
The TypeScript example uses the Shinami Clients SDK.
Replace all instances of {{name}}
with the actual value for that name
curl https://api.shinami.com/node/v1 \
-X POST \
-H 'X-API-Key: {{nodeAccessKey}}' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"method":"sui_getObject",
"params":[
"{{objectId}}",
{
"showType": true,
"showOwner": true,
"showPreviousTransaction": true,
"showDisplay": true,
"showContent": false,
"showBcs": false,
"showStorageRebate": true
}
],
"id":1
}'
import { createSuiClient } from "@shinami/clients/sui";
const nodeClient = createSuiClient({{nodeAccessKey}});
await nodeClient.getObject({
id: "{{objectId}}",
options: {
showBcs: false,
showContent: false,
showDisplay: true,
showOwner: true,
showPreviousTransaction: true,
showStorageRebate: true,
showType: true
}
});
Example Response
{
"jsonrpc": "2.0",
"result": {
"data": {
"objectId": "0xee496a0cc04d06a345982ba6697c90c619020de9e274408c7819f787ff66e1a1",
"version": "1",
"digest": "A8XvoZVx3d3b4w47cAjSoAUKHd1DLRPh4JBwRKCmFeDw",
"type": "package",
"owner": "Immutable",
"previousTransaction": "9eAtptEvo2Nugre64dnjD8m87YZWppwTctUfktPXQCUi",
"storageRebate": "75924000",
"display": {
"data": null,
"error": null
}
}
},
"id": 1
}
{
"jsonrpc": "2.0",
"result": {
"error": {
"code": "notExists",
"object_id": "0xee496a0cc04d06a345982ba6697c90c619020de9e274408c7819f787ff66e1a2"
}
},
"id": 1
}
{
data: {
objectId: '0xee496a0cc04d06a345982ba6697c90c619020de9e274408c7819f787ff66e1a1',
version: '1',
digest: 'A8XvoZVx3d3b4w47cAjSoAUKHd1DLRPh4JBwRKCmFeDw',
type: 'package',
owner: 'Immutable',
previousTransaction: '9eAtptEvo2Nugre64dnjD8m87YZWppwTctUfktPXQCUi',
storageRebate: '75924000',
display: { data: null, error: null }
}
}
{
error: {
code: 'notExists',
object_id: '0xee496a0cc04d06a345982ba6697c90c619020de9e274408c7819f787ff66e1a2'
}
}
Response Data
SuiObjectResponse
, which can be either of:- data:
SuiObjectData
- error :
ObjectResponseError
- data:
sui_multiGetObjects
Description
Return the object data for a list of objects.
Params
ids
: A list of object ids to be queriedoptions
:SuiObjectDataOptions
- Optional. Sui options for specifying the object content to be returned for each id. All options default to false if not provided.
Example Request Template
The TypeScript example uses the Shinami Clients SDK.
Replace all instances of {{name}}
with the actual value for that name
curl https://api.shinami.com/node/v1 \
-X POST \
-H 'X-API-Key: {{nodeAccessKey}}' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"method":"sui_multiGetObjects",
"params":[
[
"{{objectId}}",
"{{objectId2}}"
],
{
"showType": true,
"showOwner": true,
"showPreviousTransaction": true,
"showDisplay": true,
"showContent": false,
"showBcs": false,
"showStorageRebate": true
}
],
"id":1
}'
import { createSuiClient } from "@shinami/clients/sui";
const nodeClient = createSuiClient({{nodeAccessKey}});
await nodeClient.multiGetObjects({
ids: [
"{{objectId}}",
"{{objectId2}}"
],
options: {
showBcs: false,
showContent: false,
showDisplay: true,
showOwner: true,
showPreviousTransaction: true,
showStorageRebate: true,
showType: true
}
});
Example Response
{
"jsonrpc": "2.0",
"result": [
{
"data": {
"objectId": "0xee496a0cc04d06a345982ba6697c90c619020de9e274408c7819f787ff66e1a1",
"version": "1",
"digest": "A8XvoZVx3d3b4w47cAjSoAUKHd1DLRPh4JBwRKCmFeDw",
"type": "package",
"owner": "Immutable",
"previousTransaction": "9eAtptEvo2Nugre64dnjD8m87YZWppwTctUfktPXQCUi",
"storageRebate": "75924000",
"display": {
"data": null,
"error": null
}
}
},
{
"error": {
"code": "notExists",
"object_id": "0xee496a0cc04d06a345982ba6697c90c619020de9e274408c7819f787ff66e1a2"
}
}
],
"id": 1
}
[
{
data: {
objectId: '0xee496a0cc04d06a345982ba6697c90c619020de9e274408c7819f787ff66e1a1',
version: '1',
digest: 'A8XvoZVx3d3b4w47cAjSoAUKHd1DLRPh4JBwRKCmFeDw',
type: 'package',
owner: 'Immutable',
previousTransaction: '9eAtptEvo2Nugre64dnjD8m87YZWppwTctUfktPXQCUi',
storageRebate: '75924000',
display: [Object]
}
},
{
error: {
code: 'notExists',
object_id: '0xee496a0cc04d06a345982ba6697c90c619020de9e274408c7819f787ff66e1a2'
}
}
]
Response Data
A list of type SuiObjectResponse
, whose elements can be either of:
- data:
SuiObjectData
- error :
ObjectResponseError
sui_tryGetPastObject
Description
Return the object information for a specified version. Note there is no software-level guarantee/SLA that objects with past versions can be retrieved by this API, even if the object and version exists/existed. We store full object history on Mainnet but no object history on Testnet, as explained here.
Request Parameters
Name | Type | Description |
---|---|---|
object_id | string | The ID of the object you want historical information about. |
version | number | The version of the object you wish to retrieve. |
options | (Optional) SuiObjectDataOptions for specifying the object content to be returned |
Example Request Template
The TypeScript example uses the Shinami Clients SDK.
curl https://api.shinami.com/node/v1 \
-X POST \
-H 'X-API-Key: NODE_SERVICE_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"method":"sui_tryGetPastObject",
"params":[
"0x0638aeb661190695126f978fa8b8ef54096d3dc73334e92ccc8b5ca9d69088be",
1,
{
"showType": false,
"showOwner": true,
"showPreviousTransaction": true,
"showDisplay": false,
"showContent": false,
"showBcs": false,
"showStorageRebate": false
}
],
"id":1
}'
import { createSuiClient } from "@shinami/clients/sui";
const nodeClient = createSuiClient(NODE_SERVICE_API_KEY);
const resp = await nodeClient.tryGetPastObject({
id: "0x0638aeb661190695126f978fa8b8ef54096d3dc73334e92ccc8b5ca9d69088bd",
version: 25907362,
options: {
showContent: true,
showPreviousTransaction: true
}
});
Example Response
// Version found example
{
"id" : 1,
"jsonrpc" : "2.0",
"result" : {
"details" : {
"digest" : "6RWWWsPnPuozKWKyKPAYTATX846theRymgRo5tbFb27E",
"objectId" : "0x0638aeb661190695126f978fa8b8ef54096d3dc73334e92ccc8b5ca9d69088bd",
"owner" : {
"AddressOwner" : "0xeb583665fb5a35f488234bd8715be86bab0f8ba5311d95ee5a8f67b6088ca2b0"
},
"previousTransaction" : "7Aje5hgRyGvJJxsqUKxBtFf34z3Mveq9LsjvwcUF58Mh",
"version" : "25907363"
},
"status" : "VersionFound"
}
}
// Version not found example: the version is invalid or the FullNode is not storing it
{
"id" : 1,
"jsonrpc" : "2.0",
"result" : {
"details" : [
"0x0638aeb661190695126f978fa8b8ef54096d3dc73334e92ccc8b5ca9d69088bd",
1
],
"status" : "VersionNotFound"
}
}
// Object not found example: check that you are requesting for the correct network and object id
{
"id" : 1,
"jsonrpc" : "2.0",
"result" : {
"details" : "0x0638aeb661190695126f978fa8b8ef54096d3dc73334e92ccc8b5ca9d69088be",
"status" : "ObjectNotExists"
}
}
// Verison found example:
{
status: 'VersionFound',
details: {
objectId: '0x0638aeb661190695126f978fa8b8ef54096d3dc73334e92ccc8b5ca9d69088bd',
version: '25907363',
digest: '6RWWWsPnPuozKWKyKPAYTATX846theRymgRo5tbFb27E',
previousTransaction: '7Aje5hgRyGvJJxsqUKxBtFf34z3Mveq9LsjvwcUF58Mh',
content: {
dataType: 'moveObject',
type: '0x607df06bc57d6e12111a44ea6f62b738c11ef207c5ecc201f103bbf7d79ed3e3::hero::Hero',
hasPublicTransfer: true,
fields: [Object]
}
}
}
// Version not found example: the version is invalid or the FullNode is not storing it
{
status: 'VersionNotFound',
details: [
'0x0638aeb661190695126f978fa8b8ef54096d3dc73334e92ccc8b5ca9d69088bd',
25907362
]
}
// Object not found example: check that you are requesting for the correct network and object id
{
status: 'ObjectNotExists',
details: '0x0638aeb661190695126f978fa8b8ef54096d3dc73334e92ccc8b5ca9d69088bd'
}
Response Data
Type | Description |
---|---|
ObjectRead | Contents vary based on the status. Statuses include "VersionFound", "ObjectNotExists", "ObjectDeleted", "VersionNotFound", and "VersionTooHigh". Some examples are shown in the example responses. Click the link on the type to learn more about the possible data shapes. |
sui_tryMultiGetPastObjects
Description
Return object information for a vector of objects and versions. Note there is no software-level guarantee/SLA that objects with past versions can be retrieved by this API, even if the object and version exists/existed. We store full object history on Mainnet but no object history on Testnet, as explained here.
Params
past_objects
:<[GetPastObjectRequest]>
- a vector of objects and versions to be queriedoptions
:<ObjectDataOptions>
- Optional. Sui options for specifying the object content to be returned
curl https://api.shinami.com/node/v1/<<apiKey>> \
-X POST \
-H 'Content-Type: application/json' \
-d '{ "jsonrpc":"2.0",
"method":"sui_tryMultiGetPastObjects",
"params":["{{past_objects}}",
"showType": true,
"showOwner": true,
"showPreviousTransaction": true,
"showDisplay": false,
"showContent": true,
"showBcs": false,
"showStorageRebate": true],
"id":1}'
Result
Vec<SuiPastObjectResponse>
: <[ObjectRead]>
suix_getDynamicFieldObject
Description
Return the dynamic field object information for a specified object.
Params
parent_object_id
:String
- the ID of the queried parent objectname
: typeDynamicFieldName
with elements:type
:String
- the type of the objectvalue
: additional identifying information (see example below)
Example Request Template
The TypeScript example uses the Shinami Clients SDK.
Replace all instances of {{name}}
with the actual value for that name
curl https://api.shinami.com/node/v1 \
-X POST \
-H 'X-API-Key: {{nodeAccessKey}}' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"method":"suix_getDynamicFieldObject",
"params":[
"{{parentObjectId}}",
"type" : "objectType",
"value" : {{theValue}}
],
"id":1
}'
##
## Real-world mainnet example:
##
curl https://api.shinami.com/node/v1 \
-X POST \
-H 'X-API-Key: {{nodeAccessKey}}' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"method":"suix_getDynamicFieldObject",
"params":[
"0x0c687e442db438be185fad2e86a27abfa1f509c4932d6e8a339ae3e7c8609afd",
{
"type" : "0x2::kiosk::Listing",
"value" : {
"id" : "0xe40675ff1cc967c53f6253cb9534bd8b3d9ac43539709ac1a249c5563f323889",
"is_exclusive" : true
}
}
],
"id":1
}'
import { createSuiClient } from "@shinami/clients/sui";
const nodeClient = createSuiClient({{nodeAccessKey}});
await nodeClient.getDynamicFieldObject({
parentId: "{{parentObjectId}}",
name: {
"type" : "{{objectType}}",
"value" : {{value}}
}
});
//
// Real-world mainnet example:
//
await nodeClient.getDynamicFieldObject({
parentId: "0x0c687e442db438be185fad2e86a27abfa1f509c4932d6e8a339ae3e7c8609afd",
name: {
"type" : "0x2::kiosk::Listing",
"value" : {
"id" : "0xe40675ff1cc967c53f6253cb9534bd8b3d9ac43539709ac1a249c5563f323889",
"is_exclusive" : true
}
}
});
Example Response
{
"id" : 1,
"jsonrpc" : "2.0",
"result" : {
"data" : {
"content" : {
"dataType" : "moveObject",
"fields" : {
"id" : {
"id" : "0x006d57813508869778f3e64c58408cbfbd8191b07d5a26be59b46e8e88a648be"
},
"name" : {
"fields" : {
"id" : "0xe40675ff1cc967c53f6253cb9534bd8b3d9ac43539709ac1a249c5563f323889",
"is_exclusive" : true
},
"type" : "0x2::kiosk::Listing"
},
"value" : "650000000"
},
"hasPublicTransfer" : false,
"type" : "0x2::dynamic_field::Field<0x2::kiosk::Listing, u64>"
},
"digest" : "DJUR6seb8ovP3WiqTywD9NSWVk17ir1MHW4HNSJhG96X",
"objectId" : "0x006d57813508869778f3e64c58408cbfbd8191b07d5a26be59b46e8e88a648be",
"owner" : {
"ObjectOwner" : "0x0c687e442db438be185fad2e86a27abfa1f509c4932d6e8a339ae3e7c8609afd"
},
"previousTransaction" : "4fPHcSzMb5W1xK3zN79hKDrzYxR35ksQF1HZb1QGpDc9",
"storageRebate" : "2014000",
"type" : "0x2::dynamic_field::Field<0x2::kiosk::Listing, u64>",
"version" : "46057077"
}
}
}
{
data: {
objectId: '0x006d57813508869778f3e64c58408cbfbd8191b07d5a26be59b46e8e88a648be',
version: '46057077',
digest: 'DJUR6seb8ovP3WiqTywD9NSWVk17ir1MHW4HNSJhG96X',
type: '0x2::dynamic_field::Field<0x2::kiosk::Listing, u64>',
owner: {
ObjectOwner: '0x0c687e442db438be185fad2e86a27abfa1f509c4932d6e8a339ae3e7c8609afd'
},
previousTransaction: '4fPHcSzMb5W1xK3zN79hKDrzYxR35ksQF1HZb1QGpDc9',
storageRebate: '2014000',
content: {
dataType: 'moveObject',
type: '0x2::dynamic_field::Field<0x2::kiosk::Listing, u64>',
hasPublicTransfer: false,
fields: [Object]
}
}
Result
SuiObjectResponse
: typeSuiObjectResponse
with optional elementsdata
?: typeSuiObjectData
|null
error
?: typeObjectResponseError
|null
suix_getDynamicFields
Description
Return the list of dynamic field objects owned by an object.
Params
parent_object_id
:String
- the ID of the queried parent objectcursor
:String
- optional paging cursorlimit
:<uint>
- maximum number of items per page; defaults to maximum possible if not specified, which is 50.
Example Request Template
The TypeScript example uses the Shinami Clients SDK.
Replace all instances of {{name}}
with the actual value for that name
curl https://api.shinami.com/node/v1 \
-X POST \
-H 'X-API-Key: {{nodeServiceAccessKey}}' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"method":"suix_getDynamicFields",
"params":[
"{{parentObjectId}}",
"{{cursor}}",
{{limit}}
],
"id":1
}'
import { createSuiClient } from "@shinami/clients/sui";
const nodeClient = createSuiClient({{nodeAccessKey}});
await nodeClient.getDynamicFields({
parentId: "{{parentObjectId}}",
cursor: "{{cursor}}"
limit: {{limit}}
});
Example Response
{
"id" : 1,
"jsonrpc" : "2.0",
"result" : {
"data" : [
{
"bcsName" : "49k8ctZtQ8wZoXT8BRc8JBEYZNRDbGJqRCQ9xpycG2rr",
"digest" : "ZypNDZSBfSB9wNqgqGtjxfBDXM3ARr7x7GxxWhWMGpu",
"name" : {
"type" : "0x2::kiosk::Lock",
"value" : {
"id" : "0x2ed079dd5b52f5d96238972907db0108de0f9af62e2786935bc2b5706a06f637"
}
},
"objectId" : "0x0055d940a0c04e0d9a620915c00d62f7059d4cf191e9e9b59177e0288c926485",
"objectType" : "bool",
"type" : "DynamicField",
"version" : 29685770
},
{
"bcsName" : "2AjnSJjsS2VtXpqshETPsk3dUMmfHzyzUZ3c7QmJPmFADN",
"digest" : "DJUR6seb8ovP3WiqTywD9NSWVk17ir1MHW4HNSJhG96X",
"name" : {
"type" : "0x2::kiosk::Listing",
"value" : {
"id" : "0xe40675ff1cc967c53f6253cb9534bd8b3d9ac43539709ac1a249c5563f323889",
"is_exclusive" : true
}
},
"objectId" : "0x006d57813508869778f3e64c58408cbfbd8191b07d5a26be59b46e8e88a648be",
"objectType" : "u64",
"type" : "DynamicField",
"version" : 46057077
}
],
"hasNextPage" : true,
"nextCursor" : "0x006d57813508869778f3e64c58408cbfbd8191b07d5a26be59b46e8e88a648be"
}
}
{
data: [
{
name: [Object],
bcsName: '49k8ctZtQ8wZoXT8BRc8JBEYZNRDbGJqRCQ9xpycG2rr',
type: 'DynamicField',
objectType: 'bool',
objectId: '0x0055d940a0c04e0d9a620915c00d62f7059d4cf191e9e9b59177e0288c926485',
version: 29685770,
digest: 'ZypNDZSBfSB9wNqgqGtjxfBDXM3ARr7x7GxxWhWMGpu'
},
{
name: [Object],
bcsName: '2AjnSJjsS2VtXpqshETPsk3dUMmfHzyzUZ3c7QmJPmFADN',
type: 'DynamicField',
objectType: 'u64',
objectId: '0x006d57813508869778f3e64c58408cbfbd8191b07d5a26be59b46e8e88a648be',
version: 46057077,
digest: 'DJUR6seb8ovP3WiqTywD9NSWVk17ir1MHW4HNSJhG96X'
}
],
nextCursor: '0x006d57813508869778f3e64c58408cbfbd8191b07d5a26be59b46e8e88a648be',
hasNextPage: true
}
Result
DynamicFieldPage
: type DynamicFieldPage with elements:
data
: Array of type DynamicFieldInfonextCursor
:String
|null
hasNextPage
:Boolean
suix_getOwnedObjects
Description
Return the list of objects owned by an address.
Params
owner
: the owner's Sui addressSuiObjectResponseQuery
filter
:SuiObjectDataFilter
- Optional. Object query criteria.options
:SuiObjectDataOptions
- Optional. Sui options for specifying the object content to be returned. All options default to false if not provided.
cursor
:<CheckpointedObjectID>
- optional paging cursor. If provided, the query will start from the next item after the specified cursor. Default to start from the first item if not specified.limit
:<uint>
- optional limit of items per page; default to maximum limit of 50 if not specified.
Example Request Template
The TypeScript example uses the Shinami Clients SDK.
Replace all instances of {{name}}
with the actual value for that name
curl https://api.shinami.com/node/v1 \
-X POST \
-H 'X-API-Key: {{nodeAccessKey}}' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"method":"suix_getOwnedObjects",
"params":[
"{{ownersSuiAddress}}",
{
{{SuiObjectDataFilter}}, # e.g. "Package": "0xc8ada8b9d295379f5c8128fa796b76ddfd8ab78be669463520a6df57d20e5719"
"options": {
"showType": true,
"showOwner": true,
"showPreviousTransaction": true,
"showDisplay": true,
"showContent": true,
"showBcs": true,
"showStorageRebate": true
}
}
],
"id":1
}'
import { createSuiClient } from "@shinami/clients/sui";
const nodeClient = createSuiClient({{nodeAccessKey}});
await nodeClient.getOwnedObjects({
owner: "{{ownersSuiAddress}}",
filter: {
{{SuiObjectDataFilter}} // e.g. Package: "0xc8ada8b9d295379f5c8128fa796b76ddfd8ab78be669463520a6df57d20e5719"
},
options:{
showBcs: true,
showContent: true,
showDisplay: true,
showOwner: true,
showPreviousTransaction: true,
showStorageRebate: true,
showType: true
},
cursor: null,
limit: null
});
Example Response
{
"jsonrpc": "2.0",
"result": {
"data": [{
"data": {
"objectId": "0x5b79956343aa6d3c09e362dd20f97b65027e0c64e75e88a88aa596e45d3a2371",
"version": "36175593",
"digest": "Gn4n9ZvoUuTmMhUSyb6JfuLjvEvX6xnpmnCydtaLG35n",
"type": "0x8bdc95e99e393fea9b0e010353ef27109ca6b93d96c57090d7ab61fc9ca4d78d::loyalty::Box",
"owner": {
"AddressOwner": "0x4da016bcfd074d7419afa7b9168dd3bc4b6dcfdbe76465bbb34aac299857562a"
},
"previousTransaction": "Hpx6kbrtGD4RXa4to7zwJrrbnXs3ovmHZCEfPEnjr7uH",
"storageRebate": "1816400",
"display": {
"data": {
"creator": "Worlds Beyond Creator",
"description": "The Infinity Passport is a loyalty program that rewards players for playing games in our ecosystem. Players earn Infinity Credits on their Infinity Passports for playing Worlds Beyond games, winning competitions, completing challenges and more. These Infinity Credits can be redeemed for a variety of rewards, including WBITS mining keys, in-game items, exclusive content, and real-world prizes. Be sure to follow news in our Discord and Twitter for the most updated information.",
"image_url": "https://cdn.worldsbeyondnft.com/nft/loyalty-boxes/0.png",
"infinity_credits": "27630",
"link": "https://worldsbeyondnft.com/loyalty-boxes/0x5b79956343aa6d3c09e362dd20f97b65027e0c64e75e88a88aa596e45d3a2371",
"name": "Infinity Passport #81430",
"project_url": "https://worldsbeyondnft.com"
},
"error": null
},
"content": {
"dataType": "moveObject",
"type": "0x8bdc95e99e393fea9b0e010353ef27109ca6b93d96c57090d7ab61fc9ca4d78d::loyalty::Box",
"hasPublicTransfer": false,
"fields": {
"attributes": {
"type": "0xbc3df36be17f27ac98e3c839b2589db8475fa07b20657b08e8891e3aaf5ee5f9::attributes::Attributes",
"fields": {
"map": {
"type": "0x2::vec_map::VecMap<0x1::ascii::String, 0x1::ascii::String>",
"fields": {
"contents": [{
"type": "0x2::vec_map::Entry<0x1::ascii::String, 0x1::ascii::String>",
"fields": {
"key": "ID",
"value": "81430"
}
}, {
"type": "0x2::vec_map::Entry<0x1::ascii::String, 0x1::ascii::String>",
"fields": {
"key": "Infinity Credits",
"value": "900"
}
}]
}
}
}
},
"id": {
"id": "0x5b79956343aa6d3c09e362dd20f97b65027e0c64e75e88a88aa596e45d3a2371"
},
"infinity_credits": "27630",
"name": "Infinity Passport #81430",
"type": "0"
}
},
"bcs": {
"dataType": "moveObject",
"type": "0x8bdc95e99e393fea9b0e010353ef27109ca6b93d96c57090d7ab61fc9ca4d78d::loyalty::Box",
"hasPublicTransfer": false,
"version": 36175593,
"bcsBytes": "W3mVY0OqbTwJ42LdIPl7ZQJ+DGTnXoioiqWW5F06I3EAAAAAAAAAABhJbmZpbml0eSBQYXNzcG9ydCAjODE0MzDuawAAAAAAAAICSUQFODE0MzAQSW5maW5pdHkgQ3JlZGl0cwM5MDA="
}
}
}],
"nextCursor": "0x5b79956343aa6d3c09e362dd20f97b65027e0c64e75e88a88aa596e45d3a2371",
"hasNextPage": false ## since this is false, you should not follow the cursor
},
"id": 1
}
{
data: [ { data: [Object] } ],
nextCursor: '0x163672be5eceb498c45a6e92e57e8da19f20c30edbd67dd9d9e8db91796991e1',
hasNextPage: false // Since this is false, you should not follow the cursor as there
// are no more objects owned by the address that match the filter.
}
Response Data
PaginatedObjectsResponse
containing:
data
: list of typeSuiObjectResponse
hasNextPage
:boolean
- iffalse
, there are no more results to fetchnextCursor?
:String
- ifhasNextPage
istrue
use this cursor in the subsequent request to fetch additional objects.
Reading Coin Data
suix_getBalance
Description
Return the total Coin balance owned by an address for one coin type.
Params
owner
:<SuiAddress>
- the owner's Sui addresscoin_type
:<string>
- (optional) fully qualified type names for the coin. Defaults to0x2::sui::SUI
if not specified.
Example Request Template
The TypeScript example uses the Shinami Clients SDK.
Replace all instances of {{name}}
with the actual value for that name
curl https://api.shinami.com/node/v1 \
-X POST \
-H 'X-API-Key: {{nodeAccessKey}}' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"method":"suix_getBalance",
"params":[
"{{ownerAddress}}",
"{{coinType}}"
],
"id":1
}'
import { createSuiClient } from "@shinami/clients/sui";
const nodeClient = createSuiClient({{nodeAccessKey}});
await nodeClient.getBalance({
owner: "{{ownerAddress}}",
coinType: "{{coinType}}"
});
Example Response
{
"jsonrpc":"2.0",
"result":{
"coinType":"0x2::sui::SUI",
"coinObjectCount":11,
"totalBalance":"15822947868",
"lockedBalance":{}
},
"id":1
}
{
coinType: '0x2::sui::SUI',
coinObjectCount: 11,
totalBalance: '15822947868',
lockedBalance: {}
}
Response Data
A CoinBalance
object containing:
- coinType :
<string>
- coinObjectCount :
<uint>
- totalBalance :
<BigInt_for_uint128>
- lockedBalance :
<object>
suix_getAllBalances
Description
Return the balance for all Coin types owned by an address.
Params
owner
:<SuiAddress>
- the owner's Sui address
Example Request Template
The TypeScript example uses the Shinami Clients SDK.
Replace all instances of {{name}}
with the actual value for that name
curl https://api.shinami.com/node/v1 \
-X POST \
-H 'X-API-Key: {{nodeAccessKey}}' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"method":"suix_getAllBalances",
"params":[
"{{ownerAddress}}"
],
"id":1
}'
import { createSuiClient } from "@shinami/clients/sui";
const nodeClient = createSuiClient({{nodeAccessKey}});
await nodeClient.getAllBalances({
owner: "{{ownerAddress}}"
});
Example Response
{
"jsonrpc" : "2.0",
"result" : [
{
"coinObjectCount" : 11,
"coinType" : "0x2::sui::SUI",
"lockedBalance" : {},
"totalBalance" : "15822947868"
}
],
"id" : 1
}
[
{
coinType: '0x2::sui::SUI',
coinObjectCount: 11,
totalBalance: '15822947868',
lockedBalance: {}
}
]
Response Data
An array of type CoinBalance
, where a CoinBalance
is an object containing:
- coinType :
<string>
- coinObjectCount :
<uint>
- totalBalance :
<BigInt_for_uint128>
- lockedBalance :
<object>
suix_getCoins
Description
Return all Coin objects owned by an address of a given Coin type.
Params
owner
:<SuiAddress>
- the owner's Sui addresscoin_type
:<string>
- (optional) fully qualified type names for the coin. Defaults to0x2::sui::SUI
if not specified.cursor
:<ObjectID>
- (optional) paging cursor of the coin Object to start after when returning results for the next requestlimit
:<uint>
- (optional) maximum number of items per page
Example Request Template
The TypeScript example uses the Shinami Clients SDK.
Replace all instances of {{name}}
with the actual value for that name
curl https://api.shinami.com/node/v1 \
-X POST \
-H 'X-API-Key: {{nodeAccessKey}}' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"method":"suix_getCoins",
"params":[
"{{ownerAddress}}",
"{{coinType}}",
"{{cursor}}",
{{limit}}
],
"id":1
}'
import { createSuiClient } from "@shinami/clients/sui";
const nodeClient = createSuiClient({{nodeAccessKey}});
await nodeClient.getCoins({
owner: "{{ownerAddress}}",
cursor: "{{cursor}}",
limit: {{limit}},
coinType: "{{coinType}}"
});
Example Response
{
"jsonrpc" : "2.0",
"result" : {
"data" : [
{
"balance" : "1000000000",
"coinObjectId" : "0x34a947649e7d1837dc864bfa5bbbc873fef7f003ee8b502005f521aca9ba6e07",
"coinType" : "0x2::sui::SUI",
"digest" : "62xUAyKWPf8yMkCUxkNNj5js8FMWnbsv6QC75QhKRYct",
"previousTransaction" : "32sp5CeigGxKqEhMqDUJDaSb48eMPgLj1fD7UXxvjekz",
"version" : "1191782"
},
{
"balance" : "1000000000",
"coinObjectId" : "0x3eb0bace095a1703998be4c8cf243a709ae3ef86bc5a6ebcd165c7d72279eea0",
"coinType" : "0x2::sui::SUI",
"digest" : "BQdrF9DYTU4tjfiqxW21DfFkcMENDSuWmA2cuELzeT8j",
"previousTransaction" : "74xn4rX8hbN1dYEbhHz7jCctatVbdLXcgBXbtZ7WQbxj",
"version" : "1074085"
},
{
"balance" : "1000000000",
"coinObjectId" : "0x75beecf910f5e585cf1a1ccee0a1176130dfd0e0a34ce4bf027032e6a7797727",
"coinType" : "0x2::sui::SUI",
"digest" : "6eB7ssJnR8wR45LqvpMcSqUnYvja4ZhqZh8H2fAeWjKG",
"previousTransaction" : "8FhkCTwj7toJ4E9mYq6gsvG6Gbi547Sxtf1ew9t9czxk",
"version" : "1046394"
}
],
"hasNextPage" : true,
"nextCursor" : "0x75beecf910f5e585cf1a1ccee0a1176130dfd0e0a34ce4bf027032e6a7797727"
},
"id" : 1
}
{
data: [
{
coinType: '0x2::sui::SUI',
coinObjectId: '0x1c709e5b04848d0d8bff33f704cc13e1850e89e436aa39006efb1542aae63662',
version: '23580100',
digest: '6LSuGqMeapf3QEer5GQP6dYbt6qnU7Syf5hDVjURmqLF',
balance: '2822947868',
previousTransaction: 'DWmo9FQKTjTj99jBwGcC56fKn7CzjGguEZffT62V2QS'
},
{
coinType: '0x2::sui::SUI',
coinObjectId: '0x34a947649e7d1837dc864bfa5bbbc873fef7f003ee8b502005f521aca9ba6e07',
version: '1191782',
digest: '62xUAyKWPf8yMkCUxkNNj5js8FMWnbsv6QC75QhKRYct',
balance: '1000000000',
previousTransaction: '32sp5CeigGxKqEhMqDUJDaSb48eMPgLj1fD7UXxvjekz'
},
{
coinType: '0x2::sui::SUI',
coinObjectId: '0xfab8b696ffc877ee0667719465402a408da361b8e424299ef9370c1ad0eaf5e1',
version: '629073',
digest: 'J5bVLnhArLZYd8qp8hGeNX5iR9Y7ZjWxFTbHNmN5d2aA',
balance: '1000000000',
previousTransaction: '5hB7axMVtZ7dNWaZW77nR8zYsY1HMAJRAdG5rz59p9Tp'
}
],
nextCursor: '0xfab8b696ffc877ee0667719465402a408da361b8e424299ef9370c1ad0eaf5e1',
hasNextPage: false
}
Response Data
PaginatedCoins
object with fields:
- data: Array of type
CoinStruct
with fields:- balance:
String
- coinObjectId:
String
- coinType:
String
- digest:
String
- previousTransaction:
String
- version:
String
- balance:
- hasNextPage:
Boolean
- nextCursor?:
String
|null
suix_getAllCoins
Description
Return all Coin objects owned by an address.
Params
owner
:<SuiAddress>
- the owner's Sui addresscursor
:<ObjectID>
- (optional) paging cursorlimit
:<uint>
- (optional) maximum number of items per page
Example Request Template
The TypeScript example uses the Shinami Clients SDK.
Replace all instances of {{name}}
with the actual value for that name
curl https://api.shinami.com/node/v1 \
-X POST \
-H 'X-API-Key: {{nodeAccessKey}}' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"method":"suix_getAllCoins",
"params":[
"{{ownerAddress}}",
"{{cursor}}",
{{limit}}
],
"id":1
}'
import { createSuiClient } from "@shinami/clients/sui";
const nodeClient = createSuiClient({{nodeAccessKey}});
await nodeClient.getAllCoins({
owner: "{{ownerAddress}}",
cursor: "{{cursor}}",
limit: {{limit}}
});
Example Response
{
"jsonrpc" : "2.0",
"result" : {
"data" : [
{
"balance" : "1000000000",
"coinObjectId" : "0x34a947649e7d1837dc864bfa5bbbc873fef7f003ee8b502005f521aca9ba6e07",
"coinType" : "0x2::sui::SUI",
"digest" : "62xUAyKWPf8yMkCUxkNNj5js8FMWnbsv6QC75QhKRYct",
"previousTransaction" : "32sp5CeigGxKqEhMqDUJDaSb48eMPgLj1fD7UXxvjekz",
"version" : "1191782"
},
{
"balance" : "1000000000",
"coinObjectId" : "0x3eb0bace095a1703998be4c8cf243a709ae3ef86bc5a6ebcd165c7d72279eea0",
"coinType" : "0x2::sui::SUI",
"digest" : "BQdrF9DYTU4tjfiqxW21DfFkcMENDSuWmA2cuELzeT8j",
"previousTransaction" : "74xn4rX8hbN1dYEbhHz7jCctatVbdLXcgBXbtZ7WQbxj",
"version" : "1074085"
},
{
"balance" : "1000000000",
"coinObjectId" : "0x75beecf910f5e585cf1a1ccee0a1176130dfd0e0a34ce4bf027032e6a7797727",
"coinType" : "0x2::sui::SUI",
"digest" : "6eB7ssJnR8wR45LqvpMcSqUnYvja4ZhqZh8H2fAeWjKG",
"previousTransaction" : "8FhkCTwj7toJ4E9mYq6gsvG6Gbi547Sxtf1ew9t9czxk",
"version" : "1046394"
}
],
"hasNextPage" : true,
"nextCursor" : "0x75beecf910f5e585cf1a1ccee0a1176130dfd0e0a34ce4bf027032e6a7797727"
},
"id" : 1
}
{
data: [
{
coinType: '0x2::sui::SUI',
coinObjectId: '0x1c709e5b04848d0d8bff33f704cc13e1850e89e436aa39006efb1542aae63662',
version: '23580100',
digest: '6LSuGqMeapf3QEer5GQP6dYbt6qnU7Syf5hDVjURmqLF',
balance: '2822947868',
previousTransaction: 'DWmo9FQKTjTj99jBwGcC56fKn7CzjGguEZffT62V2QS'
},
{
coinType: '0x2::sui::SUI',
coinObjectId: '0x34a947649e7d1837dc864bfa5bbbc873fef7f003ee8b502005f521aca9ba6e07',
version: '1191782',
digest: '62xUAyKWPf8yMkCUxkNNj5js8FMWnbsv6QC75QhKRYct',
balance: '1000000000',
previousTransaction: '32sp5CeigGxKqEhMqDUJDaSb48eMPgLj1fD7UXxvjekz'
},
{
coinType: '0x2::sui::SUI',
coinObjectId: '0xfab8b696ffc877ee0667719465402a408da361b8e424299ef9370c1ad0eaf5e1',
version: '629073',
digest: 'J5bVLnhArLZYd8qp8hGeNX5iR9Y7ZjWxFTbHNmN5d2aA',
balance: '1000000000',
previousTransaction: '5hB7axMVtZ7dNWaZW77nR8zYsY1HMAJRAdG5rz59p9Tp'
}
],
nextCursor: '0xfab8b696ffc877ee0667719465402a408da361b8e424299ef9370c1ad0eaf5e1',
hasNextPage: false
}
Response Data
PaginatedCoins
object with fields:
- data: Array of type
CoinStruct
with fields:- balance:
String
- coinObjectId:
String
- coinType:
String
- digest:
String
- previousTransaction:
String
- version:
String
- balance:
- hasNextPage:
Boolean
- nextCursor?:
String
|null
suix_getCoinMetadata
Description
Return metadata(e.g., symbol, decimals) for a coin.
Request parameters
Name | Type | Description |
---|---|---|
coinType | string | fully qualified type names for the coin (e.g., "0x2::sui::SUI" ). Remember that your API key determines which network you're querying. |
Example Request
curl https://api.shinami.com/node/v1 \
-X POST \
-H 'X-API-Key: NODE_SERVICE_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"method":"suix_getCoinMetadata",
"params":[
"0x2::sui::SUI"
],
"id":1
}' | json_pp
import { createSuiClient } from "@shinami/clients/sui";
const nodeClient = createSuiClient(NODE_SERVICE_API_KEY);
const resp = await nodeClient.getCoinMetadata({
coinType: "0x2::sui::SUI"
});
console.log(resp);
Example response
{
"id" : 1,
"jsonrpc" : "2.0",
"result" : {
"decimals" : 9,
"description" : "",
"iconUrl" : null,
"id" : "0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",
"name" : "Sui",
"symbol" : "SUI"
}
}
{
decimals: 9,
name: 'Sui',
symbol: 'SUI',
description: '',
iconUrl: null,
id: '0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3'
}
Response fields
The response is of type CoinMetadata
with fields:
Name | Type | Description |
---|---|---|
decimals | number | Number of decimal places the coin uses. |
description | string | Description of the token. |
iconUrl | string | null | URL for the token logo if it exists. |
id | string | null | Object id for the CoinMetadata object if it exists. |
name | string | Name for the token. |
symbol | string | Symbol for the token. |
suix_getTotalSupply
Description
Return total supply for a coin.
Request parameters
Name | Type | Description |
---|---|---|
coinType | string | fully qualified type names for the coin (e.g., "0x2::sui::SUI" ). Remember that your API key determines which network you're querying. |
Example Request
curl https://api.shinami.com/node/v1 \
-X POST \
-H 'X-API-Key: NODE_SERVICE_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc":"2.0",
"method":"suix_getTotalSupply",
"params":[
"0x2::sui::SUI"
],
"id":1
}' | json_pp
import { createSuiClient } from "@shinami/clients/sui";
const nodeClient = createSuiClient(NODE_SERVICE_API_KEY);
const resp = await nodeClient.getTotalSupply({
coinType: "0x2::sui::SUI"
});
console.log(resp);
Example Response
{
"id" : 1,
"jsonrpc" : "2.0",
"result" : {
"value" : "10000000000000000000"
}
}
{ value: '10000000000000000000' }
Response Fields
Response is of type CoinSupply
with fields:
Name | Type | Description |
---|---|---|
value | string | The total supply of the coin. |