List objects

Your organization's objects, newest first — every ticket, card or warranty it has issued. When a user is signed in as an individual rather than as a company account, they see only the objects they own, which makes this the endpoint behind a personal wallet screen as well as an admin list. **Showing them.** Add `include=display` and each object comes back with a ready-made way to show it: an address to load, the shape it draws in, and whether it is interactive. `display_variant` picks which look you want — `card` for a list, `detail` for a page, `share` for a link preview. **Finding them.** Narrow by template, by owner, by whether an object has been left somewhere to be picked up, or by when it was created or last changed. Requires the `objects.read` permission.

GET
/objects
AuthorizationBearer <token>

The access token returned after a successful sign-in, sent as Authorization: Bearer <access_token>.

It identifies the person and the organization they are working in, and it lasts about fifteen minutes. When it runs out, use their refresh token at POST /auth/refresh-token instead of asking them to sign in again.

In: header

Query Parameters

id?string

Return only the resource with this identifier. Equivalent to fetching it by path, but usable together with the other list filters.

org_id?string

Return only resources associated with this organization. On protected endpoints, authorization may restrict or replace this value with the credential's active organization.

autocomplete?string

Search the endpoint's supported text and identifier fields. Matching may be an exact identifier lookup or a case-insensitive prefix search, depending on the resource. Alphanumeric characters only.

limit?integer

How many items to return in one page. The default and the maximum are both 25; a larger value is rejected with 400.

Default25
Formatint64
Range1 <= value <= 25
next?string

Cursor for the next page, taken verbatim from the next field of the previous response. Keep every other query parameter the same between pages: sortBy and order are part of what the cursor means. An absent or empty next in a response means there are no more pages.

The value is opaque. Do not parse it or build one yourself.

order?string

Sort direction. Defaults to desc, newest first.

Default"desc"
Value in"asc" | "desc"
sortBy?string

Field used to sort the result. Supported fields depend on the endpoint; use when_created for chronological ordering where it is available. The default is the resource identifier, and identifiers break ties so cursor paging stays stable.

faces?booleanDeprecated

An older way of asking for how each object looks. Use include=display, which returns a ready-made display for the variant you ask for.

include?array<>

Ask for extras alongside each object. display adds a ready-made way to show it, in the variant named by display_variant.

display_variant?string

Which look to resolve when you ask for include=display: a tile (card), a full page (detail) or a link preview (share).

Default"card"
Value in"card" | "detail" | "share"
actions?boolean

Also return, for each object, what its template allows to be done with it.

owner?string

Return only objects held by this address.

fqdn?string

Return only objects whose template is published under this domain name.

dropped?boolean

Return only objects that have been left at a place for someone to pick up (true), or only objects that have not (false).

geo_hash?string

Return only objects dropped in this area. The longer the value, the smaller the area it covers.

template_id?string

Return only objects made from this template.

when_created[$gt]?string

Created strictly after this moment.

Formatdate-time
when_created[$gte]?string

Created at or after this moment.

Formatdate-time
when_created[$lt]?string

Created strictly before this moment.

Formatdate-time
when_created[$lte]?string

Created at or before this moment.

Formatdate-time
when_modified[$gt]?string

Last changed strictly after this moment.

Formatdate-time
when_modified[$lt]?string

Last changed strictly before this moment.

Formatdate-time
when_modified[$gte]?string

Last changed at or after this moment.

Formatdate-time
when_modified[$lte]?string

Last changed at or before this moment.

Formatdate-time

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://api.dual.network/objects"
{
  "items": [
    {
      "object": {
        "id": "665f1c2d4b1a2c3d4e5f6a90",
        "org_id": "665f1c2d4b1a2c3d4e5f6aa0",
        "template_id": "665f1c2d4b1a2c3d4e5f6a99",
        "owner": "0x1234567890abcdef1234567890abcdef12345678",
        "metadata": {
          "name": "Summer Festival 2026",
          "description": "Three days, four stages, one wristband."
        },
        "custom": {
          "tier": "general",
          "seat": "B14"
        },
        "nonce": 3,
        "version": 2,
        "state_hash": "0xa1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90",
        "content_hash": "0xb2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90a1",
        "integrity_hash": "0xc3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2",
        "prev_integrity_hash": "0xd4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3",
        "when_created": "2026-04-02T12:00:00Z",
        "when_modified": "2026-05-11T18:24:00Z"
      },
      "display": {
        "face_id": "665f1c2d4b1a2c3d4e5f6a50",
        "variant": "card",
        "media_type": "image/svg+xml",
        "href": "/public/objects/665f1c2d4b1a2c3d4e5f6a90/display/card",
        "revision": "665f1c2d4b1a2c3d4e5f6a50-2",
        "aspect_ratio": "1/1",
        "interactive": false
      }
    }
  ],
  "objects": [],
  "next": "7b226964223a22363635663163326434623161326333643465356636613930227d"
}
{
  "code": 3,
  "message": "Key: 'limit' Error:Field validation for 'limit' failed on the 'lte' tag"
}

{
  "code": 16,
  "message": "no auth provided"
}

{
  "code": 13,
  "message": "internal error"
}