Search docs...

Reference

Error codes

Error codes

This document provides a list of error codes used in the 1099policy API, along with descriptions to help understand their context and usage.

Error codes

1099Policy uses conventional HTTP status codes to indicate the outcome of an API request. Codes in the 2xx range indicate success. Codes in the 4xx range indicate a problem with the request — a missing parameter, a failed validation, or a business rule that prevents the operation. Codes in the 5xx range indicate a problem on our side.

Every error response carries a machine-readable type and code. Branch on those, never on the message string — message wording can change at any time without notice, but a published code will not change without a deprecation period.

The error object

All errors return the same envelope. The param field is present only when the error can be attributed to a specific field in your request.

http
HTTP/1.1 422 Unprocessable Entity

{
  "error": {
    "type":       "eligibility_error",
    "code":       "invalid_job_category_code",
    "message":    "No active coverage matches job category jc_rSwUqFfnvm.",
    "param":      "job_category",
    "doc_url":    "https://www.1099policy.com/docs/error-codes#invalid_job_category_code",
    "request_id": "req_8Kx2yQ4mNb"
  }
}
AttributeDescription
typeThe broad category of the error. There are six, listed below. This value is stable and safe to switch on.
codeThe specific error. Use this for logging and for handling individual cases.
messageA human-readable explanation. Intended for your logs and for display to your internal users. Do not parse it.
paramThe request field that caused the error, when the error can be attributed to one.
doc_urlA link to the entry for this code on this page.
request_idThe identifier for this request. Include it when contacting support.

Error types

Every code belongs to exactly one type. If you handle nothing else, handle these six — they tell you what kind of fix is required.

TypeHTTPWhat it means and what to do
authentication_error401We could not authenticate the request. Check your API key or refresh your access token. Do not retry without changing credentials.
permission_error403Your credentials are valid but this operation is not permitted for your account or for this record. Retrying will not help. Contact us if you believe the operation should be available.
invalid_request_error400, 404The request was malformed, missing a required parameter, or referenced a record that does not exist. Fix the request and resend.
conflict_error409The request was well-formed but conflicts with the current state of the record — it already exists, has already been paid, or has already progressed past the point where this change is allowed. Read the current state before retrying.
eligibility_error422The request was well-formed and the records exist, but coverage cannot be issued as requested. This is an underwriting or eligibility outcome, not a bug in your integration. The message names the specific constraint.
api_error500, 503Something went wrong on our side. These are rare. The request is safe to retry with exponential backoff. Contact support with the request_id if it persists.

Error code reference

Codes are grouped by the resource you are working with. Each entry is anchor-linked, so the doc_url in an error response points at the exact row.

Authentication and access

Error codeTypeHTTPDescription
invalid_api_keyauthentication_error401The provided API key is not valid. Ensure you are using a correct key.
auth_token_expiredauthentication_error401The access token has expired. Refresh the token and retry the request.
auth_token_invalidauthentication_error401The access token is malformed or not recognized. Request a new token.
invalid_refresh_tokenauthentication_error401The refresh token is not valid or has already been used. Re-authenticate to obtain a new token pair.
no_tenant_foundauthentication_error401No account is associated with these credentials.
account_disabledauthentication_error401This account is disabled. Contact us to reactivate it.
access_deniedpermission_error403The request was rejected. Your credentials are valid, but this operation is not permitted for your account.
insufficient_permissionspermission_error403You lack the necessary permissions to perform this action.

Requests and platform

Error codeTypeHTTPDescription
bad_requestinvalid_request_error400The request could not be processed due to a client error. Verify the request parameters.
invalid_inputinvalid_request_error400The input data is not valid. Check the data and try again.
resource_not_foundinvalid_request_error404The requested resource could not be located. Check the resource ID and try again.
general_errorapi_error500An unspecified error occurred. Please try again later or contact support.
internal_errorapi_error500An unexpected error occurred on our side. The request is safe to retry. Contact support with the request ID if it persists.
database_operational_errorapi_error503A database issue occurred. Please try again later or contact support.

Contractors

Error codeTypeHTTPDescription
invalid_contractor_idinvalid_request_error400The contractor ID is not valid. Verify the contractor ID and try again.
duplicate_emailconflict_error409You already have a contractor with that same email address in the system. Use a different email address or modify the existing contractor record.
contractor_blocked_for_writespermission_error403This contractor record is temporarily locked and cannot be modified.

