Skip to main content
The live OpenAPI document at /api/v1/openapi.json defines the exact request and response schema. This page helps you choose the right resource and scope before opening the generated reference.
Harly API reference showing job endpoints, authorization, query parameters, and a JSON response.

Generated OpenAPI reference with resources, scopes, and request examples.

API key format

API keys have the format harly_{type}_{env}_{secret}: Example secret key: harly_sk_live_AbCdEf123... Publishable keys (pk) are limited to jobs:read and applications:write — the subset safe to expose in a browser. Use secret keys for all server-side integrations.

Resources

Mutation examples

List jobs

Create a candidate

Move an application

Use toStageId (not stageId) and always include an idempotency key on mutations:

Reject an application

Rotate an API key

A rotation issues a new raw key value and invalidates the previous one. The response includes key — the new raw value, shown once.

All scopes

Errors

Use synthetic data in examples and integration tests. Never place a real resume or candidate email in a public README or issue.

Public jobs and applications

These routes are intended for career sites, custom application forms, and the Harly embed widget. They are CORS-enabled and do not require a secret key, but each request must be scoped to a workspace with ?workspace=<slug> or a publishable key (pk_). See the public API guide for request and response examples. Publishable keys are limited to jobs:read and applications:write. They are safe to expose in browser code, but they are not authentication for a person; they only identify and scope the workspace. Never expose a secret key. The public list endpoint accepts department, location, workplaceType, and q filters. Public application submissions return 201; validation failures return 422, failed CAPTCHA checks return 403, unavailable jobs return 404, and rate-limited clients receive 429 with Retry-After.

OpenAPI document

Fetch /api/v1/openapi.json from your Harly instance for the full generated contract.