List your objects and their certification status.
const url = 'https://testnet.permafrost.live/v1/api/meta/objects?limit=1000&marker=report-2026-05.pdf';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://testnet.permafrost.live/v1/api/meta/objects?limit=1000&marker=report-2026-05.pdf' \ --header 'Authorization: Bearer <token>'The certification metadata for the objects you own, oldest key first. The list is scoped to the calling tenant: an object another tenant owns is not in it, and there is no parameter that widens it.
Each entry is the same eight-field shape the by-id route returns.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Example
100Maximum number of entries to return. Values outside the range are clamped to the cap.
Example
report-2026-05.pdfReturn only objects whose key sorts strictly after this one.
Responses
Section titled “Responses”Your objects. An empty list is a normal answer.
The eight fields the /v1/ contract exposes for a stored object.
Internal columns are not part of this shape.
object
The object identifier.
Where the object stands. SYNCED is the state in which it has cleared
certification on Walrus and its blob id is known.
The Walrus blob identifier. null until the object reaches SYNCED.
The Walrus epoch at which certification was recorded. null until SYNCED.
When the object reached SYNCED, in UTC. null before that.
When the object was first accepted, in UTC.
Object size in bytes.
The type recorded at upload time.
Example
[ { "id": 42, "state": "PENDING", "blob_id": "9c4f3b2a1d0e8f7c6b5a4d3e2f1c0b9a8d7e6f5c4b3a2918", "walrus_epoch": 137, "synced_at": "2026-09-13T14:08:21Z", "created_at": "2026-09-13T14:07:55Z", "size_bytes": 1048576, "content_type": "image/png" }]The credential was not accepted. Every cause answers this same status with this same body — absent, malformed, unknown key, revoked key, unconfigured issuer, bad signature, wrong audience, expired token, or a subject that is not a canonical Sui address. The refusal is made at the edge, before the request reaches a service.
The refusal shape. detail is present on a few routes and deliberately
absent from the custody surface, where a detail string could carry an
internal path.
object
The code, or a short fixed sentence.
A human-readable note, where a route carries one.
Example
{ "error": "Invalid or inactive API key"}The credential is real but the tenant it names has been revoked. Revoking a tenant closes both lanes at once — key and token.
The refusal shape. detail is present on a few routes and deliberately
absent from the custody surface, where a detail string could carry an
internal path.
object
The code, or a short fixed sentence.
A human-readable note, where a route carries one.
Example
{ "error": "Tenant inactive or not found"}The tenant is over an allowance. Retry-After carries whole seconds,
rounded up and never zero. The per-tenant refusal also carries
retry_after_ms; the custody surface’s own local limiter carries the
code alone. Both are per tenant, keyed by the tenant address — one
tenant spending its allowance does not consume another’s.
object
How long until one token is available, in milliseconds. Present on the per-tenant refusal.
Example
{ "error": "rate_limited", "retry_after_ms": 240}Headers
Section titled “Headers”Example
1Whole seconds to wait before retrying.
Something failed on the instance. The reason is logged there, not returned.
The refusal shape. detail is present on a few routes and deliberately
absent from the custody surface, where a detail string could carry an
internal path.
object
The code, or a short fixed sentence.
A human-readable note, where a route carries one.
Example
{ "error": "internal_error"}Permafrost runs on Sui testnet and Walrus testnet. Everything here describes a shipped testnet instance, not a production service.