Entities

Error codeTypeHTTPDescription
invalid_entity_idinvalid_request_error400The entity ID is not valid. Verify the entity ID and try again.

Jobs and job categories

Error codeTypeHTTPDescription
invalid_job_idinvalid_request_error400The job ID is not valid. Verify the job ID and try again.
missing_job_category_codeinvalid_request_error400The job category code is missing. You can find your approved list of job codes on your dashboard.
invalid_job_category_codeeligibility_error422No active coverage with matching job category code. Check that the job is assigned a job category code with active coverage.
job_category_not_approvedeligibility_error422The job category code has not been approved, which is required before proceeding. Contact us if you need help getting the job category code approved.
job_is_usedconflict_error409The job ID provided is currently being used for an assignment with active coverage. You'll need to create a new job ID to continue.
invoice_existsconflict_error409You can't edit a job after the invoice for that job is created. Instead create a new job or, if you need to update amount earned for the job, you can modify the invoice for that job.

Quotes

Error codeTypeHTTPDescription
invalid_quote_idinvalid_request_error400The quote ID is not valid. Verify the quote ID and try again.
ineligible_stateeligibility_error422The state provided is not a state where we offer coverage.
contractor_has_matching_policyconflict_error409The contractor already has an active policy that matches the quote that you're trying to create. Since duplicate coverage is not allowed, you'll want to create a new assignment and attach that to the existing policy or update your quote POST request.
policy_already_existsconflict_error409You can no longer edit the quote after coverage for that quote is issued. Instead you'll want to create a new quote.
cant_update_create_new_quoteconflict_error409This quote can no longer be updated. Create a new quote instead.

Policies

Error codeTypeHTTPDescription
invalid_policy_idinvalid_request_error400The policy ID is not valid. Verify the policy ID and try again.
no_active_policyeligibility_error422No active policy was found for the provided contractor ID. Check that the contractor has an active policy.
custom_applications_disabledpermission_error403The create policy endpoint is exclusively for custom policy application workflows. Contact us if you need to customize the insurance policy application.

Assignments

Error codeTypeHTTPDescription
invalid_assignment_idinvalid_request_error400The assignment ID is not valid. Verify the assignment ID and try again.
effective_date_invalidinvalid_request_error400The effective date is not valid. This can occur if the effective coverage date is set in the past.
end_date_invalidinvalid_request_error400The end date is not valid. This can occur if the coverage end date is set before the effective date or is more than one year from the effective date.
invalid_coverage_typeeligibility_error422One or more coverage types are not valid. Supported coverage types are workers-comp and general, and the type must also be active for your account.
ineligible_policyeligibility_error422The policy provided cannot cover this assignment.
assignment_already_startedconflict_error409Cannot cancel an assignment after its start date.
assignment_already_endedconflict_error409The assignment has already ended and can no longer be modified.
assignment_cancelledconflict_error409The assignment has been cancelled and can no longer be modified.
invoice_already_paidconflict_error409You can't edit the assignment after the invoice for that assignment has already been paid in full. Contact us if you need additional help.
use_assignments_extendconflict_error409Use the assignment extend endpoint to change an assignment's end date.

Invoices

Error codeTypeHTTPDescription
invalid_invoice_idinvalid_request_error400The invoice ID is not valid. Verify the invoice ID and try again.
missing_jobinvalid_request_error400The job ID is missing. You'll need to provide the job ID to continue.
missing_contractorinvalid_request_error400The contractor ID is missing. You'll need to provide the contractor ID to continue.
invalid_paycycle_startdateinvalid_request_error400The pay cycle start date is not valid. Check the date format and try again.
invalid_paycycle_enddateinvalid_request_error400The pay cycle end date is not valid. Check the date format and try again.
invalid_refund_amountinvalid_request_error400The refund amount is not valid. Check that it does not exceed the amount available to refund.
invoice_uneditable_already_existsconflict_error409The invoice doesn't need to be updated since an invoice with the same gross pay for this job already exists.
agency_pay_invoice_existsconflict_error409An agency-pay invoice already exists for this job.

Certificates

