Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.thehog.ai/llms.txt

Use this file to discover all available pages before exploring further.

When a request fails, The Hog API always returns a structured JSON body — never a bare string or an empty response. Every error body follows the same shape so you can handle failures consistently in your code, and every error includes a requestId you can share with support to pinpoint the exact failed call.

Standard error body

{
  "statusCode": 400,
  "error": "Bad Request",
  "message": "Validation failed",
  "path": "/api/people/search",
  "requestId": "3f7a1c2e-88b4-4d0e-a1f5-0c9e2b3d7f4a",
  "timestamp": "2025-03-12T12:00:00.000Z",
  "errors": [
    { "property": "query", "message": "query must be a string" }
  ]
}
FieldTypeDescription
statusCodeintegerHTTP status code
errorstringShort HTTP reason phrase (e.g. "Bad Request")
messagestringHuman-readable summary of the failure
pathstringThe request path that triggered the error
requestIdstringUUID for this request — include this when contacting support
timestampstringISO 8601 timestamp of when the error occurred
errorsarrayPresent only on 400 validation failures — see below

Validation errors (400)

When your request body fails validation, the top-level message is "Validation failed" and the errors array lists every field that failed, along with a plain-English description of the constraint that was violated.
// HTTP 400 — validation failure
{
  "statusCode": 400,
  "error": "Bad Request",
  "message": "Validation failed",
  "path": "/api/people/search",
  "requestId": "3f7a1c2e-88b4-4d0e-a1f5-0c9e2b3d7f4a",
  "timestamp": "2025-06-10T09:14:33.000Z",
  "errors": [
    { "property": "query", "message": "query must be a string" },
    { "property": "limit", "message": "limit must not be greater than 100" }
  ]
}
Each object in the errors array has two fields:
FieldTypeDescription
propertystringThe request body field that failed
messagestringWhat constraint was violated
Fix every entry in errors before retrying — the request will continue to fail until all validation rules pass.

HTTP status codes

Your request body contains missing or invalid fields. The errors array lists every violation. Fix each field and retry.
{
  "statusCode": 400,
  "error": "Bad Request",
  "message": "Validation failed",
  "path": "/api/companies/search",
  "requestId": "3f7a1c2e-88b4-4d0e-a1f5-0c9e2b3d7f4a",
  "timestamp": "2025-06-10T09:14:33.000Z",
  "errors": [
    { "property": "filters.headcount", "message": "headcount must be a positive number" }
  ]
}
No Authorization header was provided, or the token is expired, malformed, or issued by a different application. Ensure your token is valid and not expired.
{
  "statusCode": 401,
  "error": "Unauthorized",
  "message": "Invalid or missing authentication token",
  "path": "/api/companies/search",
  "requestId": "3f7a1c2e-88b4-4d0e-a1f5-0c9e2b3d7f4a",
  "timestamp": "2025-06-10T09:14:33.000Z"
}
Your organization does not have enough credits to complete the request. Top up your balance or reduce the scope of the request (use an /estimate endpoint to preview cost first).
{
  "statusCode": 402,
  "error": "Payment Required",
  "message": "Insufficient credits to complete this request",
  "path": "/api/deep-research",
  "requestId": "3f7a1c2e-88b4-4d0e-a1f5-0c9e2b3d7f4a",
  "timestamp": "2025-06-10T09:14:33.000Z"
}
The token is valid but The Hog cannot determine which organization the request belongs to. This usually means the token carries no organization claim. Check your authentication setup and ensure the correct organization is set in your token or API key configuration.
{
  "statusCode": 403,
  "error": "Forbidden",
  "message": "No organization context found in token",
  "path": "/api/people/enrich",
  "requestId": "3f7a1c2e-88b4-4d0e-a1f5-0c9e2b3d7f4a",
  "timestamp": "2025-06-10T09:14:33.000Z"
}
The operation ID or resource you requested does not exist or does not belong to your organization.
{
  "statusCode": 404,
  "error": "Not Found",
  "message": "Operation not found",
  "path": "/api/operations/op_nonexistent",
  "requestId": "3f7a1c2e-88b4-4d0e-a1f5-0c9e2b3d7f4a",
  "timestamp": "2025-06-10T09:14:33.000Z"
}
Your organization has exceeded the allowed request rate. Wait before retrying and use exponential backoff. See Rate Limits for details.
{
  "statusCode": 429,
  "error": "Too Many Requests",
  "message": "Rate limit exceeded. Please slow down and retry.",
  "path": "/api/operations/op_01HZ9K2QW3RV4M5N6P7Q8R9S0T",
  "requestId": "3f7a1c2e-88b4-4d0e-a1f5-0c9e2b3d7f4a",
  "timestamp": "2025-06-10T09:14:33.000Z"
}
An unexpected error occurred on The Hog’s servers. The message is intentionally generic in production — no internal details are exposed. These errors are logged automatically. If they persist, contact support with your requestId.
{
  "statusCode": 500,
  "error": "Internal Server Error",
  "message": "An unexpected error occurred",
  "path": "/api/generate",
  "requestId": "3f7a1c2e-88b4-4d0e-a1f5-0c9e2b3d7f4a",
  "timestamp": "2025-06-10T09:14:33.000Z"
}

Quick reference

StatusMeaningRetry?
400Validation failed — fix the errorsNo — fix the request first
401Invalid or missing tokenNo — refresh your credentials
402Insufficient creditsNo — top up your balance
403No organization contextNo — check your token setup
404Resource not foundNo
429Rate limit exceededYes — after exponential backoff
500 / 503Server errorYes — after a short wait

Using requestId for support

Every error body includes a requestId field. When you open a support ticket or file a bug report, always include this value. It maps directly to a specific request in The Hog’s logs, so the support team can retrieve the full context — inputs, provider responses, and timing — without needing you to reproduce the issue.
# The requestId is in the error body AND the X-Request-Id response header
curl -i -X POST https://api.thehog.ai/api/companies/search \
  -H "Authorization: Bearer $THEHOG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "acme"}'

# Look for:  X-Request-Id: 3f7a1c2e-88b4-4d0e-a1f5-0c9e2b3d7f4a