The Harly REST API is available at:
The OpenAPI document is available from a running installation at
/api/v1/openapi.json. Use it as the source of truth for exact schemas and
route parameters.
The repository also includes a generated snapshot at /openapi.json. With the
Harly dev server running on port 3000, refresh it after changing an API
contract with:
Authenticate
Create a key from Settings → Developers → API keys, copy the raw value
once, and send it as a bearer token:
Keys are scoped. Give an integration only the resources it needs. Rotate or
revoke keys when an owner or vendor changes.
Response envelopes
Success
Error
Common error codes: validation_error, not_found, forbidden,
conflict, rate_limited.
List endpoints use cursor-based pagination:
- Do not assume a stable sort order or page number.
meta.nextCursor is absent when you have reached the last page.
limit defaults to 25 and caps at 100.
Idempotency
POST requests that support it accept an Idempotency-Key header. Use a
unique value per logical operation — for example a UUID or a stable key
derived from the operation’s inputs:
A 409 may mean a real concurrency conflict or an idempotency collision.
Inspect the error envelope before retrying a mutation. Do not retry a 409
blindly — the operation may have already succeeded.
Rate limits
The API applies per-key rate limits. When a response returns 429, back off
using the Retry-After header value before retrying. Do not hammer the API
with immediate retries.
HTTP status codes
Main resources
Jobs, candidates, applications, interviews, offers, scorecards, tasks,
pool entries, activity events, webhooks, and API keys are available through
the versioned API.
Use webhooks to react to changes instead of polling
every resource. See API resource reference for
the full scope and operation inventory.
Try it
The OpenAPI document at /api/v1/openapi.json is importable into Insomnia,
Postman, or any OpenAPI-compatible tool:
See the API integration tutorial for an
end-to-end walkthrough with webhook verification.