Error codeTypeHTTPDescription
missing_contractor_idinvalid_request_error400The contractor ID is missing. Please provide the necessary contractor ID.
missing_certificateinvalid_request_error400The certificate is missing. Please provide the necessary certificate.
missing_certificatesinvalid_request_error400No certificates were included in the bulk request.
missing_unstructured_requirementinvalid_request_error400The bulk request is missing an unstructured insurance requirement.
no_insurance_requirement_foundeligibility_error422No insurance requirement found. We'll need at least one set of insurance requirements on file in order to review the certificate provided.
invalid_mime_typeinvalid_request_error400The MIME type is not valid. Ensure the MIME type is supported.
invalid_file_typeinvalid_request_error400The file type is not supported.
invalid_file_sizeinvalid_request_error400The file size is not valid. Ensure the file size is within the allowed limits.

Application and payment sessions

Error codeTypeHTTPDescription
invalid_session_idinvalid_request_error400The session ID is not valid. Verify the session ID and try again.
invalid_sessioninvalid_request_error400The insurance application session is not valid.
session_expiredconflict_error409The session has expired. Please start a new session.
application_already_completeconflict_error409The application process is already complete. No further action is needed.
complete_application_existsconflict_error409A completed application already exists for this contractor.
invalid_return_urlinvalid_request_error400The return URL provided for the hosted payment session is not valid.
session_not_pendingconflict_error409The hosted payment session is no longer pending and cannot be modified.

Webhooks

Error codeTypeHTTPDescription
invalid_webhook_endpoint_idinvalid_request_error400The webhook endpoint ID is not valid. Verify the endpoint ID and try again.
invalid_event_idinvalid_request_error400The webhook event ID is not valid. Verify the webhook event ID and try again.
invalid_webhook_signatureauthentication_error401The webhook signature could not be verified. Check that you are using the correct signing secret and the raw, unparsed request body. See Using webhooks.

Eligibility reason codes

Reason codes are not error codes. They appear on a successful 200 response from the assignment eligibility check when the assignment is not eligible — that is, when the response body contains "result": false. There is no error envelope and no 4xx status.

Where an eligibility response would otherwise say only that no active policy was found, reason_code names the actual cause, so you can act on it without parsing the message.

json
{
  "result": false,
  "message": "The job category 'Skilled or Intermed Nursing Home' (jc_rSwUqFfnvm) is not
              available for automatic policy issuance in IL. Use a job category that is
              enabled in this state, or contact support to enable this one.",
  "approval_reason": null,
  "reason_code": "job_category_not_rated_in_state"
}

Two behaviours to handle:

  • The reason_code key is optional. It is present only when a specific cause can be identified. On every other ineligible assignment the key is absent entirely, so read it defensively rather than assuming it exists.
  • It applies to the general opt-in path. Assignments whose contractor has no completed general opt-in application for the work state return the standard eligibility message and no reason_code.
Reason codeDescription
job_category_missingThe job has no job category assigned, so a policy cannot be issued automatically. Assign a job category to the job before creating the assignment.
job_category_not_auto_issuableThe job category is not available for automatic policy issuance. Use a job category that is enabled for automatic issuance, or contact us to enable this one.
job_category_not_rated_in_stateThe job category is not available for automatic policy issuance in the assignment's work state. Use a job category that is enabled in this state, or contact us to enable this one.
work_state_missingThe job has no work state, so a policy cannot be issued automatically. Add an address with a two-letter state to the job or to the contractor.

Changes to this page

Published codes are stable. When a code is renamed we return both the old and the new value for at least 90 days before retiring the old one, and note it here.

DateCodeChange
2026-08-20contract_has_matching_policyCorrected to contractor_has_matching_policy. The former was a documentation error and was never returned by the API.
2026-08-20reason_codeAdded the eligibility reason codes section covering job_category_missing, job_category_not_auto_issuable, job_category_not_rated_in_state, and work_state_missing.
2026-08-20—Added the error object, error types, and HTTP status columns. Documented 24 codes that were previously returned but not listed.

Was this page helpful?

Yes

No

Was this page helpful?

Yes

No

Work classification

Overview

© Copyright 2026. All rights reserved.

© Copyright 2026. All rights reserved.

© Copyright 2026. All rights reserved.

© Copyright 2026. All rights reserved.