Changelog
This log records changes to the TrakRF public API under /api/v1/ that affect integrators. Changes to the first-party web app, internal-only endpoints, or anything behind session cookies (see Private endpoints) are out of scope here.
Entries follow the Keep a Changelog convention with the v1 stability commitment in Versioning: within v1, changes are additive only — no silent breaking changes. Deprecations are flagged at least six months before sunset via RFC 8594 headers.
Each entry covers:
- Added — new endpoints, fields, parameters, or enum values
- Deprecated — surface that still works but is scheduled for removal (includes sunset date)
- Removed — surface past its sunset date (major version only)
- Fixed — corrections that align shipped behavior with documented behavior and do not change the contract
Unreleased
Tracked but not yet in a release tag. Merged changes land here first, then move to a dated section on each platform release.
v1.0.0 — 2026-04-20
Initial public availability. The /api/v1/ surface launches with API-key authentication, per-key rate limiting, read and write endpoints for assets and locations, and the generated OpenAPI reference.
Added
- API-key authentication — JWT-based keys minted from Settings → API Keys at app.trakrf.id, sent as
Authorization: Bearer <jwt>. Scoped per endpoint family (assets:read,assets:write,locations:read,locations:write,scans:read). See Authentication. - Read endpoints for the core resources:
GET /api/v1/assets,GET /api/v1/assets/{identifier},GET /api/v1/assets/{identifier}/historyGET /api/v1/locations,GET /api/v1/locations/{identifier}GET /api/v1/locations/{identifier}/ancestors,/children,/descendantsGET /api/v1/locations/current— snapshot of where each asset was last seen
- Write endpoints for assets and locations:
POST /api/v1/assets,PUT /api/v1/assets/{identifier},DELETE /api/v1/assets/{identifier}POST /api/v1/assets/{identifier}/identifiers,DELETE /api/v1/assets/{identifier}/identifiers/{identifierId}POST /api/v1/locations,PUT /api/v1/locations/{identifier},DELETE /api/v1/locations/{identifier}POST /api/v1/locations/{identifier}/identifiers,DELETE /api/v1/locations/{identifier}/identifiers/{identifierId}POST /api/v1/inventory/save— bulk scan ingest
- Shared response envelope — list responses return
{ "data": [...], "limit", "offset", "total_count" }; single-resource responses return{ "data": {...} }. See Pagination, filtering, sorting. - Shared error envelope — RFC 7807
{ "error": { "type", "title", "status", "detail", "instance", "request_id" } }on every non-2xx response, plusfields[]onvalidation_error. See Errors. - Per-key rate limiting — token bucket, default 60/min steady-state with 120-burst, surfaced via
X-RateLimit-Limit/X-RateLimit-Remaining/X-RateLimit-Reseton every response andRetry-Afteron 429. See Rate limits. - Request IDs — every response includes
X-Request-ID(ULID). InboundX-Request-IDis echoed back for client-supplied correlation IDs. - Interactive reference — the OpenAPI 3.0 spec is generated from the Go handlers and rendered at
/api(Redoc). Raw spec available at/api/openapi.jsonand/api/openapi.yaml. - Postman collection — regenerated alongside the spec; see Postman collection.
Fixed
POST /api/v1/locationsnow returns409 conflict(not500 internal_error) on duplicate identifiers, matching the behavior ofPOST /api/v1/assets.403 forbiddenis used (instead of400 bad_request) when a valid key attempts to access a resource in a different organization.- Write endpoints use
{identifier}path parameters consistently with read endpoints.
Notes
- No webhooks in v1. Outbound webhook delivery is planned for a future release; see Webhooks for the current placeholder page.
- No language SDKs in v1. Use the Postman collection or generate a client from the OpenAPI spec with your preferred codegen tool.
- Idempotency keys are not supported. Retry safety comes from HTTP semantics and unique-identifier constraints; see Errors → Idempotency.