Crowdee
API Reference

Error Codes

HTTP status codes, error response shape, and how to handle common errors.

All API errors return a JSON body with a consistent structure. Inspect the code field for machine-readable identification and message for a human-readable description of what went wrong.

Error Response Shape

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "pipeline_id is required",
    "details": {
      "field": "pipeline_id"
    }
  }
}

The details object is present on validation and enrichment errors and provides field-level context. It is absent on errors where no additional detail is available (e.g. INTERNAL_ERROR).

HTTP Status Codes

StatusCodeMeaning
400BAD_REQUESTRequest body is malformed or missing required fields
401UNAUTHORIZEDMissing or invalid authentication credential
402PAYMENT_REQUIREDInsufficient organization balance
403FORBIDDENValid auth but insufficient permissions, or module not enabled
404NOT_FOUNDResource does not exist or is not accessible to your org
409CONFLICTResource already exists (e.g. member already invited)
410GONEResource was deleted or invitation has expired
422UNPROCESSABLE_ENTITYValidation error (e.g. enrichment not complete, missing context key)
429TOO_MANY_REQUESTSRate limit exceeded
500INTERNAL_ERRORServer-side error; retry with exponential back-off

Common Error Scenarios

ErrorStatusHow to fix
File enrichment not complete422Poll GET /v2/projects/{id}/files/{fileId} until enrichmentStatus: "completed"
Missing required context key422Check the pipeline's requiredContextKeys; add the missing keys to your run request
Module not enabled403Contact Crowdee to enable content_verification or crowdsourcing for your org
Insufficient balance402Top up via Settings → Billing; check current balance on GET /v2/organizations/{orgId}
Invitation expired410Re-send the invitation via POST /v2/organizations/{orgId}/invite
Resource not found404Confirm the ID belongs to your organization; IDs from other orgs are treated as non-existent
Duplicate invite409The email address already has a pending invitation or is an existing member

Enrichment error example

If you attempt to start a run before enrichment completes, you receive:

{
  "error": {
    "code": "UNPROCESSABLE_ENTITY",
    "message": "File enrichment is not complete",
    "details": {
      "fileId": "file_xyz789",
      "enrichmentStatus": "running"
    }
  }
}

Missing context key example

{
  "error": {
    "code": "UNPROCESSABLE_ENTITY",
    "message": "Required context key 'claimed_source_url' is missing",
    "details": {
      "requiredKeys": ["claimed_source_url", "claimed_publication_date"],
      "providedKeys": ["claimed_publication_date"]
    }
  }
}

Retrying

StatusSafe to retry?Strategy
429YesWait for Retry-After seconds, then retry
500YesExponential back-off starting at 1 second; give up after 5 attempts
502 / 503YesSame as 500
400NoFix the request body before retrying
401NoRe-authenticate; do not retry with the same credential
403NoCheck permissions or contact support
404NoVerify the resource ID
422NoFix the validation error (e.g. wait for enrichment to finish)

The Retry-After header is included in all 429 responses and contains the number of seconds until the rate-limit window resets. Use this value rather than a fixed delay to avoid unnecessary waiting.

How is this guide?

© 2026 Crowdee GmbH. All rights reserved.

On this page