[ ARKIV DOCS ]

Everything you need to build with Arkiv. From quick start guides to comprehensive API documentation.

Last updated: February 2026 · SDK v0.6.0

📚

API Reference

Arkiv JSON-RPC API documentation

JSON API

Arkiv exposes a JSON-RPC API over HTTP. This page documents the Arkiv-specific methods currently available on the public RPC endpoint.

Endpoint

FieldValue
Chain ID60138453025
HTTP RPChttps://kaolin.hoodi.arkiv.network/rpc
WebSocket RPCwss://kaolin.hoodi.arkiv.network/rpc/ws
Explorerexplorer.kaolin.hoodi.arkiv.network
Faucetkaolin.hoodi.arkiv.network/faucet

For every method on this page, send an HTTP POST request with content-type: application/json.

JSON-RPC Request Format

All Arkiv methods use the standard JSON-RPC 2.0 envelope.

jsonExample
1{
2	"jsonrpc": "2.0",
3	"id": 1,
4	"method": "arkiv_query",
5	"params": []
6}

Minimal curl template:

bashExample
1curl https://kaolin.hoodi.arkiv.network/rpc \
2	-H "content-type: application/json" \
3	-d '{
4		"jsonrpc":"2.0",
5		"id":1,
6		"method":"arkiv_getEntityCount",
7		"params":[]
8	}'

Method List

MethodPurpose
arkiv_queryQuery Arkiv entities from the bitmap-backed SQLite store
arkiv_getEntityCountReturn the total number of entities currently stored
arkiv_getNumberOfUsedSlotsReturn the number of used storage-accounting slots
arkiv_getBlockTimingReturn timing information for the current head block

arkiv_query

Runs an Arkiv entity query against the bitmap-backed SQLite store and returns matching entities.

Parameters

PositionTypeRequiredDescription
0stringYesQuery expression
1object or nullNoQuery options

Behavior:

  • If the options object is omitted or null, the server uses an empty options object.
  • If options.atBlock is omitted, the query runs against the current chain head.
  • resultsPerPage is capped at 200.
  • The response may include a cursor when more results are available.

Query Syntax

Supported operators:

  • Logical && and ||
  • Negation !
  • Comparisons =, !=, <, >, <=, >=
  • Glob matching ~ and negated glob matching !~

Supported synthetic attributes:

  • $owner
  • $creator
  • $key
  • $expiration
  • $createdAtBlock
  • $sequence
  • $txIndex
  • $opIndex
  • $all

Options

FieldTypeDescription
atBlockhex quantity stringBlock to query against, for example 0x1bc
includeDataobjectControls which entity fields are returned
resultsPerPagehex quantity stringPage size, capped at 200
cursorstringCursor returned by a previous arkiv_query response

Default includeData values when omitted:

FieldDefault
keytrue
contentTypetrue
payloadtrue
creatortrue
ownertrue
attributestrue
expirationtrue

Example Request

bashExample
1curl https://kaolin.hoodi.arkiv.network/rpc \
2	-H "content-type: application/json" \
3	-d '{
4		"jsonrpc":"2.0",
5		"id":1,
6		"method":"arkiv_query",
7		"params":[
8			"type = \"nft\" && status = \"active\"",
9			{
10				"atBlock":"0x1bc",
11				"resultsPerPage":"0x2",
12				"includeData":{
13					"key":true,
14					"attributes":true,
15					"syntheticAttributes":false,
16					"payload":true,
17					"contentType":true,
18					"expiration":true,
19					"creator":true,
20					"owner":true,
21					"createdAtBlock":true,
22					"lastModifiedAtBlock":true,
23					"transactionIndexInBlock":false,
24					"operationIndexInTransaction":false
25				}
26			}
27		]
28	}'

Example Response

jsonExample
1{
2	"jsonrpc": "2.0",
3	"id": 1,
4	"result": {
5		"data": [
6			{
7				"key": "0x7e3b6d5e9dc0d8d6f7d4c0b9c5a7f2d58d8f4c2df4e2f3b7f4f8b7f8a1c2d3e4",
8				"value": "0x7b226e616d65223a2241726b69762047656d202331222c2274797065223a226e6674222c22737461747573223a22616374697665227d",
9				"contentType": "application/json",
10				"expiresAt": 1200000,
11				"creator": "0x1111111111111111111111111111111111111111",
12				"owner": "0x2222222222222222222222222222222222222222",
13				"createdAtBlock": 401,
14				"lastModifiedAtBlock": 443,
15				"stringAttributes": [
16					{ "key": "status", "value": "active" },
17					{ "key": "type", "value": "nft" }
18				],
19				"numericAttributes": [
20					{ "key": "rarity", "value": 5 }
21				]
22			},
23			{
24				"key": "0x1c0d29f4024f0f463ef2e6e0f05434052ed7fa5fb9f7b0c0e2aa9308d0b5a12c",
25				"value": "0x7b226e616d65223a2241726b69762047656d202332222c2274797065223a226e6674222c22737461747573223a22616374697665227d",
26				"contentType": "application/json",
27				"expiresAt": 1200042,
28				"creator": "0x1111111111111111111111111111111111111111",
29				"owner": "0x3333333333333333333333333333333333333333",
30				"createdAtBlock": 417,
31				"lastModifiedAtBlock": 417,
32				"stringAttributes": [
33					{ "key": "status", "value": "active" },
34					{ "key": "type", "value": "nft" }
35				],
36				"numericAttributes": [
37					{ "key": "rarity", "value": 9 }
38				]
39			}
40		],
41		"blockNumber": "0x1bc",
42		"cursor": "0x2a"
43	}
44}

