Jobiflow LogoAPI Docs

Errors

HTTP status codes, error response format, and error codes

Errors

The Jobiflow API uses conventional HTTP status codes and returns a consistent JSON error body on every failure.


HTTP Status Codes

CodeMeaning
200 OKRequest succeeded
201 CreatedResource successfully created
204 No ContentRequest succeeded; no body returned (e.g. DELETE)
400 Bad RequestThe request body or parameters are invalid
401 UnauthorizedMissing, invalid, or expired API key / token
403 ForbiddenValid credentials but insufficient scope
404 Not FoundResource does not exist or does not belong to your company
409 ConflictState conflict (e.g. trying to publish an already-active listing)
422 Unprocessable EntitySemantically invalid input (validation failed)
429 Too Many RequestsRate limit exceeded
500 Internal Server ErrorUnexpected server error; contact support

Error Response Format

All error responses follow the same JSON structure:

{
  "status": 422,
  "error": "VALIDATION_ERROR",
  "message": "Request validation failed",
  "timestamp": "2026-05-17T12:00:00Z",
  "path": "/public/v1/job-listings",
  "details": [
    {
      "field": "position",
      "message": "must not be blank"
    }
  ]
}
FieldDescription
statusHTTP status code (mirrors the response status)
errorMachine-readable error code (see below)
messageHuman-readable description
timestampISO-8601 timestamp of when the error occurred
pathRequest path that produced the error
details(optional) Array of field-level validation errors

Error Codes

CodeStatusDescription
UNAUTHORIZED401No credentials provided, or the token/key is invalid
TOKEN_EXPIRED401The API key or OAuth token has expired
KEY_REVOKED401The API key was revoked
FORBIDDEN403Credentials are valid but the required scope is missing
NOT_FOUND404The requested resource could not be found
VALIDATION_ERROR422One or more input fields failed validation
CONFLICT409The operation conflicts with the current resource state
RATE_LIMITED429Too many requests; back off and retry
INTERNAL_ERROR500Unexpected server-side failure

Handling Errors

const res = await fetch('https://api.jobiflow.com/public/v1/job-listings', {
  headers: { 'X-API-Key': process.env.JOBIFLOW_API_KEY },
});

if (!res.ok) {
  const err = await res.json();
  console.error(`[${err.error}] ${err.message}`);

  if (res.status === 422 && err.details) {
    for (const d of err.details) {
      console.error(`  - ${d.field}: ${d.message}`);
    }
  }

  throw new Error(err.message);
}

const { data, pagination } = await res.json();

Rate Limits

The API enforces rate limits per API key. When exceeded, you receive 429 Too Many Requests with a Retry-After header indicating how many seconds to wait before retrying.

HTTP/1.1 429 Too Many Requests
Retry-After: 30

Default rate limits:

TierRequests / minute
Standard300
Pro1 000

Contact support to discuss elevated limits for high-volume integrations.

On this page