Authentication
The API keys and headers every Propelus API request requires.
Every request to the Propelus API must be authenticated with two header credentials. There are no unauthenticated endpoints.
Required headers
Send both headers on every request:
| Header | Description |
|---|---|
x-api-key | Your secret API key. Treat it like a password. |
x-client-id | Your client identifier. Also used to scope webhook signatures. |
curl https://api.propelus.com/v2/professions \
-H "x-api-key: $PROPELUS_API_KEY" \
-H "x-client-id: $PROPELUS_CLIENT_ID"Both are required together. A request missing either header, or sending an invalid value, is rejected before any processing happens.
Send the header names in lowercase, exactly as shown. Over HTTP/1.1, a mixed-case X-Client-Id fails with 403 restricted_access, and a mixed-case X-Api-Key fails with 401 invalid_credentials, even when the values are correct. Both responses use the standard error envelope. Some HTTP clients rewrite header names this way; for example, Python's urllib always sends X-Client-Id. Over HTTP/2, header names are always lowercase.
Getting credentials
Propelus shares your x-api-key and x-client-id with you in a secure manner. These credentials grant access to both the Demo and Production environments. See Environments for the base URLs each environment uses.
Contact support@propelus.com to request or troubleshoot credentials.
Authentication failures
The response depends on which header failed.
Missing or invalid x-api-key. The request is rejected with 403 before it reaches the API. The body is not the standard error envelope; it contains a single message field:
{
"message": "<error message>"
}Valid x-api-key, but x-client-id is missing, unknown, or doesn't match the key. The API returns 401 or 403 with the standard error envelope:
{
"status": 401,
"detail": "Unauthorized",
"code": "invalid_credentials"
}401withcode: invalid_credentialsmeans thex-client-idis missing or doesn't match thex-api-key, orx-api-keywas sent with a mixed-case name such asX-Api-Key(see Required headers).403withcode: restricted_accessmeans thex-client-idisn't recognized or isn't authorized for the resource, orx-client-idwas sent with a mixed-case name such asX-Client-Id(see Required headers).- When the envelope is present,
codeis stable and safe to branch on; thedetailmessage is human-readable and may change.
In every case, verify you are sending both x-api-key and x-client-id, with lowercase header names and the values Propelus shared with you.
See the full list of error codes in the Errors reference.
Keeping credentials safe
- Never ship keys to a browser or mobile client. Call the Propelus API only from your backend; a key embedded in client-side code is exposed to anyone who loads the page.
- Store keys in a secret manager or environment variables, not in source control.
- Rotate a key immediately if it is exposed. Contact support@propelus.com to rotate credentials.