List shares
GET /v1/shares
Requires the shares:read scope. Returns the shares your key created, newest first.
Query parameters
| Parameter | Type | Default | Notes |
|---|---|---|---|
page | integer | 1 | 1-based. |
limit | integer | 25 | Maximum 100. A larger value is capped at 100 rather than refused. |
Both parameters are tolerant rather than strict. A value that is not a positive integer — ?limit=abc, ?page=0 — is treated as absent and the default applies. You will not get a 400 for a malformed pagination parameter, so check the pagination block in the response rather than assuming your input was honoured.
Ordering
The list is always ordered newest first, by creation time. There is no sort parameter, and the ordering is not caller-supplied — it is a fixed value, so there is no place for a caller to inject one.
Request
curl "https://api.credenshare.io/v1/shares?page=1&limit=25" \
-H "Authorization: Bearer crs_sk_live_<keyId>.<authSecret>"
Success response
200 OK.
{
"shares": [
{ "short_code": "a1b2c3d4", "expired_at": "2026-09-01T00:00:00Z" },
{ "short_code": "e5f6g7h8", "expired_at": null }
],
"pagination": {
"page": 1,
"limit": 25,
"total_pages": 3,
"total": 61
}
}
| Field | Type | Notes |
|---|---|---|
shares[].short_code | string | The share's public identifier. |
shares[].expired_at | string or null | RFC 3339, or null when the share was created with no expiry. |
pagination.page | integer | The page actually served, after defaults and clamping. |
pagination.limit | integer | The limit actually applied, after defaults and clamping. |
pagination.total_pages | integer | Pages available at this limit. |
pagination.total | integer | Shares matching, across all pages. |
The pagination block is always present, so a client never has to guess whether more exists.
shares is an empty array — not null — when there is nothing to return.
What the list includes
The scope of the list is narrower than "everything on the account", in ways worth knowing before you build reconciliation on top of it:
- Only shares your key's user created. An organization-scoped key does not see teammates' shares.
- Only shares that are still usable. A share that has expired, run out of views, or run out of passcode attempts is not in the list. If a short code you created is missing, that is the likely reason.
- No secure-request submissions. Content submitted to you through a secure request is a separate thing and never appears here.
- Organization scoping is exclusive. A key that acts in a team sees only that team's shares. A key with no team sees only shares with no team. There is no combined view.
Errors
| Status | error_code | When |
|---|---|---|
| 403 | 78 | The key lacks the shares:read scope. |
| 429 | 107 | Rate limit exceeded. Retry-After gives the seconds to wait. |
| 500 | 11 | The list could not be read. |