Response Notes

  • blockNumber is a hex quantity string.
  • data is an array of entity objects.
  • cursor is omitted when there are no more pages.
  • value is hex-encoded bytes.

Pagination

Use the returned cursor in the next request to continue from the previous page.

bashExample
1curl https://kaolin.hoodi.arkiv.network/rpc \
2	-H "content-type: application/json" \
3	-d '{
4		"jsonrpc":"2.0",
5		"id":2,
6		"method":"arkiv_query",
7		"params":[
8			"type = \"nft\" && status = \"active\"",
9			{
10				"atBlock":"0x1bc",
11				"resultsPerPage":"0x2",
12				"cursor":"0x2a"
13			}
14		]
15	}'

Query Examples

By owner:

bashExample
1curl https://kaolin.hoodi.arkiv.network/rpc \
2	-H "content-type: application/json" \
3	-d '{
4		"jsonrpc":"2.0",
5		"id":10,
6		"method":"arkiv_query",
7		"params":[
8			"$owner = \"0x2222222222222222222222222222222222222222\"",
9			null
10		]
11	}'

By creator or owner:

bashExample
1curl https://kaolin.hoodi.arkiv.network/rpc \
2	-H "content-type: application/json" \
3	-d '{
4		"jsonrpc":"2.0",
5		"id":11,
6		"method":"arkiv_query",
7		"params":[
8			"$owner = \"0x2222222222222222222222222222222222222222\" || $creator = \"0x2222222222222222222222222222222222222222\"",
9			null
10		]
11	}'

By numeric range:

bashExample
1curl https://kaolin.hoodi.arkiv.network/rpc \
2	-H "content-type: application/json" \
3	-d '{
4		"jsonrpc":"2.0",
5		"id":12,
6		"method":"arkiv_query",
7		"params":[
8			"price >= 100 && price <= 1000",
9			null
10		]
11	}'

By glob match:

bashExample
1curl https://kaolin.hoodi.arkiv.network/rpc \
2	-H "content-type: application/json" \
3	-d '{
4		"jsonrpc":"2.0",
5		"id":13,
6		"method":"arkiv_query",
7		"params":[
8			"name ~ \"test*\" && !(status = \"deleted\")",
9			null
10		]
11	}'

Fetch only metadata and omit payload bytes:

bashExample
1curl https://kaolin.hoodi.arkiv.network/rpc \
2	-H "content-type: application/json" \
3	-d '{
4		"jsonrpc":"2.0",
5		"id":14,
6		"method":"arkiv_query",
7		"params":[
8			"$all",
9			{
10				"resultsPerPage":"0xa",
11				"includeData":{
12					"key":true,
13					"attributes":true,
14					"syntheticAttributes":true,
15					"payload":false,
16					"contentType":true,
17					"expiration":true,
18					"creator":true,
19					"owner":true,
20					"createdAtBlock":true,
21					"lastModifiedAtBlock":true,
22					"transactionIndexInBlock":true,
23					"operationIndexInTransaction":true
24				}
25			}
26		]
27	}'

Decode a JSON payload from the first returned entity:

bashExample
1curl https://kaolin.hoodi.arkiv.network/rpc \
2	-H "content-type: application/json" \
3	-s \
4	-d '{
5		"jsonrpc":"2.0",
6		"id":15,
7		"method":"arkiv_query",
8		"params":["$all",{"resultsPerPage":"0x1"}]
9	}' \
10	| jq -r '.result.data[0].value' \
11	| sed 's/^0x//' \
12	| xxd -r -p

arkiv_getEntityCount

Returns the total number of entities currently stored in Arkiv.

Parameters

None.

Example Request

bashExample
1curl https://kaolin.hoodi.arkiv.network/rpc \
2	-H "content-type: application/json" \
3	-d '{
4		"jsonrpc":"2.0",
5		"id":3,
6		"method":"arkiv_getEntityCount",
7		"params":[]
8	}'

Example Response

jsonExample
1{
2	"jsonrpc": "2.0",
3	"id": 3,
4	"result": 18427
5}

Notes

  • result is a normal JSON number, not a hex string.

arkiv_getNumberOfUsedSlots

Reads current chain state and returns the number of used storage-accounting slots.

Parameters

None.

Example Request

bashExample
1curl https://kaolin.hoodi.arkiv.network/rpc \
2	-H "content-type: application/json" \
3	-d '{
4		"jsonrpc":"2.0",
5		"id":4,
6		"method":"arkiv_getNumberOfUsedSlots",
7		"params":[]
8	}'

Example Response

jsonExample
1{
2	"jsonrpc": "2.0",
3	"id": 4,
4	"result": "0x48b"
5}

Notes

  • result is a hex quantity string

arkiv_getBlockTiming

Returns timing information for the current head block.

Response Fields

FieldDescription
current_blockCurrent block number
current_block_timeCurrent block timestamp as Unix seconds
durationDifference in seconds between the current block and previous block

Example Request

bashExample
1curl https://kaolin.hoodi.arkiv.network/rpc \
2	-H "content-type: application/json" \
3	-d '{
4		"jsonrpc":"2.0",
5		"id":5,
6		"method":"arkiv_getBlockTiming",
7		"params":[]
8	}'

Example Response

jsonExample
1{
2	"jsonrpc": "2.0",
3	"id": 5,
4	"result": {
5		"current_block": 582143,
6		"current_block_time": 1742721127,
7		"duration": 2
8	}
9}

Notes

  • All three response fields are plain JSON numbers.
  • current_block_time is a Unix timestamp in seconds.
  • duration is the gap between the current block timestamp and the previous block timestamp.