Public API
Looped’s public API is the same surface the apps use — exposed for external integrations.
It lives at api.looped.sh. That URL renders the interactive Scalar reference — every endpoint, every parameter, every response shape, with a “Try it” panel you can run live calls from.
For machine consumption, the OpenAPI 3.0 spec is at api.looped.sh/openapi.json. Drop it into Postman, Bruno, or your codegen of choice.
Authenticating
Section titled “Authenticating”Every request needs an API key in the X-API-Key header. Generate one from your team’s API keys page, then:
curl https://api.looped.sh/v1/invoices \ -H "X-API-Key: looped_..."The key carries the team scope — you don’t pass teamId separately. Each key also carries a scope set (read-only / write / restricted) configured when the key was created.
| Status | Cause |
|---|---|
200 / 201 | Success |
400 | Validation error — body explains the offending field |
401 | Missing / invalid / expired / revoked X-API-Key |
403 | Key is valid but doesn’t include the scope this endpoint needs |
404 | Resource not found (or in a different team) |
Endpoint surface (high-level)
Section titled “Endpoint surface (high-level)”| Path prefix | Resource |
|---|---|
/v1/invoices | Invoices, line items, marking statuses, generating PDFs |
/v1/invoices/clients | Clients (the “billed to” side of invoices) |
/v1/track/time | Time entries |
/v1/track/projects | Projects |
/v1/track/sections | Sections within a project |
/v1/track/tags | Tags on time entries |
The exact list and response shapes are authoritative in the live reference.
Rate limits
Section titled “Rate limits”Requests are rate-limited per API key. If you exceed the limit you’ll get a 429 with a Retry-After header. Most well-behaved integrations never hit it.
Idempotency
Section titled “Idempotency”Mutating endpoints (POST/PATCH/DELETE) are not idempotent by default. If you need at-most-once semantics for a workflow that might retry, dedupe on your side or use a deterministic id pattern in your application logic.
We don’t ship official SDKs yet. Generate one for your language from the OpenAPI spec — most popular languages have a one-shot generator (openapi-generator, swagger-codegen, etc.) that produces a usable client in a couple of minutes.
Where to go next
Section titled “Where to go next”- Browse the interactive reference
- Create your first key
- Read the OpenAPI spec