RemakeCV

Errors and status codes

Every RemakeCV API error returns a code, a human-readable message and a request_id. Full reference of every error code the API can return.

API errors return an object containing a machine-readable code, a human-readable message and a request_id. Branch your logic on code rather than message, since messages may be reworded. Always log the request_id — it is what support needs to trace a specific failed call.

Error shape

json
{
  "error": {
    "code": "validation_error",
    "message": "File exceeds maximum size of 10MB",
    "request_id": "3f9a1c72-8b04-4e51-9d2a-77c0e5b1a934"
  }
}

The same identifier is returned in the X-Request-Id response header on every response, successful or not.

Every error code

StatusCodeMeaningWhat to do
400validation_errorRequest was malformed, or the file exceeded the size limitFix the request; the message names the specific problem
400upload_requiredNo file was included on a request that needs oneSend the file in the file multipart field
400acting_user_requiredacting_user_email was not suppliedAdd it
400storage_requiredThe operation needs CV storage, which is disabledEnable CV storage for your company
401unauthorizedAuthorization header missing or malformedSend Authorization: Bearer <key>
401invalid_api_keyKey not found, inactive, revoked or expiredCheck the key; request a replacement if needed
403api_disabledPublic API not enabled for this companyEmail support@remakecv.com
403cv_storage_disabledCV storage is off, so stored CVs cannot be listed or fetchedEnable storage, or use the download_url returned at processing time
403forbiddenThe key is not permitted to access this resourceCheck the resource belongs to your company
404not_foundThe requested CV does not existCheck the cvId
404company_not_foundThe key's company no longer existsContact support
404acting_user_invalidThe acting user is not a member of this companyUse a valid consultant's email
429rate_limit_exceededToo many requestsBack off and retry — see rate limits
500internal_errorSomething failed on our sideRetry once; if it persists, send us the request_id
400 / 500process_failedProcessing failed — also how credit rejections surfaceRead message
400 / 500storage_failedProcessed, but could not be storedThe download_url may still work

Which errors are worth retrying?

CodeRetry?
rate_limit_exceededYes, with exponential backoff — costs nothing
internal_errorOnce, then escalate
process_failed / storage_failedCautiously — these can occur after a credit was spent, so each retry may cost another
Everything elseNo — retrying will produce the same result
Warning:

Do not retry 4xx errors in a loop. They indicate a problem with the request, so a retry fails identically while consuming your rate-limit budget.

Do errors consume credits?

Usually not. Validation failures, authentication failures and rate limits are rejected before any processing, so they cost nothing.

Two exceptions both spend a credit, because they occur after the CV has already been processed:

ErrorWhy the credit is gone
400 storage_requiredCV storage is disabled for your company. The pipeline runs, the credit is deducted, and then the storage check fails
400/500 storage_failedThe CV parsed, but storing it failed

Neither response includes a download_url — there is no way to recover the file from them.

Warning:

If CV storage is disabled for your company, every POST /cvs/process call spends a credit and returns an error. Confirm storage is enabled before you begin integrating.

Credit rejections come back as process_failed

There is no dedicated credit error code. RemakeCV returns 400 process_failed with message set to either No credits left (company balance exhausted) or credit limit reached (a per-user or shared-pool cap). Branch on message for these two, since the remedies differ — see credits explained.

What should I log?

At minimum: request_id, code, HTTP status, the endpoint, and the acting_user_email. That set is enough for support to reconstruct almost any failure without a further round trip.

Frequently asked questions

Should I branch on the code or the message?
Always the code. Messages are written for humans and may be reworded; codes are the stable contract.
What is request_id for?
It uniquely identifies the call in our logs. Include it when contacting support and we can trace exactly what happened. It is also returned in the X-Request-Id response header.
Do failed requests consume credits?
Usually not — validation, auth and rate-limit rejections are free. But storage_required and storage_failed occur after processing, so those do spend a credit.

Related articles

Was this page helpful?

Last updated . Still stuck? Email support@remakecv.com or book a call.