Endpoints
The read-only endpoints in the v1 API.
All endpoints are GET, live under https://api.onetakeapp.com/v1, and require
a bearer token. Results are scoped to your studio —
you only ever see your own data. Archived items are never returned from the
items endpoints.
Overview
| Method | Endpoint | Purpose |
|---|---|---|
GET | /items | List items (paginated, filterable). |
GET | /items/{id} | Full detail for one item, including valuation fields and photo URLs. |
GET | /items/{id}/policies | Policy assignments for one item, primary first. |
GET | /locations | List locations (Studio plan; Pro has a single implicit location). |
GET | /maintenance | Scheduled and completed maintenance, per item. |
GET | /policies | List active policies (paginated). |
GET | /policies/{id} | Full detail for one policy, including assignment count. |
GET | /account | Account info — plan tier, current period, item count. |
GET /items
Lists your items. Returns the standard list envelope with pagination and the disclaimers.
Query parameters
| Parameter | Type | Notes |
|---|---|---|
page | integer | Page number. Default: 1. |
per_page | integer | Items per page. Default: 50. Clamped to a max of 100 — values above 100 are silently capped, not rejected. |
category | string | Filter by category (exact match, case-sensitive). |
coverage_state | enum | Filter by coverage state. Must be one of the four valid values; any other value returns 400. |
updated_since | ISO 8601 | Only items updated at or after this timestamp. An invalid timestamp returns 400. |
Valid coverage_state values: fully_covered, under_covered, uninsured,
value_unknown. These match the states described in Item schema →
coverage_state.
When coverage_state is specified and no items match, the response is a normal
envelope with an empty data array and total: 0 — not a 404.
curl -H "Authorization: Bearer onetake_pro_…" \
"https://api.onetakeapp.com/v1/items?category=Microphones&per_page=50"Results are ordered newest-updated first. See Responses & pagination → Result ordering.
GET /items/{id}
Returns the full record for a single item, including valuation fields and photo URLs. See Item schema for every field.
curl -H "Authorization: Bearer onetake_pro_…" \
https://api.onetakeapp.com/v1/items/3f9c1e7a-…Valuation fields
The detail endpoint includes fields that the list endpoint does not:
| Field | Notes |
|---|---|
coverage_state | DB-level enum: fully_covered, under_covered, uninsured, or value_unknown. Null if not computable. |
current_estimated_value | Computed current value (number or null). |
value_source | How the value was derived. Null if not computable. |
gap_amount | Difference between estimated value and insured value (number or null). |
agreed_value_from_policy | Always null in v1 (reserved for a future release). |
photo_urls | Signed photo URLs, valid for 1 hour. Empty array if photos cannot be resolved. |
coverage_state and gap_amount are null when the valuation projection is
unavailable for the item. This does not indicate an error — the rest of the item
record is still returned.
If photo signing fails, photo_urls is an empty array. The item is still
returned with all other fields intact.
404 responses
The endpoint returns 404 in all of the following cases, deliberately without
distinguishing between them:
- The ID is malformed (not a valid UUID format).
- The item does not exist.
- The item belongs to a different studio.
- The item is archived.
Caching
Every response from this endpoint carries Cache-Control: no-store.
GET /items/{id}/policies
Returns the policy assignments for one item — all of them, including assignments to archived or expired policies. The primary assignment appears first.
curl -H "Authorization: Bearer onetake_pro_…" \
https://api.onetakeapp.com/v1/items/3f9c1e7a-…/policiesEach assignment includes the policy name so you do not need a separate request per assignment. See Policy schema → Assignment object for every field.
The response uses the standard single-resource envelope (no pagination — the number of assignments per item is small):
{
"data": [
{
"policy_id": "…",
"policy_name": "Studio Floater",
"declared_value": 4500.00,
"is_primary": true,
"effective_start": "2026-01-01",
"effective_end": null
}
],
"_meta": { "disclaimers": ["…"] }
}Scoping
The item must belong to your studio. The endpoint first verifies that before
returning any assignment data. A missing item, an item in another studio, an
archived item, or a malformed ID all return 404 — without distinguishing
between these cases.
Rate limiting
The rate check runs before any data query. A 429 response means no DB queries
were made.
GET /locations
Lists your studio's locations. Available on the Studio plan; Pro accounts have a single implicit location.
GET /maintenance
Lists scheduled and completed maintenance, per item, paginated.
GET /policies
Lists your studio's active insurance policies, paginated. Returns the standard list envelope.
A policy is active when it is not archived, its effective start date is today or in the past, and its effective end date (if set) has not passed.
Query parameters
| Parameter | Type | Notes |
|---|---|---|
page | integer | Page number. Default: 1. |
per_page | integer | Policies per page. Default: 50. Clamped to a max of 100 — values above 100 are silently capped, not rejected. |
curl -H "Authorization: Bearer onetake_pro_…" \
"https://api.onetakeapp.com/v1/policies?per_page=50"Results are ordered most-recently-started first. When two policies share the
same effective start date, they are ordered by id descending.
See Policy schema for every field returned.
GET /policies/{id}
Returns the full record for a single policy, plus the count of equipment assignments to it. The endpoint resolves any policy in your studio — including archived and expired ones — so a stored ID always resolves if the policy still exists.
curl -H "Authorization: Bearer onetake_pro_…" \
https://api.onetakeapp.com/v1/policies/11111111-…The assignments_count field is the total number of equipment assignments to
this policy — not filtered by active window.
If the count query fails, assignments_count is 0 and the policy record is
still returned. The response is not blocked by a count failure.
See Policy schema for every field.
404 responses
The endpoint returns 404 in all of the following cases, without distinguishing
between them:
- The ID is malformed (not a valid UUID format).
- The policy does not exist.
- The policy belongs to a different studio.
GET /account
Returns account metadata: your plan tier, current billing period, and item count.