Skip to content
qibdo qibdo
v1
API version
  • v1
Theme
Book a demo

List Objects

GET
/storage/v1/workspaces/{workspace}/engines/{engine}/buckets/{bucket}/objects
curl --request GET \
--url https://example.com/storage/v1/workspaces/example/engines/example/buckets/example/objects

Lists one page of a bucket’s contents as a single ordered list of entries, each declaring itself a stored file or a directory. Supplying a delimiter (typically ”/”) groups everything below the next separator into a directory entry; supplying none returns every stored file exactly as stored, with nothing reported as a directory and nothing hidden.

workspace
required
string

The workspace the bucket belongs to

engine
required
string

The cloud provider: qibdo, aws, gcp, or azure. ’-’ resolves to the platform’s default provider; it does NOT federate — this listing is served by exactly one provider, and a cross-provider listing is not offered.

bucket
required
string

The bucket to list objects from

prefix
string

Filter objects by key prefix. Retained as a dedicated field because key prefix matching is a fundamental server-side optimization that cannot be expressed in filter syntax without losing performance.

delimiter
string

Delimiter for pseudo-directory listing (typically ”/”). Retained as a dedicated field because delimiter handling is a native server-side optimization not expressible via filter strings.

page_size
integer format: int32

Maximum keys per page. The service may return fewer than this value. If unspecified, at most 20 objects will be returned. The maximum value is 100; values above 100 will be coerced to 100.

page_token
string

A page token, received from a previous ListObjects call. Provide this to retrieve the subsequent page. When paginating, all other parameters must match the call that provided the page token.

OK

Media type application/json

ListObjectsResponse

Response message for ListObjects. Pass-through S3 listing — the backend provides no total count, so total_size is intentionally omitted (see ADR qib-522/0001).

object
objects

The entries of this page, in one ordered list. It holds both stored files and directories; each entry declares which it is. No client-side merge, trim, filter or ordering step is required.

Ordering: entries are returned in ascending lexicographic order of the full name, with files and directories interleaved in that single order. The order is over the complete key — it is NOT two lists concatenated, so a directory may appear between two files. Repeating an unchanged request returns the same order.

Array<object>

StorageObject

One entry in a directory listing: either a stored file or a directory.

object
name

The object’s full name — the complete key, slashes included, exactly as stored. THE IDENTIFIER: unique within a listing and sufficient for a follow-up request. A directory’s name ends in the delimiter.

A name’s slashes are sent percent-encoded (%2F) when it is used as a path segment; a literal ’:’ is sent %3A so the ‘:metadata’ custom verb stays unambiguous.

stringOutput only
display_name

Free-text label relative to the request prefix, e.g. “2026” or “cover.jpg”. NOT unique within a listing — a file and a directory may share one. When no delimiter is supplied there is no grouping to strip, so this may contain delimiters. A presentation convenience, never an identifier.

stringOutput only
blob

Blob

A stored file. Population varies BY RPC: a provider’s list call returns an index, not the full record — absent means “not carried by this RPC on this provider”, never fabricated-empty.

object
bucket_id

The bucket that actually holds this file, as its platform identifier. Resolvable via GetBucket. Empty when the read path could not name the parent row.

stringOutput only
size_bytes
stringOutput only
content_type

Absent on a listing row; populated on Head/Get.

stringOutput only
etag

Change-detection token. Guaranteed only to change when the object changes. NOT a content digest — providers compute it differently for multipart, composite and encrypted objects, and one provider returns different values for the same object across its own APIs. Use checksums for integrity.

stringOutput only
checksums

Integrity digests, each carrying its own algorithm. May be empty: some objects genuinely have none. On a listing row emptiness is NOT proof of absence — see ListObjectsResponse.unpopulated_fields.

Array<object>Output only

Checksum

One integrity digest.

object
catalogued

An algorithm the platform catalogues.

string format: enum Output only
Allowed values: CHECKSUM_ALGORITHM_UNSPECIFIED CHECKSUM_ALGORITHM_MD5 CHECKSUM_ALGORITHM_CRC32 CHECKSUM_ALGORITHM_CRC32C CHECKSUM_ALGORITHM_SHA1 CHECKSUM_ALGORITHM_SHA256 CHECKSUM_ALGORITHM_SHA384 CHECKSUM_ALGORITHM_SHA512 CHECKSUM_ALGORITHM_CRC64NVME
uncatalogued

The provider’s own algorithm token, verbatim, when the platform does not yet catalogue it. Read-side honesty only — a caller may never supply this arm.

stringOutput only
value
stringOutput only
metadata

Empty on a listing row; populated on Head/Get. Emptiness on a listing row is NOT proof of absence — see ListObjectsResponse.unpopulated_fields.

object
key
additional properties
string
version_id

Absent on a listing row; populated on Head/Get.

stringOutput only
create_time

Where a provider reports a single timestamp (the S3 family reports LastModified alone), create_time is ABSENT rather than a copy of update_time.

string format: date-time Output only
update_time
string format: date-time Output only
directory

Directory

A directory. Empty on backends where directories are inferred from key names; gains fields when a backend can supply them honestly. Shipping always-absent fields would be dead surface, and a later addition is additive.

object
next_page_token

A token, which can be sent as page_token to retrieve the next page. An empty token — and only an empty token — means the listing has ended. The server absorbs pages its own filtering would leave empty, so an empty objects list with a non-empty token does not occur; a page holding FEWER entries than page_size is normal and is not the end.

Never the provider’s raw continuation marker: it is wrapped and signed, binding the request parameters it was issued under, so a token replayed against a different workspace, bucket, prefix, delimiter or page size is refused rather than silently answering from the wrong listing.

Completeness is promised only for a folder that does not change while the walk is in progress: every entry is returned exactly once. If objects are written or deleted concurrently, an entry may be seen twice or not at all — a walk is not a point-in-time snapshot.

string
unpopulated_fields

Blob field names this RPC did not populate for ANY row of this page — the honest-absence marker for the fields proto3 gives no presence bit (metadata, checksum VALUES). A name listed here carries no information for this page: read it with a per-object describe call.

Today this list is fixed for the listing RPC and is the same for every page and provider. It is not yet narrowed per provider, so a provider whose list call happens to return more than the guaranteed minimum is still reported conservatively; per-provider reporting is owed and will only ever shorten the list.

Array<string>Output only
Example
{
"objects": [
{
"blob": {
"checksums": [
{
"catalogued": "CHECKSUM_ALGORITHM_UNSPECIFIED"
}
]
}
}
]
}

Default error response

Media type application/json

The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC. Each Status message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the API Design Guide.

object
code

The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].

integer format: int32
message

A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.

string
details

A list of messages that carry the error details. There is a common set of message types for APIs to use.

Array<object>

Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.

object
@type

The type of the serialized message.

string
key
additional properties
any
Example generated
{
"code": 1,
"message": "example",
"details": [
{
"@type": "example"
}
]
}