VoxelDocs

API Reference

The Voxel API gives you programmatic access to everything in your workspace — items, collections, ingestion jobs, and usage data — through a predictable REST interface.

Every endpoint speaks JSON, uses standard HTTP verbs and status codes, and returns cursor-based pages. Test freely against the sandbox: nothing you do there touches production data.

Base URL

All requests are made over HTTPS to the URL below. Plain-HTTP requests are rejected, and the current stable version is pinned in the path — breaking changes only ever ship in a new version.

https://api.voxel.dev/v1

Authentication

Authenticate every call with a secret API key sent in the Authorization header. Create and rotate keys in the dashboard — each key is scoped to a single environment (sandbox or production).

Authorization: Bearer YOUR_API_KEY

Keys carry full workspace access — keep them server-side, out of client code and version control, and rotate immediately if one leaks.

Making requests

List the items in your workspace with a single authenticated GET. Responses are JSON; send Accept: application/json and you will always get a machine-readable body — even for errors.

curl -X GET "https://api.voxel.dev/v1/items?limit=25" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

Endpoint overview

The endpoints you will reach for most. Every one accepts and returns JSON, and list endpoints share the same cursor-pagination contract.

MethodEndpointDescription
GET/v1/itemsList items in your workspace, newest first.
GET/v1/items/{id}Retrieve a single item by its unique ID.
POST/v1/itemsCreate a new item from a JSON payload.
GET/v1/collectionsList collections along with item counts and metadata.
POST/v1/ingestIngest up to 1,000 records in a single batched call.

Endpoint details

A closer look at the workhorse of the API. Combine limit with the returned next_cursor to page through results of any size.

GET /v1/items

Query parameters

ParameterTypeRequiredDescription
limitintegerNoResults per page. Defaults to 25, max 100.
offsetintegerNoRecords to skip before the first result.
filterstringNoFilter expression, e.g. status:active.
sortstringNoSort key with direction, e.g. -created_at.

Path parameters

ParameterTypeRequiredDescription
idstringYesUnique item identifier, used by the /{id} variant.
Error responses
StatusCodeDescription
400invalid_requestMalformed query parameter or body.
401unauthorizedMissing or invalid API key.
404not_foundThe requested item does not exist.
429rate_limitedToo many requests — retry after the reset time.

Response

200 OK application/json
{
  "items": [
    {
      "id": "itm_9f3KZq7L",
      "name": "Quarterly usage export",
      "status": "active",
      "created_at": "2026-07-14T09:12:33Z"
    }
  ],
  "has_more": true,
  "next_cursor": "cur_aH52xW"
}

Guides & resources

Short, practical reads that take you from first request to production-grade integration.

Rate limits

Limits apply per API key over a rolling one-minute window. Every response includes headers you can use to pace clients and back off cleanly.

Standard plan

1,000 requests / minute

Bursts up to 2,000 req/min are absorbed automatically. Need more headroom? Talk to sales.

Response headers

  • X-RateLimit-LimitMaximum requests allowed in the current window.
  • X-RateLimit-RemainingRequests you have left before throttling kicks in.
  • X-RateLimit-ResetUnix timestamp when the window resets.