OneTake Docs
API

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

MethodEndpointPurpose
GET/itemsList items (paginated, filterable).
GET/items/{id}Full detail for one item, including valuation fields and photo URLs.
GET/items/{id}/policiesPolicy assignments for one item, primary first.
GET/locationsList locations (Studio plan; Pro has a single implicit location).
GET/maintenanceScheduled and completed maintenance, per item.
GET/policiesList active policies (paginated).
GET/policies/{id}Full detail for one policy, including assignment count.
GET/accountAccount info — plan tier, current period, item count.

GET /items

Lists your items. Returns the standard list envelope with pagination and the disclaimers.

Query parameters

ParameterTypeNotes
pageintegerPage number. Default: 1.
per_pageintegerItems per page. Default: 50. Clamped to a max of 100 — values above 100 are silently capped, not rejected.
categorystringFilter by category (exact match, case-sensitive).
coverage_stateenumFilter by coverage state. Must be one of the four valid values; any other value returns 400.
updated_sinceISO 8601Only 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:

FieldNotes
coverage_stateDB-level enum: fully_covered, under_covered, uninsured, or value_unknown. Null if not computable.
current_estimated_valueComputed current value (number or null).
value_sourceHow the value was derived. Null if not computable.
gap_amountDifference between estimated value and insured value (number or null).
agreed_value_from_policyAlways null in v1 (reserved for a future release).
photo_urlsSigned 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-…/policies

Each 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

ParameterTypeNotes
pageintegerPage number. Default: 1.
per_pageintegerPolicies 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.

On this page