Skip to main content

Authentication

The Kula API uses Bearer token authentication. Include your token in the Authorization header of every request.

Token Format

Include your API token in the Authorization header:

Authorization: Bearer your_api_token_here

Getting Your Token

  1. Log in to your Kula dashboard
  2. Go to SettingsAPI Management
  3. Click Create API Key
  4. Enter an API key name (e.g., "Careers Page Integration")
  5. Choose API type:
    • Job Boards — For career page integrations
    • Application API — For system integrations
  6. Click Generate API key
  7. Copy and store the token securely

Making Requests

curl -X GET "https://api.kula.ai/v1/job-boards/job-posts" \
-H "Authorization: Bearer your_api_token_here" \
-H "Content-Type: application/json"

API Key Types

TypeAccessUse Case
Job BoardsJob board endpoints onlyCareer page integrations, job listing widgets
Application APIATS endpoints, narrowed by scopesSystem integrations, ATS workflows

Scopes

A token carries a set of scopes that decide which endpoints it can reach. Every endpoint in the Application API reference states the single scope it needs under Required scope — for example, GET /v1/jobs needs jobs:read.

Scopes are named resource:action, and read and write are separate grants. Holding jobs:read does not let a token create or update a job.

Scopes are managed under SettingsAPI Management. Changing them does not change the token value, so an existing integration keeps working without a redeploy.

Grant only what the integration uses. A token restricted to jobs:read cannot leak candidate data even if it is exposed.

Calling an endpoint without its scope returns 403 ERR_INSUFFICIENT_SCOPE, naming the missing scope:

{
"error": {
"code": "ERR_INSUFFICIENT_SCOPE",
"message": "This API key is missing the required scope: jobs:read"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "req_abc123"
}
}

Add that scope and retry. Tokens issued before scopes were introduced are unrestricted and keep working unchanged until you edit them.

Best Practices

  • Store tokens in environment variables
  • Use different tokens for each environment
  • Rotate tokens periodically
  • Never commit tokens to version control
  • Never expose Application Api token in client-side code
  • Never share tokens between applications

Environment Variables

Store your token securely:

export KULA_API_TOKEN="your_api_token_here"

Then use it in your code:

const token = process.env.KULA_API_TOKEN;

Resetting Your Token

If your token is compromised:

  1. Go to SettingsAPI Management
  2. Find the compromised API key and click Revoke
  3. Create a new API key following the steps above
  4. Update all applications with the new token

Important: Revoking immediately invalidates the old token. Ensure you have the new token ready before updating your applications.

Error Responses

StatusCodeDescription
401ERR_TOKEN_MISSINGNo token provided
401ERR_INVALID_TOKENToken is invalid or expired
403ERR_FEATURE_NOT_ENABLEDAPI access not enabled
403ERR_INSUFFICIENT_SCOPEToken lacks the scope the endpoint requires

Next Steps