Shared conventions across Tasks and Lumen APIs.
https://api.projecthollow.comhttps://projecthollow.com/lumen/ingesthttps://projecthollow.com/monitoring/ingest is the older URL, kept working for existing integrations.
All endpoints accept and return JSON payloads. Include Content-Type: application/json on all requests carrying a body.
Supply an Idempotency-Key header or an idempotencyKey field in the request body to prevent duplicate processing. Re-submitting a request with an existing idempotency key returns the original record with {"duplicate": true}.
All error responses adhere to a standard error structure:
{ "error": { "code": "RATE_LIMITED", "status": 429, "message": "Rate limit exceeded" } }MISSING_TEXT, MISSING_FIELD, MISSING_ENTRIES, MISSING_POINTS, INVALID_FIELD, INVALID_REQUEST, TOO_MANY_ENTRIES, TOO_MANY_POINTSMISSING_AUTH_HEADER, INVALID_KEY_FORMAT, INVALID_KEY, KEY_REVOKEDACCOUNT_NOT_APPROVED, FORBIDDENNOT_FOUND: target endpoint or record does not exist.CONFLICT: concurrent calls shared an idempotency key before execution finished.PAYLOAD_TOO_LARGE: request body exceeds maximum 256 KiB size limit.RATE_LIMITED or QUOTA_EXCEEDED.