[ 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
| Field | Value |
|---|---|
| Chain ID | 60138453025 |
| HTTP RPC | https://kaolin.hoodi.arkiv.network/rpc |
| WebSocket RPC | wss://kaolin.hoodi.arkiv.network/rpc/ws |
| Explorer | explorer.kaolin.hoodi.arkiv.network |
| Faucet | kaolin.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.
jsonExample1{ 2 "jsonrpc": "2.0", 3 "id": 1, 4 "method": "arkiv_query", 5 "params": [] 6}
Minimal curl template:
bashExample1curl 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
| Method | Purpose |
|---|---|
arkiv_query | Query Arkiv entities from the bitmap-backed SQLite store |
arkiv_getEntityCount | Return the total number of entities currently stored |
arkiv_getNumberOfUsedSlots | Return the number of used storage-accounting slots |
arkiv_getBlockTiming | Return 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
| Position | Type | Required | Description |
|---|---|---|---|
0 | string | Yes | Query expression |
1 | object or null | No | Query options |
Behavior:
- If the options object is omitted or
null, the server uses an empty options object. - If
options.atBlockis omitted, the query runs against the current chain head. resultsPerPageis capped at200.- The response may include a
cursorwhen 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
| Field | Type | Description |
|---|---|---|
atBlock | hex quantity string | Block to query against, for example 0x1bc |
includeData | object | Controls which entity fields are returned |
resultsPerPage | hex quantity string | Page size, capped at 200 |
cursor | string | Cursor returned by a previous arkiv_query response |
Default includeData values when omitted:
| Field | Default |
|---|---|
key | true |
contentType | true |
payload | true |
creator | true |
owner | true |
attributes | true |
expiration | true |
Example Request
bashExample1curl 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
jsonExample1{ 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
blockNumberis a hex quantity string.datais an array of entity objects.cursoris omitted when there are no more pages.valueis hex-encoded bytes.
Pagination
Use the returned cursor in the next request to continue from the previous page.
bashExample1curl 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:
bashExample1curl 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:
bashExample1curl 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:
bashExample1curl 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:
bashExample1curl 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:
bashExample1curl 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:
bashExample1curl 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
bashExample1curl 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
jsonExample1{ 2 "jsonrpc": "2.0", 3 "id": 3, 4 "result": 18427 5}
Notes
resultis 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
bashExample1curl 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
jsonExample1{ 2 "jsonrpc": "2.0", 3 "id": 4, 4 "result": "0x48b" 5}
Notes
resultis a hex quantity string
arkiv_getBlockTiming
Returns timing information for the current head block.
Response Fields
| Field | Description |
|---|---|
current_block | Current block number |
current_block_time | Current block timestamp as Unix seconds |
duration | Difference in seconds between the current block and previous block |
Example Request
bashExample1curl 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
jsonExample1{ 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_timeis a Unix timestamp in seconds.durationis the gap between the current block timestamp and the previous block timestamp.