source.yaml

--- basePath: "/api" components: examples: address: line1: 1 Kearny St locality: San Francisco postalcode: 94114 region: CA assignment: contractor: cn_Ehb3bYa effective_date: 1646818364 end_date: 1678334737 job: jb_jsb9KEcTpc policy: pl_WzFRszJhoY assignments: - bind: true certificates: gl_coi_pdf_url: "/bound-policies/prod/gl_coi_pl_wv23Q3lMc1_1691450123.pdf" wc_coi_pdf_url: "/bound-policies/prod/wc_coi_pl_wv23Q3lMc1_1691420903.pdf" contractor: cn_Ehb3bYa created: 1646818364 effective_date: 1646818364 eligible: message: Contractor is pre-approved for insurance coverage., result: true end_date: 1678334737 id: an_TzLQszJmoP job: jb_jsb9KEcTpc policy: pl_WzFRszJhoY cancelled_assignment: cancellation_date: 1678334737 cancellation_reason: client_request cancelled: true certificates: contractor: cn_Ehb3bYa coverage_type: - general - workers-comp effective_date: 1646818364 eligible: message: Contractor is pre-approved for insurance coverage. result: true end_date: 1678334737 id: an_5HviNgc2Br job: jb_jsb9KEcTpc net_rate: 65 policy: pl_WzFRszJhoY category_codes: - category_code: jc_MTqpkbkp6G name: Computer Service or Repair - category_code: jc_5Tqpkbkp6G name: Spokesperson / Influencer certificate: contractor: cn_Ehb3bYa created: 1646818364 filename: certificate_of_insurance.pdf id: ci_abc123 pdf_url: review_results: status: pending updated: 1646818364 certificate_approved: contractor: cn_abc123 created: 1646818000 filename: coi_2024.pdf id: ci_def456 pdf_url: https://storage.example.com/certificates/ci\_def456.pdf review_results: created: 1646818500 id: ca_audit789 status: approved summary: failed: 0 passed: 5 total_rules: 5 status: approved updated: 1646818500 certificate_with_expanded_results: contractor: cn_Ehb3bYa created: 1646818000 filename: coi_2024.pdf id: ci_def456 pdf_url: https://storage.example.com/certificates/ci\_def456.pdf review_results: audit_results: - created: 1646818500 id: car_result1 manually_approved: false message: General aggregate limit meets requirement of $2,000,000 result: pass rule_name: CGL General Aggregate Limit rule_path: coverages.commercial_general_liability.limits.general_aggregate_dollars - created: 1646818500 id: car_result2 manually_approved: false message: Occurrence limit meets requirement of $1,000,000 result: pass rule_name: CGL Occurrence Limit rule_path: coverages.commercial_general_liability.limits.occurrence_limit_dollars created: 1646818500 id: ca_audit789 parsed_certificate_json: certificate_holder: name: Acme Corporation coverages: commercial_general_liability: limits: general_aggregate_dollars: 2000000 occurrence_limit_dollars: 1000000 date: 01/01/2024 status: approved updated: 1646818500 status: approved updated: 1646818500 certificates: - contractor: cn_xyz789 created: 1646818364 filename: certificate_of_insurance.pdf id: ci_abc123 pdf_url: review_results: status: pending updated: 1646818364 - contractor: cn_Ehb3bYa created: 1646818000 filename: coi_2024.pdf id: ci_def456 pdf_url: https://storage.example.com/certificates/ci\_def456.pdf review_results: created: 1646818500 id: ca_audit789 status: approved summary: failed: 0 passed: 5 total_rules: 5 status: approved updated: 1646818500 contractor: address: line1: 1 Kearny St locality: San Francisco postalcode: 94104 region: CA company_name: Acme Co. custom_metadata: campaign: Red Bull email: parker@gmail.com first_name: Joe last_name: Parker phone: 415-474-9088 tax_identification: 12-3456789 contractor_policies: - certificates: gl_coi_pdf_url: "/bound-policies/prod/gl_coi_pl_wv23Q3lMc1_1691450123.pdf" wc_coi_pdf_url: "/bound-policies/prod/wc_coi_pl_wv23Q3lMc1_1691420903.pdf" created: 1646818364 effective_date: 1646818364 expiration_date: 1678334737 id: pl_WzFRszJhoY pdf_url: http://ten99policy.s3.amazonaws.com/1099policy-coi-sample.pdf quote: coverage_type: - general - workers-comp id: qt_5DciVga8Kt quote_json: {} status: active contractors: - address: line1: 150 Wythe Ave locality: Brooklyn postalcode: 11249 region: NY company_name: Mass Repair created: 1646818364 custom_metadata: campaign: Volvo email: fmoss@gmail.com first_name: Fredrick id: cn_Zbe1qTc last_name: Moss phone: 916-579-1243 withhold_premium: false - address: line1: 1 Kearny St locality: San Francisco postalcode: 94104 region: CA company_name: Acme Co. created: 1646818384 custom_metadata: campaign: Red Bull email: parker@gmail.com first_name: Joe id: cn_Ehb3bYa last_name: Parker phone: 415-474-9088 withhold_premium: false coverage_limit: aggregate_limit: 200000000 occurrence_limit: 100000000 entities: - address: line1: One Apple Park Way locality: Cupertino postalcode: 95014 region: CA coverage_limit: aggregate_limit: 200000000 occurrence_limit: 100000000 created: 1646818364 id: en_Ah3tqYn name: Apple, Inc required_coverage: - general - workers-comp - address: line1: 410 Terry Ave N locality: Seattle postalcode: 98109 region: WA coverage_limit: aggregate_limit: 500000000 occurrence_limit: 100000000 created: 1646818386 id: en_Mg5sqSp name: Amazon, Inc required_coverage: - general - professional entity: address: line1: One Apple Park Way locality: Cupertino postalcode: 95014 region: CA coverage_limit: aggregate_limit: 200000000 occurrence_limit: 100000000 name: Apple, Inc required_coverage: - general - workers-comp event: data: created: 1646818364 effective_date: 1646818364 expiration_date: 1678334737 id: pl_WzFRszJhoY object: policy pdf_url: http://ten99policy.s3.amazonaws.com/1099policy-coi-sample.pdf quote: qt_5DciVga8Kt status: active type: policy.active events: - created: 1646818364 data: created: 1646818364 effective_date: 1646818364 expiration_date: 1678334737 id: pl_WzFRszJhoY object: policy pdf_url: http://ten99policy.s3.amazonaws.com/1099policy-coi-sample.pdf quote: qt_5DciVga8Kt status: active id: ev_Q2kA9Nsub9jKcFJqcBSv2u type: policy.active expired_session: cancel_url: https://1099jobcloud.com/1099policy/cancel expired: true quote: qt_5DciVga8Kt success_url: https://1099jobcloud.com/1099policy/success invoice: contractor: cn_Ehb3bYa gross_pay: 250000 job: jb_jsb9KEcTpc paycycle_enddate: 1678334737 paycycle_startdate: 1646818364 job: category_code: jc_MTqpkbkp6G custom_metadata: campaign: Volvo description: Install fiber optic cable from back to the front of the store. entity: en_Ah3tqYn name: Field technician wage: 15000 wage_type: flatfee years_experience: 10 jobs: - category_code: jc_MTqpkbkp6G created: 1646818364 custom_metadata: campaign: Volvo description: BMW engine diagnostics and troubleshooting. entity: en_C9Z2DmfHSF id: jb_jsb9KEcTpc name: Mechanic technician wage: 1500 wage_type: flatfee years_experience: 5 policies: - certificates: gl_coi_pdf_url: "/bound-policies/prod/gl_coi_pl_wv23Q3lMc1_1691450123.pdf" wc_coi_pdf_url: "/bound-policies/prod/wc_coi_pl_wv23Q3lMc1_1691420903.pdf" created: 1646818364 effective_date: 1646818364 expiration_date: 1678334737 id: pl_WzFRszJhoY pdf_url: http://ten99policy.s3.amazonaws.com/1099policy-coi-sample.pdf quote: qt_5DciVga8Kt status: active policy: effective_date: 1646818364 expiration_date: 1678334737 quote: qt_5DciVga8Kt quote: contractor: cn_Ehb3bYa coverage_type: - general - workers-comp job: jb_jsb9KEcTpc quotes: - contractor: cn_Ehb3bYa coverage_type: - general - workers-comp created: 1646818364 eligible: true gl_net_rate: 20 id: qt_5DciVga8Kt job: jb_jsb9KEcTpc net_rate: 65 quote_json: gl: net_rate: 20 risk_purchasing_group_fee: stamping_fee: wc: net_rate: 45 wc_net_rate: 45 session: cancel_url: https://1099jobcloud.com/1099policy/cancel quote: qt_5DciVga8Kt success_url: https://1099jobcloud.com/1099policy/success sessions: - cancel_url: https://1099jobcloud.com/1099policy/cancel created: 1646818364 expired: false id: ias_01FZCHXE7KNQHE1T3S8AXG2QZE quote: qt_5DciVga8Kt step: final_review success_url: https://1099jobcloud.com/1099policy/success url: http://apply.1099policy.com?... webhook: created: 1646818364 description: Webhook for contractor insurance application events. id: whe_KPGc5vEZdvoETu39BNwu2Z url: https://example.com/my/webhook/endpoint webhook_endpoint: description: Webhook for contractor insurance application events. url: https://example.com/my/webhook/endpoint webhook_endpoints: - created: 1646818364 description: Webhook for contractor insurance application events. id: whe_KPGc5vEZdvoETu39BNwu2Z url: https://example.com/my/webhook/endpoint webhooks: - created: 1646818364 description: Webhook for contractor insurance application events. id: whe_KPGc5vEZdvoETu39BNwu2Z url: https://example.com/my/webhook/endpoint schemas: Address: properties: country: description: 2-letter country code. example: 'null' format: nullable: true type: string line1: description: Address line 1 (Street address/PO Box). example: 92 Geary St type: string line2: description: Address line 2 (Apartment/Suite/Unit/Building). example: 'null' format: nullable: true type: string locality: description: City/District/Suburb/Town/Village. example: San Francisco type: string postalcode: description: ZIP or postal code. example: 94114 type: string region: description: 2-letter state code. example: CA type: string type: object Assignment: description: "To secure coverage for independent contractors that have previously \ had a policy issued through the 1099Policy platform, you create an `Assignment` object. \n\nIndependent contractors with an existing insurance policy procured \ using the 1099Policy platform have the option to receive per-job-assignment insurance coverage without having to complete additional insurance applications, provided certain eligibility criteria are met. \n\nYou can find the result of the eligibility check in the API response. Eligiblity is determined by parameters provided, including `job` and `contractor`. In particular, we look to see if the job `category_code` is the same as previously approved and the time since the independent contractor completed their insurance application.\n\n1099Policy automatically charges the independent contractor's credit card on file, if a credit card exists and `bind` is `true`. 1099Policy first notifies the contractor via email and then charges the contractor the premium amount due 24hrs later." properties: bind: default: true description: Indicates whether to start the process of binding coverage, which includes notifying and subsequently charging the independent contractor for the premium amount due. Defaults to `true`. When false, 1099Policy does not notify or schedule a charge. Note that the independent contractor will not be issued coverage if bind is set to `false`. certificates: allOf: - "$ref": "#/components/schemas/CertificateUrls" - type: object contractor: description: ID of the contractor. example: cn_Ehb3bYa type: string coverage_type: description: 'An array of coverage types that can include one or more of the following insurance coverage values: `general`, `professional` and `workers-comp`. If provided, coverage type is factored into the eligibility determination (i.e., does contractor have an active `workers-comp` policy, etc). Defaults to the coverage types of the most recent active policy if `coverage_type` is not provided.' example: - general - workers-comp items: enum: - general - professional - workers-comp type: string type: array created: allOf: - "$ref": "#/components/schemas/Created" effective_date: description: The job assignment start date, measured in seconds since the Unix epoch. example: 1646818364 format: int64 type: integer eligible: allOf: - "$ref": "#/components/schemas/Eligible" - description: Indicates whether a contractor is elgible for pre-approved insurance or not based on their most recent insurance application. type: object end_date: description: The projected job assignment end date, measured in seconds since the Unix epoch. example: 1678334737 format: int64 type: integer id: allOf: - "$ref": "#/components/schemas/Id" example: an_5HviNgc2Br job: description: ID of the job that the contractor intends to accept. example: jb_jsb9KEcTpc type: string net_rate: description: |- The amount of money the 1099 contractor pays in premium per every $100 earned.

A positive integer representing the premium owed per $100 earned. The `net_rate` is stored in cents (e.g., 48 represents $0.48). example: 65 readOnly: true type: integer policy: description: ID of the policy that you want attached to the assignment. Defaults to the most recent active policy with a matching job category code, work state and contractor home state. example: pl_WzFRszJhoY type: string type: object CategoryCodes: description: The job category code object represents the pre-approved job category name and unique code that you receive when you onboard onto 1099Policy. Use this read-only endpoint to get your full list of the job category names and codes that your organization is pre-approved to use. properties: category_code: allOf: - "$ref": "#/components/schemas/Id" example: jc_MTqpkbkp6G name: description: The name of the job category code. example: Spokesperson / Influencer type: string type: object Certificate: description: A Certificate object represents a Certificate of Insurance (COI) document that a contractor has provided. The certificate is processed asynchronously to evaluate it against your organization's insurance requirements. properties: contractor: description: The ID of the contractor associated with this certificate. example: cn_xyz789 type: string created: allOf: - "$ref": "#/components/schemas/Created" description: Time at which the certificate was uploaded. filename: description: The original filename of the uploaded PDF. example: certificate_of_insurance.pdf type: string id: allOf: - "$ref": "#/components/schemas/Id" description: Unique identifier for the certificate. example: ci_abc123 pdf_url: description: URL to access the certificate PDF. This will be `null` until the certificate has been processed and stored. example: https://storage.example.com/certificates/ci\_abc123.pdf nullable: true type: string review_results: description: Review results from the certificate evaluation. This will be `null` until processing completes. Use `expand[]=review_results` to include abbreviated results, or `expand[]=review_results.full` for complete details. nullable: true properties: audit_results: description: Detailed results for each insurance requirement evaluation (expanded format only). items: properties: created: description: Timestamp when this result was created. type: integer id: example: car_result123 type: string manually_approved: description: Whether this result was manually approved. type: boolean message: description: Human-readable message about the evaluation result. type: string result: description: Whether this requirement passed or failed. enum: - pass - fail type: string rule_name: description: Human-readable name of the rule. example: CGL Limits type: string rule_path: description: The path to the rule being evaluated. example: coverages.commercial_general_liability.limits type: string type: object type: array created: description: Timestamp when the audit was created. type: integer id: description: The ID of the certificate audit. example: ca_audit123 type: string parsed_certificate_json: description: Full parsed certificate data extracted from the PDF (expanded format only). Contains structured data including coverages, limits, dates, and parties. type: object status: description: The final evaluation status. enum: - pending - processing - approved - flagged - denied - error type: string summary: description: Summary of rule evaluation (abbreviated format only). properties: failed: description: Number of requirements that failed. example: 0 type: integer passed: description: Number of requirements that passed. example: 5 type: integer total_rules: description: Total number of insurance requirements evaluated. example: 5 type: integer type: object updated: description: Timestamp when the audit was last updated. type: integer type: object status: description: 'The current processing status of the certificate. Status transitions: `pending` → `processing` → (`approved` | `flagged` | `denied` | `error`). Use polling or webhooks to monitor status changes.' enum: - pending - processing - approved - flagged - denied - error example: pending type: string updated: allOf: - "$ref": "#/components/schemas/Created" description: Time at which the certificate was last updated. type: object CertificateUrls: description: URLs to the certificates of insurance for each of the types of coverage issued to the contractor for the specific job assignment. properties: gl_coi_pdf_url: description: The general liability certificate of insurance PDF URL. example: "/bound-policies/prod/gl_coi_pl_wv23Q3lMc1_1691450123.pdf" type: string wc_coi_pdf_url: description: The workers compensation certificate of insurance PDF URL. example: "/bound-policies/prod/wc_coi_pl_wv23Q3lMc1_1691420903.pdf" type: string readOnly: true type: object Contractor: description: A `Contractor` object represents the contractors that can accept one or more jobs on your platform. The API allows you to create, delete, and update contractors. You can retrieve individual contractors as well as a list of all contractors. properties: address: allOf: - "$ref": "#/components/schemas/Address" - description: The contractor's home address. type: object company_name: description: The contractor's business name. example: Acme Co. nullable: true type: string created: allOf: - "$ref": "#/components/schemas/Created" custom_metadata: description: Set of key-value pairs that you can attach to the contractor object. Used for storing additional information in a structured format. Individual keys can be unset by posting an empty value to them. Pass an empty value, e.g. {}, to custom_metadata to unset all keys. example: campaign: Red Bull type: object email: description: The contractor's email address. example: parker@gmail.com type: string first_name: description: The contractor's first name. example: Joe type: string id: allOf: - "$ref": "#/components/schemas/Id" example: cn_Ehb3bYa last_name: description: The contractor's last name. example: Parker type: string middle_name: description: The contractor's middle name. example: 'null' format: nullable: true type: string phone: description: The contractor's phone number. example: 415-474-9088 type: string withhold_premium: default: false description: 'This indicates whether the contractor is paying premium directly with their credit card (i.e., `false`) or if the contractor has given the platform that''s integrating with 1099Policy permission to withhold the premium payment from their wages and pay the premium on the contractor''s behalf (i.e., `true`). Defaults to `false`. ' type: object Coverage: description: 'An array of coverage types that can include one or more of the following insurance coverage values: `general`, `professional`, `workers-comp`, `media`, and `cyber`.' example: - general - workers-comp items: enum: - general - professional - workers-comp - media - cyber type: string type: array Created: description: Time at which the object was created. Measured in seconds since the Unix epoch. example: 1646818364 format: int64 readOnly: true type: integer Eligible: description: Object with the result of the insurance eligiblity check for a given job assignment. properties: message: description: A message with more detail related to the eligibility result. example: Contractor is pre-approved for insurance coverage. type: string result: description: The result of the insurance eligibility check. example: true type: boolean type: object Entity: description: |- The `Entity` object represents the contracting entity responsible for defining the job descriptions and for hiring contractors.

The API allows you to create, delete, and update entities. You can retrieve individual entities as well as a list of all entities. properties: address: allOf: - "$ref": "#/components/schemas/Address" - description: The contracting entity's address. type: object coverage_limit: allOf: - "$ref": "#/components/schemas/Limit" description: The contracting entity's minimum required coverage limits. created: allOf: - "$ref": "#/components/schemas/Created" id: allOf: - "$ref": "#/components/schemas/Id" example: en_Ah3tqYn name: description: The contracting entity's legal name. example: Apple, Inc type: string required_coverage: description: 'An array of coverage types that can include one or more of the following insurance coverage values: `general`, `professional` and `workers-comp`.' example: - general - workers-comp items: enum: - general - professional - workers-comp type: string type: array type: object Event: description: |- Events are how we communicate notable activity on an independent contractor's insurance application and policy. When an event occurs, we create a new `Event` object. For example, when an insurance application is started, we create an `application.started` event; and when a policy is issued, we create a `policy.active` event.

API resource state changes trigger events. The state of that resource at the time of the change is embedded in the event's data field. For example, an `application.started` event will contain an insurance application `Session` object, and a `policy.active` event will contain a `Policy` object.

Use the events endpoints to retrieve an individual event or a list of events. You can listen for events by registering your server endpoint via the 1099Policy [dashboard](https://dashboard.1099policy.com/webhooks). Our webhooks system send the Event objects directly to your registered endpoint. properties: created: allOf: - "$ref": "#/components/schemas/Created" data: allOf: - "$ref": "#/components/schemas/Object" - description: Object containing data associated with the event. type: object id: allOf: - "$ref": "#/components/schemas/Id" example: ev_1a2b3c4d5e6f type: description: Description of the event (e.g., application.started, policy.active, certificate.approved, certificate.flagged, certificate.denied). example: policy.cancelled type: string type: object Id: description: Unique identifier for the object. readOnly: true type: string Invoice: description: |- Invoices are statements of premium amounts owed by a contractor, based on the contractor's gross pay in the last pay period.

The invoice is used by 1099Policy to determine total amount to charge the contractor's credit card or relay to the gig-platform the premium owed by the contractor to the 1099Policy platform. properties: contractor: description: ID of the contractor. example: cn_Ehb3bYa type: string created: allOf: - "$ref": "#/components/schemas/Created" gross_pay: description: |- The gross pay that the contractor earned in the last pay period.

A positive integer representing the gross pay (e.g., 15000 cents to charge $150.00). The minimum amount is 100 cents US. The maximum amount is 100000000 cents US ($1,000,000). example: 250000 maximum: 100000000 minimum: 100 type: integer id: allOf: - "$ref": "#/components/schemas/Id" example: in_4RviYgc2Wt job: description: ID of the job that the contractor was paid to do. example: jb_jsb9KEcTpc type: string paycycle_enddate: description: Pay period end date. Measured in seconds since the Unix epoch. example: 1678334737 format: int64 type: integer paycycle_startdate: description: Pay period start date. Measured in seconds since the Unix epoch. example: 1646818364 format: int64 type: integer premium_due: description: |- Premium due for pay cycle. Calculated as a percentage of gross pay for the period.

A positive integer representing the premium due (e.g., 150 cents to charge $1.50). The minimum amount is 100 cents US. example: 4325 readOnly: true type: integer purchase_order_number: description: |- The purchase order number for this invoice. Used for dashboard display and agency-pay billing.

By default an invoice inherits this from the `purchase_order_number` set on the job's `custom_metadata` when it is created. It can be overridden per invoice on create or update by sending `purchase_order_number` (an explicit value wins over the job default), or cleared by sending an empty string (`""`). Omitting the field on update leaves the current value unchanged.

When a wage change re-prices an invoice, the replacement invoice keeps this value rather than re-inheriting it from the job.

Precedence: explicit value on the invoice, then the value carried forward when an invoice is re-priced, then the job's `custom_metadata` default. example: '12345678' type: string type: object Job: description: Store representations of the jobs on your platform in `Job` objects. The `Job` is used to, among other things, ensure that the insurance coverage that the 1099Policy platform issues correctly maps to the work that contractors will do. properties: address: allOf: - "$ref": "#/components/schemas/Address" - description: The job address where the work will be done. Exclude if job will be done remotely. type: object category_code: description: |- The category code that 1099Policy creates for a group of similarly classified jobs.

Job category codes are pre-approved by 1099Policy so you can offer contractors insurance to new jobs on your platform in real time.

To generate pre-approved category codes for a group of similarly classified jobs visit the [1099Policy Dashboard](https://dashboard.1099policy.com/jobs). example: jc_MTqpkbkp6G type: string created: allOf: - "$ref": "#/components/schemas/Created" custom_metadata: description: |- Set of key-value pairs that you can attach to the job object. Used for storing additional information in a structured format. Individual keys can be unset by posting an empty value to them. Pass an empty value, e.g. {}, to custom_metadata to unset all keys. The `purchase_order_number` key is recognized: invoices created for this job inherit it as their purchase order number (overridable or clearable per invoice via the invoice endpoints). example: campaign: Red Bull type: object description: description: A description of the job that includes the role, responsibilities and necessary qualifications. example: Install fiber optic cable from back to the front of the store. type: string entity: description: The entity ID for whom the work is being done. example: en_Ah3tqYn type: string id: allOf: - "$ref": "#/components/schemas/Id" example: jb_jsb9KEcTpc name: description: The name of the contractor job role. example: Field technician type: string wage: description: A positive integer representing the total wage (e.g., 1500 cents is $15.00). The minimum wage amount is 100 cents US. The maximum wage amount is 100000000 cents US ($1,000,000). example: 15000 maximum: 100000000 minimum: 100 type: integer wage_type: description: One of `flatfee`, `hourly`, `unit` or `blended`. enum: - flatfee - hourly - unit - blended example: flatfee years_experience: description: The number of years of experience required to be eligible for the job. example: 10 type: integer type: object Limit: properties: aggregate_limit: description: |- The total amount the insurance company will pay for multiple claims over the course of one policy term.

A positive integer representing the aggregate limit expressed in cents (e.g., 100000000 cents to represent $1,000,000). The minimum amount is 1000 cents US. example: 200000000 type: integer occurrence_limit: description: |- The total amount the insurance company will pay per incident during the policy term.

A positive integer representing the per occurrence limit expressed in cents (e.g., 100000000 cents to represent $1,000,000). The minimum amount is 1000 cents US. example: 100000000 type: integer required: - aggregate_limit - occurrence_limit type: object MediaCoverage: description: A MediaCoverage object represents a media liability coverage period that tracks published content and ensures coverage is maintained for the required period. properties: coverage_end_date: description: The date and time when the coverage period ends, measured in seconds since the Unix epoch. example: 1678334737 format: int64 type: integer created: allOf: - "$ref": "#/components/schemas/Created" description: Time at which the media coverage record was created. first_publication_date: description: The date and time when the first content was published, measured in seconds since the Unix epoch. example: 1646818364 format: int64 type: integer id: allOf: - "$ref": "#/components/schemas/Id" description: Unique identifier for the media coverage record. example: mc_abc123xyz is_active: description: Whether the media coverage period is currently active. example: true type: boolean published_content_json: description: Array of published content items. Each item contains publication_date and platform-specific content data. example: [] items: type: object type: array quote_id: description: The ID of the quote associated with this media coverage. example: qt_5DciVga8Kt type: string type: object Object: description: Object containing the API resource relevant to the event. For example, an `policy.active` event will have a full policy object as the value of the object key. readOnly: true type: object Pagination: description: Pagination is currently available for the list `events` API, and takes the `page` query parameter. properties: next: description: A cursor for use in pagination. The numeric value used to fetch the next result set. example: 0 type: integer page: description: The current page returned in the response. example: 1 type: integer perPage: description: The number of results returned per page. example: 20 type: integer prev: description: A cursor for use in pagination. The numeric value used to fetch the previous result set. example: 0 type: integer total: description: The total number of objects returned by the query. example: 3 type: integer totalPage: description: The total number of pages to choose of available paginated results. example: 1 type: integer type: object PaymentSession: description: A payment session is a single-use, time-boxed flow that lets one of your contractors add or update a credit card on a secure page hosted by 1099Policy, then return to a URL you control. The session is created on your server, consumed by the contractor's browser via a one-time expiring link, and its outcome is delivered back to your server via a signed webhook. properties: cancelled_at: description: Time at which the session was cancelled by you or by the contractor. Null unless `status` is `cancelled`. Measured in seconds since the Unix epoch. format: int64 nullable: true readOnly: true type: integer completed_at: description: Time at which the session reached `completed`. Null unless the contractor successfully saved a card. Measured in seconds since the Unix epoch. example: 1713369924 format: int64 nullable: true readOnly: true type: integer contractor_id: description: Public ID of the contractor the session is scoped to. example: cn_Ehb3bYa type: string created: allOf: - "$ref": "#/components/schemas/Created" expires_at: description: Time at which a pending session expires and becomes unusable. Measured in seconds since the Unix epoch. Default lifetime is 30 minutes from creation. example: 1713371724 format: int64 readOnly: true type: integer id: allOf: - "$ref": "#/components/schemas/Id" example: hps_xyz123abc processor: description: Identifier for the payment provider backing this session. `checkout` is the default and currently the only supported value. Reserved so future providers can be added without a breaking schema change. enum: - checkout example: checkout readOnly: true type: string return_url: description: HTTPS URL the contractor is redirected to when the flow terminates. The host must be in your organization's configured `hosted_flow_allowed_redirect_hosts` allowlist; exact host match only, no wildcards. URLs with credentials (`user:pass@`) or fragments are rejected at creation time. example: https://app.yourplatform.com/settings/billing/return type: string status: description: Current status of the session. `pending` is the only state in which the URL can be used; the other three are terminal. enum: - pending - completed - cancelled - expired example: pending readOnly: true type: string url: description: The single-use URL to redirect the contractor to. Shown exactly once, at session creation. The token embedded in this URL is a secret — do not log it, do not persist it, do not share it beyond the contractor's browser. example: https://my.1099policy.com/payment/setup/live\_ readOnly: true type: string type: object Policy: description: |- To procure contractor insurance, you create a `Policy` object. You can retrieve individual policies as well as list all policies. Policies are identified by a unique, random ID.

Important note: Creating a policy via the POST endpoint is an exception for most integrations. A policy object is created automatically when a contractor completes their insurance application (see Session API). Contact us if you plan to use the policy POST endpoint. properties: certificates: allOf: - "$ref": "#/components/schemas/CertificateUrls" - type: object created: allOf: - "$ref": "#/components/schemas/Created" effective_date: description: A timestamp used to determine the insurance policy start date. Measured in seconds since the Unix epoch. The default effective_date is the next day. example: 1646818364 format: int64 type: integer expiration_date: description: A timestemp used to determine the insurance policy end date. Measured in seconds since the Unix epoch. The default expiration_date is 30 days after the effective_date. example: 1678334737 format: int64 type: integer id: allOf: - "$ref": "#/components/schemas/Id" example: pl_WzFRszJhoY pdf_url: description: A URL for the hosted insurnace policy PDF, which contractors can view. example: http://ten99policy.s3.amazonaws.com/1099policy-coi-sample.pdf readOnly: true type: string quote: description: The ID of the quote used to create the policy. example: qt_5DciVga8Kt type: string status: description: One of `active`, `cancelled`, or `expired`. enum: - active - cancelled - expired example: active readOnly: true type: object Quote: description: |- The `Quote` object reflects whether a contractor is eligible for insurance and the premium owed for every $100 earned.

Important note: In North Dakota, Ohio, Washington and Wyoming, workers compensation can only be purchased through a government operated insurance company. As a result, the quote API returns an error when a quote request is made for workers compensiation for any one of these four states. properties: contractor: description: ID of the contractor. example: cn_Ehb3bYa type: string coverage_type: allOf: - "$ref": "#/components/schemas/Coverage" created: allOf: - "$ref": "#/components/schemas/Created" effective_date: description: The date when the insurance coverage is set to take effect. Measured in seconds since the Unix epoch. This date must be set in the future. The default effective_date is the next day. example: 1646818364 format: int64 type: string eligible: default: true description: Indicates whether a contractor is elgible for insurance or not. readOnly: true type: boolean end_date: description: The date when the insurance coverage is set to expire. Measured in seconds since the Unix epoch. This date must be after the effective date. The default end_date is 30 days after the effective date. example: 1678334737 format: int64 type: string gl_net_rate: description: |- The amount of money the 1099 contractor pays in general liability premium per every $100 earned.

A positive integer representing the premium owed per $100 earned. The `gl_net_rate` is stored in cents (e.g., 48 represents $0.48). example: 20 readOnly: true type: integer id: allOf: - "$ref": "#/components/schemas/Id" example: qt_5DciVga8Kt job: description: ID of the job that the contractor was paid to do. example: jb_jsb9KEcTpc type: string net_rate: description: |- The amount of money the 1099 contractor pays in premium per every $100 earned.

A positive integer representing the premium owed per $100 earned. The `net_rate` is stored in cents (e.g., 48 represents $0.48). example: 65 readOnly: true type: integer quote_json: description: The JSON representation of component parts that make up the total premium amount due including, for example, the net rate, taxes, and fees. example: gl: net_rate: 20 risk_purchasing_group_fee: stamping_fee: wc: net_rate: 45 readOnly: true type: object wc_net_rate: description: |- The amount of money the 1099 contractor pays in workers comp premium per every $100 earned.

A positive integer representing the premium owed per $100 earned. The `wc_net_rate` is stored in cents (e.g., 48 represents $0.48). example: 45 readOnly: true type: integer type: object Session: description: |- A Session represents the independent contractor's session as they apply for insurance using the application wizard at apply.1099policy.com. You only need to create a Session for contractors that don't already have insurance coverage.

Once the contractor successfully completes their insurance application, the Session will contain a reference to the Quote, the Contractor, the Job, and the active insurance Policy.

You can create a Session on your server and pass its URL to the client to begin the insurance application. properties: cancel_url: description: The URL the contractor will be directed to if they are ineligible or decide to abandon the insurance application and return to your website. example: https://1099jobcloud.com/1099policy/cancel type: string created: allOf: - "$ref": "#/components/schemas/Created" expired: description: Indicates whether the insurance application session has expired. If true, the contractor will be redirected to the cancel_url. example: false type: boolean id: allOf: - "$ref": "#/components/schemas/Id" example: ias_01FVCHXE7PNQHA1T3S2AXL2QZE quote: description: The ID of the quote associated with the insurance application session. example: qt_5DciVga8Kt type: string step: description: The step in the insurance application process that the contractor is currently on. The contractor will be redirected to this step when they return to the insurance application. One of `verify_info`, `application_questions`, `esignature_document`, `add_card_details`, `final_review`, or `application_complete`. enum: - verify_info - application_questions - esignature_document - add_card_details - final_review - application_complete example: final_review readOnly: true type: string success_url: description: 'The URL to which 1099Policy should direct independent contractors when a contractor successfully procures insurance coverage. ' example: https://1099jobcloud.com/1099policy/success type: string url: description: The URL to the insurance application Session. Redirect customers to this URL to take them to their insurance application. The domain will use apply.1099policy.com. example: http://apply.1099policy.com/... readOnly: true type: string type: object Webhook: description: |- Webhooks are a way for 1099Policy to communicate with your server. To receive events you can use the `webhook_endpoints` API to register your webhook endpoints.

If you prefer, you can also register and configure your webhook endpoints from the [dashboard](https://dashboard.1099policy.com/webhooks).

When an event occurs, we'll send an HTTP POST request to the registered webhook endpoint. We'll notify your server about events that happen in your 1099Policy account, such as when a contractor starts an insurance application or when a policy is issued. properties: created: allOf: - "$ref": "#/components/schemas/Created" example: '2024-01-06T05:30:39.373Z' description: description: 'Optional human-readable description of the endpoint. ' type: string id: allOf: - "$ref": "#/components/schemas/Id" example: whe_KPGc5vEZdvoETu39BNwu2Z secret: description: Webhook secret which you can use to verify that the webhook is from 1099Policy. Read more about how to use the webhook secret to verify the webhook signature in our documentation [here](/content/docs/automating-compliance#webhook-signature-verification/index.html). example: whr_a_secret_key type: string url: description: The URL of the webhook endpoint. example: https://example.com/my/webhook/endpoint type: string type: object definitions: {} info: description: |- The 1099Policy API is based on REST principles with resource-oriented URLs that accept JSON request bodies and return JSON responses. Use the 1099Policy API and the keys available on your 1099Policy Dashboard to offer contractors on your platform access to on-demand, pay-as-you-go insurance.

Use the development environment secret key to step through the process of procuring insurance using 1099Policy API for test contractors and job assignments. Because the API key you use to authenticate determines whether the request runs in our production environment or in our development environment, going live on the 1099Policy platform is as easy as replacing the development secret key with the production secret key once you're ready. title: 1099Policy API Reference version: '1.12' x-logo: altText: 1099Policy Logo backgroundColor: "#ffffff" url: https://www.1099policy.com/img/1099Policy-logo-api.svg openapi: 3.2.0 paths: "/api/v1/apply/sessions": get: description: |2

Returns a list of insurance application Sessions. parameters: - description: A limit on the number of objects to be returned. Limit can range between `1` and `100`, and the default is `10`. explode: true in: query name: limit required: false schema: default: 10 example: 25 maximum: 100 minimum: 1 type: integer - description: A cursor for use in pagination. `starting_after` is an application session ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `ias_fOo123`, your subsequent call can include `starting_after=ias_fOo123` in order to fetch the next page of the list. in: query name: starting_after required: false schema: type: string - description: A cursor for use in pagination. `ending_before` is an application session ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `ias_bAr123`, your subsequent call can include `ending_before=ias_bAr123` in order to fetch the previous page of the list. in: query name: ending_before required: false schema: type: string - description: Filter sessions by contractor ID (e.g., `cn_Ehb3bYa`). in: query name: contractor required: false schema: type: string - description: Filter sessions by general opt-in flag. Set to `true` to return only general opt-in sessions, `false` to return only standard sessions, or omit to return all sessions. in: query name: is_general_opt_in required: false schema: type: boolean responses: '200': content: application/json: schema: items: "$ref": "#/components/schemas/Session" type: array description: Returns an array of session objects. If no more sessions are available, the resulting array will be empty. summary: List all sessions tags: - Session post: description: |2

Creates a session object. requestBody: content: application/json: schema: properties: cancel_url: description: The URL the contractor will be directed to if they are ineligible or decide to abandon the insurance application and return to your website. type: string contractor: description: The ID of the contractor (required for general opt-in sessions). For standard sessions, this is derived from the quote. type: string general_opt_in_work_state: description: The work state for general opt-in sessions (e.g., "CA", "NY"). Required when `is_general_opt_in` is `true`. type: string is_general_opt_in: description: Set to `true` to create a general opt-in session (not tied to a specific job/quote). When `true`, `contractor` and `work_state` are required, and `quote` is not required. type: boolean quote: description: The ID of an existing quote to be associated with the insurance application session. type: string success_url: description: The URL to which 1099Policy should direct independent contractors when a contractor successfully procures insurance coverage. type: string required: - quote responses: '201': content: application/json: schema: "$ref": "#/components/schemas/Session" description: Returns the session object for an insurance application if quote, job, and contractor are valid. summary: Create a session tags: - Session "/api/v1/apply/sessions/{session}": get: description: |2

Retrieves the insurance application session with the given ID. parameters: - description: The ID of the desired session (e.g., `ias_01FVCHXE7PNQHA1T3S2AXL2QZE`). in: path name: session required: true schema: example: ias_01FVCHXE7PNQHA1T3S2AXL2QZE type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Session" description: Returns a session object if a valid session ID was provided. Returns an error otherwise. summary: Retrieve a session tags: - Session put: description: |2+

Updates the success_url and cancel_url of a specified session. If either parameters is not provided it will be left unchanged.

parameters: - description: The ID of the desired session (e.g., `ias_01FVCHXE7PNQHA1T3S2AXL2QZE`). in: path name: session required: true schema: example: ias_01FVCHXE7PNQHA1T3S2AXL2QZE type: string requestBody: content: application/json: schema: example: cancel_url: https://example.com/cancel success_url: https://example.com/success properties: cancel_url: description: The URL the contractor will be directed to if they are ineligible or decide to abandon the insurance application and return to your website. type: string success_url: description: The URL to which 1099Policy should direct independent contractors when a contractor successfully procures insurance coverage. type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Session" description: Returns the updated session object. summary: Update a session tags: - Session "/api/v1/apply/sessions/{session}/expire": post: description: |2

Expires the insurance application session with the given ID. An insurance application session can't be expired if the application status is complete.

After it expires, a contractor can’t complete an insurance application session and contractors loading the insurance application session see a message saying the insurance application session is expired. parameters: - description: The ID of the desired session (e.g., `ias_01FVCHXE7PNQHA1T3S2AXL2QZE`). in: path name: session required: true schema: example: ias_01FVCHXE7PNQHA1T3S2AXL2QZE type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Session" description: Returns a session object if the expiration succeeded. Returns an error if the session is already expired or isn't in an expireable state. summary: Expire a session tags: - Session "/api/v1/assignments": get: description: |2

Returns a list of your assignments. The assigments returned are sorted by creation date, with the most recently created assignments appearing first. parameters: - description: A limit on the number of objects to be returned. Limit can range between `1` and `100`, and the default is `10`. explode: true in: query name: limit required: false schema: default: 10 example: 25 maximum: 100 minimum: 1 type: integer - description: A cursor for use in pagination. `starting_after` is an assignment ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `asn_fOo123`, your subsequent call can include `starting_after=asn_fOo123` in order to fetch the next page of the list. in: query name: starting_after required: false schema: type: string - description: A cursor for use in pagination. `ending_before` is an assignment ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `asn_bAr123`, your subsequent call can include `ending_before=asn_bAr123` in order to fetch the previous page of the list. in: query name: ending_before required: false schema: type: string responses: '200': content: application/json: schema: items: "$ref": "#/components/schemas/Assignment" type: array description: Returns an array of assignment objects. If no more assignments are available, the resulting array will be empty. summary: List all assignments tags: - Assignment post: description: |2

This endpoint creates an assignment object that you can use to attach insurance coverage to any job assignment a contractor takes after the contractor has gone active on the 1099Policy platform (i.e., after completing thier insurance application successfully). requestBody: content: application/json: schema: properties: bind: description: Indicates whether to start the process of binding coverage, which includes notifying and subsequently charging the independent contractor for the premium amount due. Defaults to `true`. When false, 1099Policy does not notify or schedule a charge. Note that the independent contractor is not issued coverage if bind is set to `false`. type: boolean contractor: description: ID of the contractor type: string coverage_type: description: 'An array of coverage types that can include one or more of the following insurance coverage values: `general`, `professional`, `workers-comp`, `media`, and `cyber`. If provided, coverage type is factored into the eligibility determination (i.e., does contractor have an active `workers-comp` policy, etc). Defaults to the coverage types of the most recent active policy if `coverage_type` is not provided.' enum: - general - professional - workers-comp items: type: string type: array effective_date: description: The job assignment start date, measured in seconds since the Unix epoch. This date must be set in the future. The default effective_date is the next day. type: integer end_date: description: The projected job assignment end date, measured in seconds since the Unix epoch. This date must be after the effective date. If the end_date is on the same day as the effective_date, it will automatically be adjusted to the start of the next day. The default end_date is 30 days after the effective date. type: integer job: description: ID of the job that the contractor was paid to do. type: string policy: description: ID of the policy that you want attached to the assignment. Defaults to the most recent active policy with a matching job category code, work state and contractor home state. type: string required: - contractor - job responses: '201': content: application/json: schema: "$ref": "#/components/schemas/Assignment" description: Returns the assignment object if the post succeeded. summary: Create an assignment tags: - Assignment "/api/v1/assignments/cancel": post: description: |2

Cancels an existing assignment based on the provided job ID. If you attempt to cancel an assignment after it has started, the request will fail. If you need the option to cancel an assignment after its start date, please contact us. requestBody: content: application/json: schema: example: job_id: jb_123abc reason: client_request properties: job_id: description: The ID of the job associated with the assignment type: string reason: description: Optional reason for cancellation type: string required: - job_id responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Assignment" description: Assignment successfully cancelled '400': description: Invalid request or assignment cannot be cancelled '404': description: No assignment found for the associated job id. summary: Cancel an assignment tags: - Assignment "/api/v1/assignments/change_dates": post: description: |2

Changes the start (``effective_date``) and/or end date of **bound** coverage for a job. This is the symmetric counterpart to ``POST /api/v1/assignments/extend``: extend moves the end date out, this endpoint can also move the start date forward (shortening coverage from the front) -- e.g. correcting a start date that slipped into the past -- and it works for both quote- and assignment-backed coverage.

Restrictions mirror what we already enforce: ``effective_date`` must be in the future, strictly after the current start, and before the end date; ``end_date`` follows the extend rules (on or after the current end, within a year of the effective date, and coverage not already ended). At least one of ``effective_date`` / ``end_date`` is required. Changing dates on a bound quote via ``PUT /quotes`` is not supported; use this endpoint.

**Certificate of Insurance (COI) regeneration**: COI PDFs are regenerated asynchronously to reflect the new dates. The response returns immediately with ``certificate_refresh_pending: true``; the ``certificate`` URLs in the response are stale, and fresh URLs are published in the ``assignment.dates_changed`` webhook (and available via the API) once regeneration completes. requestBody: content: application/json: schema: example: effective_date: 1784332800 job_id: jb_jsb9KEcTpc send_email: true properties: effective_date: description: New coverage start date (seconds since the Unix epoch). Must be in the future, after the current start, and before the end date. Moving it forward shortens coverage from the start. format: int64 type: integer end_date: description: New coverage end date (seconds since the Unix epoch). Must be on or after the current end date and within one year of the effective date. format: int64 type: integer job_id: description: The ID of the job associated with the coverage. type: string send_email: default: true description: When true, email the contractor a coverage-dates-changed notice. COI regeneration and webhook publication happen regardless of this flag. type: boolean required: - job_id responses: '200': content: application/json: schema: oneOf: - "$ref": "#/components/schemas/Assignment" - "$ref": "#/components/schemas/Quote" description: 'Coverage dates updated, or unchanged (no-op) when the submitted dates match the current values. COIs regenerate asynchronously, so the response includes ``certificate_refresh_pending: true``.' '400': description: Invalid input, no dates provided, voided/cancelled/unbound record, expired coverage, a backward or past effective_date, or a shortened end_date. '404': description: Job not found, or no bound coverage found for the job. summary: Change bound coverage dates tags: - Assignment "/api/v1/assignments/extend": post: description: |2

Extends an existing assignment based on the provided job ID. Sets a new end date for bound coverage. If you attempt to extend after coverage has ended, or the end date is invalid, the request will fail. Updating ``end_date`` on a bound assignment via ``PUT`` is not supported; use this endpoint instead.

**Certificate of Insurance (COI) regeneration**: When extending coverage, COI PDFs are regenerated asynchronously to reflect the new end date. The response returns immediately with ``certificate_refresh_pending: true``, indicating that:

- The ``certificate`` URLs in the response point to the old PDFs (pre-regeneration) - Fresh certificate URLs will be included in the ``assignment.extended`` webhook, which is published after COI regeneration completes - Fresh URLs can also be fetched via the API after background processing finishes

This async design ensures the API responds quickly without blocking for PDF generation. requestBody: content: application/json: schema: example: end_date: 1735689600 job_id: jb_jsb9KEcTpc send_email: true properties: end_date: description: New end date for the assignment, measured in seconds since the Unix epoch. Must be on or after the current end date and within one year of the effective date. format: int64 type: integer job_id: description: The ID of the job associated with the assignment type: string send_email: default: true description: When true, send a coverage-extension notification email to the contractor. COI regeneration and webhook publication happen regardless of this flag. type: boolean required: - job_id - end_date responses: '200': content: application/json: schema: oneOf: - "$ref": "#/components/schemas/Assignment" - "$ref": "#/components/schemas/Quote" description: 'Assignment end date updated, or unchanged (no-op) when ``end_date`` matches the current value. COIs are always regenerated asynchronously, so the response includes ``certificate_refresh_pending: true`` to indicate that certificate URLs are stale and fresh URLs will be available in the webhook.' '400': description: Invalid input, voided or cancelled record, expired coverage, attempted shortening, or same end date when no-op is not allowed. '404': description: Job not found, or no assignment found for the associated job id. summary: Extend an assignment tags: - Assignment "/api/v1/assignments/media": get: description: |2

Retrieves all media coverage records associated with a policy. parameters: - description: The ID of the policy to get media coverage records for. in: query name: policy_id required: true schema: type: string responses: '200': content: application/json: schema: items: "$ref": "#/components/schemas/MediaCoverage" type: array description: Returns a list of media coverage records if successful. '400': description: Returns an error if the policy_id parameter is missing or invalid. '404': description: Returns an error if the specified policy is not found. '500': description: Returns an error if there was an internal server error. summary: Get media coverage records for a policy tags: - Assignment post: description: |2

Creates a new media coverage record for a policy and adds published content. The media coverage record is used to track content published by contractors and generate Certificates of Insurance (COIs) for media coverage. requestBody: content: application/json: schema: example: policy_id: pl_123abc publication_date: 1711612800 published_content_json: additional_field: any value platform: instagram url: https://instagram.com/pl/1234567890 properties: policy_id: description: The ID of the policy to associate with the media coverage record. type: string publication_date: description: The date and time when the content was published, in seconds since the Unix epoch. type: integer published_content_json: description: Details about the published content. Can contain any valid JSON structure. type: object required: - publication_date - policy_id - published_content_json responses: '201': content: application/json: schema: "$ref": "#/components/schemas/MediaCoverage" description: Returns the created media coverage record if successful. '400': description: Returns an error if required fields are missing or invalid. '404': description: Returns an error if the specified policy is not found. '500': description: Returns an error if there was an internal server error. summary: Create a media coverage record for an assignment tags: - Assignment "/api/v1/assignments/{assignment}": delete: description: |2

Permanently deletes an assignment. This cannot be undone. Attempts to delete assignments with jobs that have invoices paid in full will fail. parameters: - description: The ID of the desired assignment (e.g., `an_G5biPgc5Hc`). in: path name: assignment required: true schema: example: an_G5biPgc5Hc type: string responses: '200': content: application/json: schema: example: deleted: true deleted_at: 1640995200 id: an_G5biPgc5Hc object: assignment properties: deleted: type: boolean deleted_at: description: Unix timestamp (seconds since epoch) of when the assignment was deleted. type: integer id: description: The assignment ID. type: string object: default: assignment type: string description: A successfully deleted assignment. Otherwise, this call returns an error, such as if the assignment has already been deleted. summary: Delete an assignment tags: - Assignment get: description: |2

Retrieves the assignment with the given ID. parameters: - description: The ID of the desired assignment (e.g., `an_G5biPgc5Hc`). in: path name: assignment required: true schema: example: an_G5biPgc5Hc type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Assignment" description: Returns an assignment object if a valid assignment ID was provided. Returns an error otherwise. summary: Retrieve an assignment tags: - Assignment put: description: |2

Assignments are editable up until the related invoice is paid in full. parameters: - description: The ID of the desired assignment (e.g., `an_3mqtUPL2cA`). in: path name: assignment required: true schema: example: an_3mqtUPL2cA type: string requestBody: content: application/json: schema: example: bind: true contractor: cn_Ehb3bYa coverage_type: - general - workers-comp effective_date: 1646818364 end_date: 1646818364 job: jb_jsb9KEcTpc policy: pl_3mqtUPL2cA properties: bind: description: Indicates whether to start the process of binding coverage, which includes notifying and subsequently charging the independent contractor for the premium amount due. Defaults to `true`. When false, 1099Policy does not notify or schedule a charge. Note that the independent contractor is not issued coverage if bind is set to `false`. type: boolean contractor: description: ID of the contractor type: string coverage_type: description: 'An array of coverage types that can include one or more of the following insurance coverage values: `general`, `workers-comp`, and `professional`. If provided, coverage type is factored into the eligibility determination (i.e., does contractor have an active `workers-comp` policy, etc). Defaults to the coverage types of the most recent active policy if `coverage_type` is not provided.' items: enum: - general - workers-comp - professional type: string type: array effective_date: description: The job assignment start date, measured in seconds since the Unix epoch. type: integer end_date: description: The projected job assignment end date, measured in seconds since the Unix epoch. If the end_date is on the same day as the effective_date, it will automatically be adjusted to the start of the next day. type: integer job: description: ID of the job that the contractor intends to accept. type: string policy: description: ID of the policy that you want attached to the assignment. Defaults to the most recent active policy with a matching job category code, work state and contractor home state. type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Assignment" description: Returns an invoice object if a valid invoice ID was provided. Returns an error otherwise. summary: Update an assignment tags: - Assignment "/api/v1/category_codes": get: description: |2

Returns a list of your approved job category codes. The job category codes are returned sorted by approval date, with the most recently approved job categories appearing first. parameters: - description: A limit on the number of objects to be returned. Limit can range between `1` and `100`, and the default is `10`. explode: true in: query name: limit required: false schema: default: 10 example: 25 maximum: 100 minimum: 1 type: integer responses: '200': content: application/json: schema: items: "$ref": "#/components/schemas/CategoryCodes" type: array description: Returns an array of job category code objects. If no more job category codes are available, the resulting array will be empty. summary: List all category codes tags: - Category Code "/api/v1/contractors": get: description: |2

Returns a list of your contractors. The contractors are returned sorted by creation date, with the most recent contractors appearing first. parameters: - description: A limit on the number of objects to be returned. Limit can range between `1` and `100`, and the default is `10`. explode: true in: query name: limit required: false schema: default: 10 example: 25 maximum: 100 minimum: 1 type: integer - description: A cursor for use in pagination. `starting_after` is an contractor ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `cn_fOo123`, your subsequent call can include `starting_after=cn_fOo123` in order to fetch the next page of the list. in: query name: starting_after required: false schema: type: string - description: A cursor for use in pagination. `ending_before` is an contractor ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `cn_bAr123`, your subsequent call can include `ending_before=cn_bAr123` in order to fetch the previous page of the list. in: query name: ending_before required: false schema: type: string - description: A case-sensitive filter on the list based on the contractor's email attribute. The value must be a string. explode: true in: query name: email required: false schema: example: billscot@example.com type: string responses: '200': content: application/json: schema: items: "$ref": "#/components/schemas/Contractor" type: array description: Returns an array of contractor objects. If no more contractors are available, the resulting array will be empty. summary: List all contractors tags: - Contractor post: description: |2

Creates a new contractor object. requestBody: content: application/json: schema: properties: address: allOf: - "$ref": "#/components/schemas/Address" - description: The contractor's home address. required: - line1 - locality - region - postalcode type: object company_name: description: The contractor's business name. type: string custom_metadata: description: Set of key-value pairs that you can attach to an object. Used to store additional information about the contractor in a structured format. type: object email: description: The contractor's email address. type: string first_name: description: The contractor's first name. type: string last_name: description: The contractor's last name. type: string middle_name: description: The contractor's middle name. type: string phone: description: The contractor's phone number. type: string tax_identification: description: The contractor's tax identification number. For example, an employer identification number (EIN) if the contractor operates as a corporate entity or a social security number if the contractor operates as a sole proprietor. type: string withhold_premium: description: This indicates whether the contractor is paying premium directly with their credit card (i.e., `false`) or if the contractor has given the platform that's integrating with 1099Policy permission to withhold the premium payment from their wages and pay the premium on the contractor's behalf (i.e., `true`). Defaults to `false`. type: boolean required: - first_name - last_name - email - address responses: '201': content: application/json: schema: "$ref": "#/components/schemas/Contractor" description: Returns the contractor object if the post succeeded. summary: Create a contractor tags: - Contractor "/api/v1/contractors/{contractor}": delete: description: |2

Permanently deletes a contractor. It cannot be undone. Also immediately cancels any active policies connected with the contractor. parameters: - description: The ID of the desired contractor (e.g., `cn_Ehb3bYa`). in: path name: contractor required: true schema: example: cn_Ehb3bYa type: string responses: '200': content: application/json: schema: example: deleted: true deleted_at: 1640995200 id: cn_Ehb3bYa object: contractor properties: deleted: type: boolean deleted_at: description: Unix timestamp (seconds since epoch) of when the contractor was deleted. type: integer id: description: The contractor ID. type: string object: default: contractor type: string description: Returns an object with a deleted parameter on success. If the contractor ID does not exist, this call returns an error. summary: Delete a contractor tags: - Contractor get: description: |2

Retrieves the details of an existing contractor. You need only supply the unique contractor identifier that was returned upon contractor creation. parameters: - description: The ID of the desired contractor (e.g., `cn_Ehb3bYa`). in: path name: contractor required: true schema: example: cn_Ehb3bYa type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Contractor" description: Returns a contractor object if a valid identifier was provided. summary: Retrieve a contractor tags: - Contractor put: description: |2

Updates the specified contractor by setting the values of the parameters passed. Any parameters not provided will be left unchanged.

This request accepts mostly the same arguments as the contractor creation call. parameters: - description: The ID of the desired contractor (e.g., `cn_Ehb3bYa`). in: path name: contractor required: true schema: example: cn_Ehb3bYa type: string requestBody: content: application/json: example: address: line1: 123 Main St. locality: San Francisco postalcode: '94105' region: CA company_name: Acme Co. custom_metadata: campaign: Red Bull email: parker@gmail.com first_name: Joe last_name: Parker middle_name: Doe phone: 415-474-9088 schema: properties: address: allOf: - "$ref": "#/components/schemas/Address" description: The contractor's home address. company_name: description: The contractor's business name. type: string custom_metadata: description: Set of key-value pairs that you can attach to an object. Used to store additional information about the contractor in a structured format. Individual keys can be unset by posting an empty value to them. Pass an empty value, e.g. {}, to custom_metadata to unset all keys. type: object email: description: The contractor's email address. type: string first_name: description: The contractor's first name. type: string last_name: description: The contractor's last name. type: string middle_name: description: The contractor's middle name. type: string phone: description: The contractor's phone number. type: string withhold_premium: description: This indicates whether the contractor is paying premium directly with their credit card (i.e., `false`) or if the contractor has given the platform that's integrating with 1099Policy permission to withhold the premium payment from their wages and pay the premium on the contractor's behalf (i.e., `true`). Defaults to `false`. type: boolean responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Contractor" description: Returns the contractor object if the update succeeded. Returns an error if update parameters are invalid. summary: Update a contractor tags: - Contractor "/api/v1/contractors/{contractor}/login_link": post: description: |2

Generates a secure, time-limited login URL for contractor portal access. This allows agencies to provide direct portal access without requiring contractors to go through email verification. parameters: - description: The contractor's public ID in: path name: contractor required: true schema: type: string requestBody: content: application/json: schema: properties: redirect_url: description: URL to redirect the contractor to after successful authentication. Must match an allowlisted origin. example: https://my.1099policy.com/insurance/start type: string type: object required: false responses: '200': content: application/json: schema: properties: contractor: properties: company_name: type: string email: type: string first_name: type: string id: type: integer last_name: type: string public_id: type: string type: object expires_at: description: Time at which the login token expires. Measured in seconds since the Unix epoch. example: 1765555200 format: int64 type: integer login_url: description: Complete login URL with embedded token example: https://my.1099policy.com/quick-access?contractor\_id=cn\_abc123&token=xyz789 type: string success: example: true type: boolean type: object description: Login link generated successfully '400': description: Contractor has no email address, or the supplied redirect_url is not an allowlisted origin. '404': description: Contractor not found '500': description: Failed to generate login link security: - ApiKeyAuth: [] summary: Generate login link tags: - Contractor "/api/v1/contractors/{contractor}/policies": get: description: |2

Returns a list of policies for a given contractor. parameters: - description: The ID of the desired contractor (e.g., `cn_Ehb3bYa`). in: path name: contractor required: true schema: example: cn_Ehb3bYa type: string - description: A filter to return policies by a specific quote ID. in: query name: quote required: false schema: type: string responses: '200': content: application/json: schema: items: "$ref": "#/components/schemas/Policy" type: array description: Returns a list of the contractors policies. The policies are returned sorted by creation date, with the most recent policy appearing first. summary: List a contractor's policies tags: - Policy "/api/v1/entities": get: description: |2

Returns a list of your contracting entities. The entities are returned sorted by creation date, with the most recent entities appearing first. parameters: - description: A limit on the number of objects to be returned. Limit can range between `1` and `100`, and the default is `10`. explode: true in: query name: limit required: false schema: default: 10 example: 25 maximum: 100 minimum: 1 type: integer - description: A cursor for use in pagination. `starting_after` is an entity ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `en_fOo123`, your subsequent call can include `starting_after=en_fOo123` in order to fetch the next page of the list. in: query name: starting_after required: false schema: type: string - description: A cursor for use in pagination. `ending_before` is an entity ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `en_bAr123`, your subsequent call can include `ending_before=en_bAr123` in order to fetch the previous page of the list. in: query name: ending_before required: false schema: type: string responses: '200': content: application/json: schema: items: "$ref": "#/components/schemas/Entity" type: array description: Returns an array of entity objects. If no more entities are available, the resulting array will be empty. summary: List all entities tags: - Entity post: description: |2

Creates a new contracting entity object. requestBody: content: application/json: schema: properties: address: allOf: - "$ref": "#/components/schemas/Address" - description: The contracting entity's address. type: object coverage_limit: allOf: - "$ref": "#/components/schemas/Limit" - description: The contracting entity's minimum required coverage limits. type: object name: description: The contracting entity's legal name. type: string required_coverage: "$ref": "#/components/schemas/Coverage" required: - name responses: '201': content: application/json: schema: "$ref": "#/components/schemas/Entity" description: Returns the entity object if the post succeeded. summary: Create an entity tags: - Entity "/api/v1/entities/{entity}": delete: description: |2

Permanently deletes an entity. It cannot be undone. Also immediately cancels any insurance policies connected with active jobs managed by the entity. parameters: - description: The ID of the desired entity (e.g., `en_Ah3tqYn`). in: path name: entity required: true schema: example: en_Ah3tqYn type: string responses: '200': content: application/json: schema: example: deleted: true deleted_at: 1640995200 id: en_Ah3tqYn object: entity properties: deleted: type: boolean deleted_at: description: Unix timestamp (seconds since epoch) of when the entity was deleted. type: integer id: description: The entity ID. type: string object: default: entity type: string description: A successfully deleted entity. Otherwise, this call returns an error, such as if the entity has already been deleted. summary: Delete an entity tags: - Entity get: description: |2

Retrieves the details of an existing entity. You need only supply the unique entity ID that was returned upon entity creation. parameters: - description: The ID of the desired entity (e.g., `en_Ah3tqYn`). in: path name: entity required: true schema: example: en_Ah3tqYn type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Entity" description: Returns an entity object if a valid entity ID was provided. Returns an error otherwise. summary: Retrieve an entity tags: - Entity put: description: |2

Updates the specified entity by setting the values of the parameters passed. Any parameters not provided will be left unchanged.

This request accepts mostly the same arguments as the entity creation call. parameters: - description: The ID of the desired entity (e.g., `en_Ah3tqYn`). in: path name: entity required: true schema: example: en_Ah3tqYn type: string requestBody: content: application/json: schema: properties: address: allOf: - "$ref": "#/components/schemas/Address" description: The contracting entity's address. coverage_limit: allOf: - "$ref": "#/components/schemas/Limit" description: The contracting entity's minimum required coverage limits. name: description: The contracting entity's legal name. type: string required_coverage: "$ref": "#/components/schemas/Coverage" responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Entity" description: Returns the entity object if the update succeeded. Returns an error if update parameters are invalid. summary: Update an entity tags: - Entity "/api/v1/events": get: description: |2

Returns a list of events with pagination (20 events per page). The events are sorted by creation date, with the most recent event appearing first. parameters: - description: A limit on the number of objects to be returned. Limit can range between `1` and `100`, and the default is `10`. in: query name: limit required: false schema: default: 10 example: 25 maximum: 100 minimum: 1 type: integer responses: '200': content: application/json: schema: items: "$ref": "#/components/schemas/Event" type: array description: Returns an array of event objects. If no more events are available, the resulting array will be empty. summary: List all events tags: - Event "/api/v1/events/{event}": get: description: |2

Retrieves the details of an event. You need only provide the unique event ID which you would have received in a webhook. parameters: - description: The ID of the desired event (e.g., `ev_1a2b3c4d5e6f`). in: path name: event required: true schema: example: ev_1a2b3c4d5e6f type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Event" description: Returns an event object if a valid ID was provided. summary: Retrieve an event tags: - Event "/api/v1/files/certificates": get: description: |2+

Returns a list of certificates. The certificates are returned sorted by creation date, with the most recently created certificates appearing first. Supports pagination using `starting_after` and `ending_before`.

parameters: - description: 'A limit on the number of objects to be returned. The limit can range between `1` and `100`, and the default is `10`.

' in: query name: limit required: false schema: default: 10 example: 25 maximum: 100 minimum: 1 type: integer - description: 'A cursor for use in pagination. `starting_after` is a certificate ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `ca_123`, your subsequent call can include `starting_after=ca_123` in order to fetch the next page of the list.

' in: query name: starting_after required: false schema: type: string - description: 'A cursor for use in pagination. `ending_before` is a certificate ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `ca_456`, your subsequent call can include `ending_before=ca_456` in order to fetch the previous page of the list.

' in: query name: ending_before required: false schema: type: string - description: 'Specifies which fields in the response should be expanded. Use `expand[]=review_results` for abbreviated review results, or `expand[]=review_results.full` for full review results including parsed certificate data and detailed audit results.

' example: - review_results - review_results.full explode: true in: query name: expand required: false schema: items: type: string type: array style: form responses: '200': content: application/json: schema: items: "$ref": "#/components/schemas/Certificate" type: array description: 'Returns an array of certificate objects. If no more certificates are available, the resulting array will be empty.

' summary: List all certificates. tags: - Certificate post: description: |2+

Uploads a new Certificate of Insurance (COI) PDF file, validates it, and creates a certificate record. The certificate processing is performed asynchronously in the background. The initial response indicates that the certificate has been accepted for processing with a status of "pending".

**Asynchronous Processing:**

After uploading a certificate, the platform automatically processes the document and evaluates it against your organization's pre-defined insurance requirements. This evaluation happens asynchronously, so the initial response will have: - `status`: "pending" (indicating processing has not yet started) - `review_results`: `null` (will be populated once processing completes)

**Monitoring Certificate Status:**

You can monitor the certificate status in two ways:

1. **Polling**: Periodically retrieve the certificate using the GET endpoint to check the `status` field. The status will transition from "pending" → "processing" → ("approved" | "flagged" | "denied" | "error") as processing completes.

2. **Webhooks**: Register a webhook endpoint to receive real-time notifications when processing completes. The following events are sent: - `certificate.approved` - Certificate passed all requirements - `certificate.flagged` - Certificate failed some requirements - `certificate.denied` - Certificate was denied

**Retrieving Review Results:**

Once processing is complete, use the `expand[]=review_results` parameter when retrieving the certificate to get abbreviated review results, or `expand[]=review_results.full` for complete details including parsed certificate data and detailed audit results.

requestBody: content: multipart/form-data: schema: properties: certificate: description: The certificate PDF file to be uploaded (max 15MB). format: binary type: string contractor: description: The ID of the contractor associated with the certificate. type: string required: - certificate - contractor type: object responses: '201': content: application/json: schema: "$ref": "#/components/schemas/Certificate" description: 'Returns the created certificate object. The certificate has been accepted for processing and will have a status of "pending". Processing happens asynchronously, and you can monitor the status via polling or webhooks.

' summary: Create a new certificate. tags: - Certificate "/api/v1/files/certificates/{certificate}": delete: description: |2+

Deletes an existing certificate by its ID.

parameters: - description: The ID of the certificate to delete. in: path name: certificate required: true schema: example: ci_YnsHeB9PTo type: string responses: '200': content: application/json: schema: example: deleted: true deleted_at: 1640995200 id: ci_YnsHeB9PTo object: certificate properties: deleted: type: boolean deleted_at: description: Unix timestamp (seconds since epoch) of when the certificate was deleted. type: integer id: description: The certificate ID. type: string object: default: certificate type: string description: 'Returns an object with a deleted parameter on success. Otherwise, this call returns an error.

' summary: Delete a certificate. tags: - Certificate get: description: |2+

Retrieves the details of an existing certificate by its ID. Use this endpoint to poll for certificate status updates during asynchronous processing.

**Certificate Status Lifecycle:**

The certificate status transitions through the following states: - `pending` - Certificate has been uploaded but processing has not started - `processing` - Certificate is currently being processed - `approved` - Certificate passed all insurance requirements - `flagged` - Certificate failed some requirements (may require manual review) - `denied` - Certificate was denied - `error` - An error occurred during processing

**Retrieving Review Results:**

Once processing is complete, use the `expand` parameter to retrieve review results: - `expand[]=review_results` - Returns abbreviated results with summary counts - `expand[]=review_results.full` - Returns full parsed certificate data and detailed audit results for each insurance requirement

parameters: - description: The ID of the desired certificate. in: path name: certificate required: true schema: example: ci_YnsHeB9PTo type: string - description: 'Specifies which fields in the response should be expanded. Use `expand[]=review_results` for abbreviated review results, or `expand[]=review_results.full` for full review results including parsed certificate data and detailed audit results.

' example: - review_results - review_results.full explode: true in: query name: expand required: false schema: items: type: string type: array style: form responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Certificate" description: 'Returns a certificate object if a valid certificate ID was provided. The `status` field indicates the current processing state, and `review_results` will be `null` until processing completes.

' '404': description: Certificate not found summary: Retrieve a certificate. tags: - Certificate "/api/v1/invoices": get: description: |2

You can list all invoices, or list the invoices for a specific contractor. The invoices are returned sorted by creation date, with the most recently created invoices appearing first. parameters: - description: A limit on the number of objects to be returned. Limit can range between `1` and `100`, and the default is `10`. explode: true in: query name: limit required: false schema: default: 10 example: 25 maximum: 100 minimum: 1 type: integer - description: A cursor for use in pagination. `starting_after` is an invoice ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `in_fOo123`, your subsequent call can include `starting_after=in_fOo123` in order to fetch the next page of the list. in: query name: starting_after required: false schema: type: string - description: A cursor for use in pagination. `ending_before` is an invoice ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `in_bAr123`, your subsequent call can include `ending_before=in_bAr123` in order to fetch the previous page of the list. in: query name: ending_before required: false schema: type: string responses: '200': content: application/json: schema: items: "$ref": "#/components/schemas/Invoice" type: array description: Returns an array of invoice objects. If no more invoices are available, the resulting array will be empty. summary: List all invoices tags: - Invoice post: description: |2

This endpoint creates an invoice that reflects the insurance premium owed by the contractor for the specified pay period. requestBody: content: application/json: schema: properties: contractor: description: ID of the contractor type: string gross_pay: description: The gross pay that the contractor earned in the last pay period. type: integer job: description: ID of the job that the contractor was paid to do. type: string paycycle_enddate: description: Pay period end date. type: integer paycycle_startdate: description: Pay period start date. type: integer purchase_order_number: description: |- The purchase order number for this invoice. Optional.

By default an invoice inherits the `purchase_order_number` set on the job's `custom_metadata`. Send this field to override that default for this invoice — an explicit value always wins over the job default. Send an empty string (`""`) to create the invoice with no purchase order number, or omit the field to inherit the job's default.

If a later gross_pay change re-prices this invoice, the replacement invoice keeps this purchase order number; it is not re-inherited from the job. type: string required: - contractor - job - gross_pay - paycycle_startdate - paycycle_enddate responses: '201': content: application/json: schema: "$ref": "#/components/schemas/Invoice" description: Returns the invoice object if the post succeeded. summary: Create an invoice tags: - Invoice "/api/v1/invoices/{invoice}": delete: description: |2

Permanently deletes an invoice. This cannot be undone. Attempts to delete invoices that have been paid will fail. parameters: - description: The ID of the desired invoice (e.g., `in_4RviYgc2Wt`). in: path name: invoice required: true schema: example: in_4RviYgc2Wt type: string responses: '200': content: application/json: schema: example: deleted: true deleted_at: 1640995200 id: in_4RviYgc2Wt object: invoice properties: deleted: type: boolean deleted_at: description: Unix timestamp (seconds since epoch) of when the invoice was deleted. type: integer id: description: The invoice ID. type: string object: default: invoice type: string description: A successfully deleted invoice. Otherwise, this call returns an error, such as if the invoice has already been deleted. summary: Delete an unpaid invoice tags: - Invoice get: description: |2

Retrieves the invoice with the given ID. parameters: - description: The ID of the desired invoice (e.g., `in_4RviYgc2Wt`). in: path name: invoice required: true schema: example: in_4RviYgc2Wt type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Invoice" description: Returns an invoice object if a valid invoice ID was provided. Returns an error otherwise. summary: Retrieve an invoice tags: - Invoice put: description: |2

Invoices that haven't been paid are fully editable. Once an invoice is paid, it becomes uneditable. parameters: - description: The ID of the desired invoice (e.g., `in_4RviYgc2Wt`). in: path name: invoice required: true schema: example: in_4RviYgc2Wt type: string requestBody: content: application/json: example: contractor: cn_Ehb3bYa gross_pay: 10000 job: jb_jsb9KEcTpc paycycle_enddate: 1678334737 paycycle_startdate: 1646818364 purchase_order_number: PO-12345678 schema: properties: contractor: description: ID of the contractor type: string gross_pay: description: The gross pay that the contractor earned in the last pay period. type: integer job: description: ID of the job that the contractor was paid to do. type: string paycycle_enddate: description: Pay period end date. type: integer paycycle_startdate: description: Pay period start date. type: integer purchase_order_number: description: |- The purchase order number for this invoice. Optional.

Provide a value to set or change it — an explicit value overrides the default inherited from the job's `custom_metadata`. Send an empty string (`""`) to clear it, or omit the field to leave the current value unchanged. This is how you change only the purchase order number when nothing else about the invoice has changed. Not editable once the invoice is paid in full. type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Invoice" description: Returns an invoice object if a valid invoice ID was provided. Returns an error otherwise. summary: Update an invoice tags: - Invoice "/api/v1/jobs": get: description: |2

Returns a list of your jobs. The jobs are returned sorted by creation date, with the most recently created jobs appearing first. parameters: - description: A limit on the number of objects to be returned. Limit can range between `1` and `100`, and the default is `10`. explode: true in: query name: limit required: false schema: default: 10 example: 25 maximum: 100 minimum: 1 type: integer - description: A cursor for use in pagination. `starting_after` is an job ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `jb_fOo123`, your subsequent call can include `starting_after=jb_fOo123` in order to fetch the next page of the list. in: query name: starting_after required: false schema: type: string - description: A cursor for use in pagination. `ending_before` is an job ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `jb_bAr123`, your subsequent call can include `ending_before=jb_bAr123` in order to fetch the previous page of the list. in: query name: ending_before required: false schema: type: string responses: '200': content: application/json: schema: items: "$ref": "#/components/schemas/Job" type: array description: Returns an array of job objects. If no more jobs are available, the resulting array will be empty. summary: List all jobs tags: - Job post: description: |2

Creates a new job object. Used to classify the work that 1099Policy applies to insure the contractor. requestBody: content: application/json: schema: properties: address: allOf: - "$ref": "#/components/schemas/Address" - description: The job address where the work will be done. Exclude if job will be done remotely. required: - region type: object category_code: description: |- The category code that 1099Policy creates for a group of similarly classified jobs.

Job category codes are pre-approved by 1099Policy so you can offer contractors insurance to new jobs on your platform in real time.

To generate pre-approved category codes for a group of similarly classified jobs visit the [1099Policy Dashboard](https://dashboard.1099policy.com/jobs). type: string custom_metadata: description: |- Set of key-value pairs that you can attach to an object. Used to store additional information about the job in a structured format.

The `purchase_order_number` key is recognized: invoices created for this job inherit it as their purchase order number (overridable or clearable per invoice via the invoice endpoints). type: object description: description: A description of the job that includes the role, responsibilities and necessary qualifications. type: string entity: description: The ID of an existing entity for whom the job is being done. type: string name: description: The name of the contractor job role. type: string wage: description: A positive integer representing the wage (e.g., 1500 cents is $15.00). The minimum wage amount is $1.00 US. minimum: 100 type: integer wage_type: description: One of `flatfee`, `hourly`, `unit` or `blended`. enum: - flatfee - hourly - unit - blended type: string withhold_premium: description: This indicates whether the contractor is paying premium directly with their credit card (i.e., `false`) or if the contractor has given the platform that's integrating with 1099Policy permission to withhold the premium payment from their wages and pay the premium on the contractor's behalf (i.e., `true`). Defaults to `false`. type: boolean years_experience: description: The number of years of experience required to be eligible for the job. type: integer required: - name - description - wage_type - wage - entity - category_code responses: '201': content: application/json: schema: "$ref": "#/components/schemas/Job" description: Returns the job object if the post succeeded. summary: Create a job tags: - Job "/api/v1/jobs/{job}": delete: description: |2

Delete a job. Deleting a job is only possible if it has no insurance policies associated with it. parameters: - description: The ID of the desired job (e.g., `jb_jsb9KEcTpc`). in: path name: job required: true schema: example: jb_jsb9KEcTpc type: string responses: '200': content: application/json: schema: example: deleted: true deleted_at: 1640995200 id: jb_jsb9KEcTpc object: job properties: deleted: type: boolean deleted_at: description: Unix timestamp (seconds since epoch) of when the job was deleted. type: integer id: description: The job ID. type: string object: default: job type: string description: Returns an object with a deleted parameter on success. Otherwise, this call returns an error. summary: Delete a job tags: - Job get: description: |2

Retrieves the details of an existing job. Supply the unique job ID from either a job creation request or the job list, and 1099Policy will return the corresponding job information. parameters: - description: The ID of the desired job (e.g., `jb_jsb9KEcTpc`). in: path name: job required: true schema: example: jb_jsb9KEcTpc type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Job" description: Returns a job object if a valid job ID was provided. Returns an error otherwise. summary: Retrieve a job tags: - Job put: description: |2

Updates the specific job by setting the values of the parameters passed. Any parameters not provided will be left unchanged. parameters: - description: The ID of the desired job (e.g., `jb_jsb9KEcTpc`). in: path name: job required: true schema: example: jb_jsb9KEcTpc type: string requestBody: content: application/json: example: address: line1: 123 Main St locality: San Francisco postalcode: 94105 region: CA description: Install fiber optic cable from back to the front of the store. entity: en_Ah3tqYn name: Field technician wage: 1500 wage_type: hourly years_experience: 5 schema: properties: address: allOf: - "$ref": "#/components/schemas/Address" description: The job address where the work will be done. Exclude if job will be done remotely. custom_metadata: description: |- Set of key-value pairs that you can attach to an object. Used to store additional information about the job in a structured format.

Creates a new payment session object. requestBody: content: application/json: schema: example: contractor: cn_AbCdEfGh12 return_url: https://app.yourplatform.com/settings/billing/return properties: contractor: description: The public ID of the contractor (e.g., `cn_AbCdEfGh12`). Must belong to your tenant. A contractor ID that does not belong to your tenant returns `404` to avoid leaking existence. type: string return_url: description: HTTPS URL the contractor will be redirected to when the flow terminates. The host must be in your organization's configured `hosted_flow_allowed_redirect_hosts` allowlist. Exact-match only; no wildcards, no suffix matching. URLs with credentials (`user:pass@`) or fragments are rejected. type: string required: - contractor - return_url responses: '201': content: application/json: schema: "$ref": "#/components/schemas/PaymentSession" description: Session created. The `url` field is shown exactly once and contains the single-use token the contractor must land on. '400': description: Invalid input. `invalid_return_url` when the return URL fails scheme / host / allowlist validation. Ensure your organization has `hosted_flow_allowed_redirect_hosts` configured. '403': description: Missing or invalid API key. '404': description: Contractor not found. Returned when the contractor does not exist under your tenant. summary: Create a payment session tags: - Payment Session "/api/v1/payment/sessions/{session}": get: description: |2

Retrieves the payment session with the given ID. parameters: - description: The public ID of the session (`hps_...`). in: path name: session_id required: true schema: example: hps_xyz123 type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/PaymentSession" description: The current session object. '403': description: Missing or invalid API key. '404': description: Session not found. Returned when the id is unknown or belongs to another tenant. summary: Retrieve a payment session tags: - Payment Session "/api/v1/payment/sessions/{session}/cancel": post: description: |2

Cancels the payment session with the given ID. A session can only be cancelled while it is still pending. parameters: - description: The public ID of the session to cancel. in: path name: session_id required: true schema: example: hps_xyz123 type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/PaymentSession" description: 'Session cancelled. The webhook with `event_type: payment.session.cancelled` will follow asynchronously.' '400': description: "`session_not_pending` — the session is already in a terminal state. `session_expired` — the session is past its `expires_at` and the expiry job hasn't flipped it yet." '403': description: Missing or invalid API key. '404': description: Session not found. summary: Cancel a payment session tags: - Payment Session "/api/v1/policies": get: description: |2

Returns a list of policies you've previously created. The policies are returned in sorted order, with the most recent policies appearing first. parameters: - description: A limit on the number of objects to be returned. Limit can range between `1` and `100`, and the default is `10`. explode: true in: query name: limit required: false schema: default: 10 example: 25 maximum: 100 minimum: 1 type: integer - description: A cursor for use in pagination. `starting_after` is an policy ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `pl_fOo123`, your subsequent call can include `starting_after=pl_fOo123` in order to fetch the next page of the list. in: query name: starting_after required: false schema: type: string - description: A cursor for use in pagination. `ending_before` is an policy ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `pl_bAr123`, your subsequent call can include `ending_before=pl_bAr123` in order to fetch the previous page of the list. in: query name: ending_before required: false schema: type: string - description: A filter to return policies by a specific quote ID. in: query name: quote required: false schema: type: string responses: '200': content: application/json: schema: items: "$ref": "#/components/schemas/Policy" type: array description: An array of policies, up to limit. Each entry in the array is a separate policy object. If no more charges are available, the resulting array will be empty. summary: List all policies tags: - Policy post: description: |2

Creates a new policy object. requestBody: content: application/json: schema: properties: effective_date: description: A timestamp used to determine the insurance policy start date. type: string expiration_date: description: A timestemp used to determine the insurance policy end date. type: string quote: description: The ID of the quote used to create the policy. type: string required: - quote responses: '201': content: application/json: schema: "$ref": "#/components/schemas/Policy" description: Returns the policy object if the post succeeded. summary: Create a policy tags: - Policy "/api/v1/policies/{policy}": delete: description: |2

Permanently deletes a policy. Deleting a policy immediately cancels the insurance coverage for the contractor. Any assignments with an effective date after the policy deletion date will also be cancelled. parameters: - description: The ID of the desired policy (e.g., `pl_WzFRszJhoY`). in: path name: policy required: true schema: example: pl_WzFRszJhoY type: string responses: '200': content: application/json: schema: example: deleted: true deleted_at: 1640995200 id: pl_WzFRszJhoY object: policy properties: deleted: type: boolean deleted_at: description: Unix timestamp (seconds since epoch) of when the policy was deleted. type: integer id: description: The policy ID. type: string object: default: policy type: string description: Returns an object with a deleted parameter on success. If the policy ID does not exist, this call returns an error. summary: Delete a policy tags: - Policy get: description: |2

Retrieves the details of an existing policy. Supply the unique policy ID from either a policy creation request or the policy list, and 1099Policy will return the corresponding policy information. parameters: - description: The ID of the desired policy (e.g., `pl_WzFRszJhoY`). in: path name: policy required: true schema: example: pl_WzFRszJhoY type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Policy" description: Returns a policy object if a valid ID was provided. summary: Retrieve a policy tags: - Policy put: description: |2

Policies can be switched on and off using the is_active flag. Use this functionality if you don't have preset policy start and end times. parameters: - description: The ID of the desired policy (e.g., `pl_WzFRszJhoY`). in: path name: policy required: true schema: example: pl_WzFRszJhoY type: string requestBody: content: application/json: example: is_active: false schema: properties: is_active: description: A flag to switch the policy on or off. type: boolean responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Policy" description: Returns the policy object if the update succeeded. Returns an error if update parameters are invalid. summary: Update a policy tags: - Policy "/api/v1/quotes": get: description: |2

Returns a list of quotes you've previously created. The quotes are returned in sorted order, with the most recent quotes appearing first. parameters: - description: A limit on the number of objects to be returned. Limit can range between `1` and `100`, and the default is `10`. explode: true in: query name: limit required: false schema: default: 10 example: 25 maximum: 100 minimum: 1 type: integer - description: A cursor for use in pagination. `starting_after` is an quote ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `qt_fOo123`, your subsequent call can include `starting_after=qt_fOo123` in order to fetch the next page of the list. in: query name: starting_after required: false schema: type: string - description: A cursor for use in pagination. `ending_before` is an quote ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, starting with `qt_bAr123`, your subsequent call can include `ending_before=qt_bAr123` in order to fetch the previous page of the list. in: query name: ending_before required: false schema: type: string responses: '200': content: application/json: schema: items: "$ref": "#/components/schemas/Quote" type: array description: Returns an array of quote objects. If no more quotes are available, the resulting array will be empty. summary: List all quotes tags: - Quote post: description: |2

To provide insurance coverage to contractors on your platform, you first create a `Quote` object. If you use your test API keys, everything will occur as if in production but the policy that's generated will be a test policy. requestBody: content: application/json: schema: properties: bind: default: true description: Controls how the request behaves when the contractor already has a matching policy for the requested coverage. When `true` (the default), the request is rejected with a `contractor_has_matching_policy` error. When `false`, the endpoint behaves like a "get or create" and instead returns the existing quote tied to the matching policy (with a `200` status), so you can surface its rates and fees—for example, to let a returning contractor opt in—without creating a duplicate. Defaults to `true`. type: boolean contractor: description: The ID of the contractor seeking a quote for insurance coverage. type: string coverage_type: description: 'An array of coverage types that can include one or more of the following insurance coverage values: `general`, `professional`, `workers-comp`, `media`, and `cyber`. Note that `media` and `cyber` coverage requires `general` coverage, except for Hawaii (HI) residents where general liability is not available.' items: enum: - general - professional - workers-comp - media - cyber type: string type: array effective_date: description: The date when the insurance coverage is set to take effect. Measured in seconds since the Unix epoch. This date must be set in the future. The default effective_date is the next day. format: int64 type: integer end_date: description: The date when the insurance coverage is set to expire. Measured in seconds since the Unix epoch. This date must be after the effective date. If the end_date is on the same day as the effective_date, it will automatically be adjusted to the start of the next day. The default end_date is 30 days after the effective date. format: int64 type: integer job: description: The ID of the job assignment that the contractor will be working on. type: string required: - job - contractor - coverage_type responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Quote" description: Returned when `bind` is `false` and the contractor already has a matching policy. The body is the existing quote tied to that policy rather than a newly created one. '201': content: application/json: schema: "$ref": "#/components/schemas/Quote" description: Returns the quote object if the post succeeded. summary: Create a quote tags: - Quote "/api/v1/quotes/{quote}": get: description: |2

Retrieves the details of a previously created quote. Supply the unique quote ID that was returned from your previous request, and 1099Policy will return the corresponding quote information. parameters: - description: The ID of the desired quote (e.g., `qt_5DciVga8Kt`). in: path name: quote required: true schema: example: qt_5DciVga8Kt type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Quote" description: Returns a quote object if a valid identifier was provided. summary: Retrieve a quote tags: - Quote put: description: |2

Quotes that aren't bound to an issued policy are fully editable. Once a policy is issued for a quote, the quote becomes uneditable. parameters: - description: The ID of the desired quote (e.g., `qt_5DciVga8Kt`). in: path name: quote required: true schema: example: qt_5DciVga8Kt type: string requestBody: content: application/json: schema: example: contractor: cn_Ehb3bYa coverage_type: - general - workers-comp effective_date: 1646818364 end_date: 1678334737 job: jb_jsb9KEcTpc properties: contractor: description: The ID of the contractor seeking a quote for insurance coverage. type: string coverage_type: description: 'An array of coverage types that can include one or more of the following insurance coverage values: `general`, `professional`, `workers-comp`, `media`, and `cyber`.' items: enum: - general - professional - workers-comp - media - cyber type: string type: array effective_date: description: The date when the insurance coverage is set to take effect. Measured in seconds since the Unix epoch. This date must be set in the future. The default effective_date is the next day. format: int64 type: integer end_date: description: The date when the insurance coverage is set to expire. Measured in seconds since the Unix epoch. This date must be after the effective date. If the end_date is on the same day as the effective_date, it will automatically be adjusted to the start of the next day. The default end_date is 30 days after the effective date. format: int64 type: integer job: description: The ID of the job assignment that the contractor will be working on. type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Quote" description: Returns the quote object if the update succeeded. Returns an error if update parameters are invalid. summary: Update a quote tags: - Quote "/api/v1/webhook_endpoints": get: description: |2

Returns a list of your webhook endpoints. The webhook endpoints are returned sorted by updated date, with the most recently updated webhook endpoints appearing first. parameters: - description: A limit on the number of objects to be returned. Limit can range between `1` and `100`, and the default is `10`. in: query name: limit required: false schema: default: 10 example: 25 maximum: 100 minimum: 1 type: integer responses: '200': content: application/json: schema: items: "$ref": "#/components/schemas/Webhook" type: array description: Returns an array of webhook endpoint objects. If no more webhook endpoints are available, the resulting array will be empty. summary: List all webhook endpoints tags: - Webhook Endpoint post: description: |2

Creates a new webhook endpoint object. requestBody: content: application/json: schema: properties: description: description: A human-readable description of the webhook endpoint. type: string events: description: 'List of event types to subscribe to. If not provided, subscribes to all events. Use "*" to subscribe to all events. Available event types: `policy.active`, `policy.active.media`, `policy.cancelled`, `policy.reactivated`, `application.created`, `application.started`, `application.complete`, `application.expired`, `application.renewed`, `application.ineligible`, `application.manual_review`, `application.manual_review_approved`, `assignment.active`, `assignment.cancelled`, `certificate.flagged`, `certificate.approved`, `certificate.denied`, `invoice.charge_card_failed`, `invoice.charge_card_succeeded`, `category_code.added`' example: - application.complete - application.ineligible - policy.active items: type: string type: array url: description: The URL of the webhook endpoint. type: string required: - url responses: '201': content: application/json: schema: "$ref": "#/components/schemas/Webhook" description: Returns the webhook endpoint object if the post succeeded. summary: Create a webhook endpoint tags: - Webhook Endpoint "/api/v1/webhook_endpoints/{webhook_endpoint}": delete: description: |2

Deletes the specified webhook endpoint. parameters: - description: The ID of the desired webhook endpoint. in: path name: webhook_endpoint required: true schema: type: string responses: '200': content: application/json: schema: example: deleted: true deleted_at: 1640995200 id: whe_KPGc5vEZdvoETu39BNwu2Z object: webhook_endpoint properties: deleted: type: boolean deleted_at: description: Unix timestamp (seconds since epoch) of when the webhook endpoint was deleted. type: integer id: description: The webhook endpoint ID. type: string object: default: webhook_endpoint type: string description: Returns a success message if a valid webhook endpoint ID was provided. Returns an error otherwise. summary: Delete a webhook endpoint tags: - Webhook Endpoint get: description: |2

Retrieves the details of a webhook endpoint. You need only provide the unique webhook endpoint ID. parameters: - description: The ID of the desired webhook endpoint (e.g., whe_KPGc5vEZdvoETu39BNwu2Z). in: path name: webhook_endpoint required: true schema: type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Webhook" description: Returns a webhook endpoint object if a valid ID was provided. summary: Retrieve a webhook endpoint tags: - Webhook Endpoint put: description: |2

Updates the specified webhook endpoint by setting the values of the parameters passed. Any parameters not provided will be left unchanged. parameters: - description: The ID of the desired webhook endpoint (e.g., `whe_KPGc5vEZdvoETu39BNwu2Z`). in: path name: webhook_endpoint required: true schema: example: whe_KPGc5vEZdvoETu39BNwu2Z type: string requestBody: content: application/json: example: description: A webhook endpoint for the example application. events: - application.complete - application.ineligible - policy.active url: https://example.com/my/webhook/endpoint schema: properties: description: description: A human-readable description of the webhook endpoint. type: string events: description: 'List of event types to subscribe to. If not provided, subscribes to all events. Use "*" to subscribe to all events. Available event types: `policy.active`, `policy.active.media`, `policy.cancelled`, `policy.reactivated`, `application.created`, `application.started`, `application.complete`, `application.expired`, `application.renewed`, `application.ineligible`, `application.manual_review`, `application.manual_review_approved`, `assignment.active`, `assignment.cancelled`, `certificate.flagged`, `certificate.approved`, `certificate.denied`, `invoice.charge_card_failed`, `invoice.charge_card_succeeded`, `category_code.added`' example: - application.complete - application.ineligible - policy.active items: type: string type: array url: description: The URL of the webhook endpoint. type: string responses: '200': content: application/json: schema: "$ref": "#/components/schemas/Webhook" description: Returns a webhook endpoint object if a valid webhook endpoint ID was provided. Returns an error otherwise. summary: Update a webhook endpoint tags: - Webhook Endpoint servers: - description: Production server url: https://api.1099policy.com tags: - description: |- A `Contractor` object represents the contractor that can accept one or more jobs on your platform. The API allows you to create, delete, and update contractors. You can retrieve individual contractors as well as a list of all contractors. name: Contractor - description: |- The `Entity` object represents the contracting entity responsible for defining the job descriptions and for hiring contractors.

The API allows you to create, delete, and update entities. You can retrieve individual entities as well as a list of all entities. name: Entity - description: Store representations of the jobs on your platform in `Job` objects. The `Job` is used to, among other things, ensure that the insurance coverage that the 1099Policy platform issues correctly maps to the work that contractors will do. name: Job - description: The job category code object represents the pre-approved job category name and unique code that you receive when you onboard onto 1099Policy. Use this read-only endpoint to get your full list of the job category names and codes that your organization is pre-approved to use. name: Category Code - description: |- A `Certificate` object represents a Certificate of Insurance (COI) document that a contractor has provided to demonstrate they have their own insurance coverage. Use the Certificate API to upload, retrieve, and manage these documents as contractors bring their own insurance to your platform.

When a contractor provides their own Certificate of Insurance, you can upload the PDF document using the Certificate API. The platform will automatically process the document and evaluate it against your organization's pre-defined insurance requirements. This evaluation is performed asynchronously, and you can retrieve the review results to determine whether the certificate satisfies your insurance requirements.

The Certificate API supports retrieving abbreviated review results that provide a summary of the evaluation, or expanded review results that include the full parsed certificate data and detailed audit results for each insurance requirement. Use the `expand` parameter to control the level of detail returned in the response. name: Certificate - description: The `Quote` object reflects whether a contractor is eligible for insurance and the premium owed for every $100 earned. name: Quote - description: |- A `Session` represents the independent contractor's session as they apply for insurance using the application wizard at apply.1099policy.com. You only need to create a `Session` for contractors that don't already have insurance coverage.

Once the contractor successfully completes their insurance application, the `Session` will contain a reference to the Contractor, the Job, and the active insurance Policy.

You can create a `Session` on your server and pass its ID to the client to begin the insurance application. name: Session - description: |- To procure contractor insurance, you create a `Policy` object. You can retrieve individual policies as well as list all policies. Policies are identified by a unique, random ID.

Important note: Creating a policy via the POST endpoint is an exception for most integrations. A policy object is created automatically when a contractor completes their insurance application (see Session API). Contact us if you plan to use the policy POST endpoint. name: Policy - description: "To secure coverage for independent contractors that have previously \ had a policy issued through the 1099Policy platform, you create an `Assignment` object. \n\nIndependent contractors with an existing insurance policy procured \ using the 1099Policy platform have the option to receive per-job-assignment insurance coverage without having to complete additional insurance applications, provided certain eligibility criteria are met. \n\nYou can find the result of the eligibility check in the API response. Eligiblity is determined by parameters provided, including `job` and `contractor`. In particular, we look to see if the job `category_code` is the same as previously approved and time since the independent contractor completed their insurance application.\n\n1099Policy automatically charges the independent contractor's credit card on file, if a credit card exists. 1099Policy first notifies the contractor via email and then charges the contractor the premium amount due 24hrs later." name: Assignment - description: |- Invoices are statements of premium amounts owed by a contractor, based on the contractor's gross pay in the last pay period.

The invoice is used by 1099Policy to determine total funds to charge the contractor or to withdraw from the bank account you connect to the 1099Policy platform if your platform intends to withold insurance premium payments. name: Invoice - description: |- A payment session is a single-use, time-boxed flow that lets one of your contractors add or update their credit card on a secure page hosted by 1099Policy, then return to a URL you control. The contractor reaches the page via a one-time link that 1099Policy issues from your `POST` — the link expires and becomes invalid after the flow completes. Card data never touches your servers; tokenization happens client-side against our PCI-compliant payment provider.

You create a session on your server with the contractor's ID and a `return_url` of your choosing. We return a single-use URL that you redirect the contractor to. When they complete (or cancel) the flow, we redirect them back to your `return_url` and emit a signed `payment.session.completed` (or `.cancelled`, `.expired`) webhook event to the endpoint you have configured for 1099Policy webhooks.

Before using this endpoint, 1099Policy must have configured your organization's allowed `return_url` hostnames. Contact support to onboard.

Query parameters appended to the `return_url` on redirect (`hps_id`, `status`) are for your UX only and must not be the basis for any entitlement decision. The signed webhook is the source of truth for outcome. name: Payment Session - description: |- Webhooks are a way for 1099Policy to communicate with your server. To receive events you can use the `webhook_endpoints` API to register your webhook endpoints.

If you prefer, you can also register and configure your webhook endpoints from the [dashboard](https://dashboard.1099policy.com/webhooks).

When an event occurs, we'll send an HTTP POST request to the registered webhook endpoint. We'll notify your server about events that happen in your 1099Policy account, such as when a contractor starts an insurance application or when a policy is issued. name: Webhook Endpoint - description: |- Events are how we communicate notable activity on an independent contractor's insurance application, policy, and certificate processing. When an event occurs, we create a new Event object. For example, when an insurance application is started, we create an `application.started` event; when a policy is issued, we create a `policy.active` event; and when a certificate evaluation completes, we create certificate events such as `certificate.approved`, `certificate.flagged`, or `certificate.denied`.

API resource state changes trigger events. The state of that resource at the time of the change is embedded in the event's data field. For example, an `application.started` event will contain an insurance application `Session` object, a `policy.active` event will contain a `Policy` object, and certificate events will contain a `Certificate` object with the evaluation results.

These events are sent to your registered webhook endpoint, allowing you to respond immediately when certificate processing completes without needing to poll the API.

Use the events endpoints to retrieve an individual event or a list of events. You can listen for events by registering your server endpoint via the 1099Policy [dashboard](https://dashboard.1099policy.com/webhooks). Our webhooks system send the Event objects directly to your registered endpoint. name: Event x-tagGroups: - name: Core Resources tags: - Contractor - Entity - Job - Category Code - Certificate - Event - name: Insurance tags: - Quote - Session - Policy - Assignment - name: Billing tags: - Invoice - Payment Session - name: Webhooks tags: - Webhook Endpoint - Event x-topics: - content: |- To use the 1099Policy API you need to authenticate requests using API keys. Sign up for a developer account to view and manage your API keys from the 1099Policy Dashboard. [https://dashboard.1099policy.com/signup\](https://dashboard.1099policy.com/signup)

Your API tokens should be guarded closely. As a reminder, do not share your secret API keys in publicly accessible areas such as GitHub or client-side code, for example. Instead use environment variables, web server settings, startup script, or a configuration file that is excluded from your version control.

Test mode secret keys have the prefix `t9k_test_` and live mode secret keys have the prefix `t9k_live_`.

All API requests must be made over HTTPS. Calls made over plain HTTP will fail. API requests without authentication will also fail. example: |- ```curl curl
-X GET https://api.1099policy.com/api/v1/contractors
-H "Authorization: Basic t9k_test_wvnsjtZ8aMlbfGbIm0Lc0" ``` title: Authentication - content: Clients can make requests to either the `sandbox` or `production` environment by using the header `Ten99Policy-Environment` and specifying either `sandbox` or `production`. The default is `sandbox`. example: |- ```curl curl
-X GET https://api.1099policy.com/api/v1/contractors
-H "Authorization: Basic t9k_test_wvnsjtZ8aMlbfGbIm0Lc0"
-H "Ten99Policy-Environment: production" ``` title: Environment - content: |- 1099Policy uses conventional HTTP response codes to indicate the success or failure of an API request. In general, codes in the `2xx` range indicate success. Codes in the `4xx` range indicate an error due to the the information provided (e.g., a required parameter was omitted, a create policy request failed, etc.). Codes in the 5xx range indicate an error with 1099Policy's servers (these are rare).

Some `4xx` errors that could be handled programmatically (e.g., contractor ineligible for coverage) include an error code that briefly explains the error reported.

Handling Errors

Our API libraries raise exceptions for many reasons, such as a failed create policy request, invalid parameters, authentication errors, and network unavailability. We recommend writing code that gracefully handles all possible API exceptions. example: "```basic \n 200 (OK) Everything worked as expected.\n 400 (Bad Request) Check for a missing required parameter.\n 401 (Unauthorized) No valid API key provided.\n 403 (Forbidden) Confirm API key has permissions to make request.\n 404 (Not Found) The requested resource doesn't exist.\n 429 (Too Many Requests) Too many requests to the API too quickly.\n 500 (Server Error) Something went wrong on 1099Policy's end.\n```" title: Errors - content: "The 1099Policy API checks every request header for an an additional `Ten99Policy-Idempotent-Key`. We use this field to perform an idempotency check to avoid duplicate transfers in case of network failures or timeouts. For example, if a request to create a contractor fails to return a response due to a network connection error, you can retry the request with the same idempotency key to guarantee that no more than one contractor is created.\n\n1099Policy's idempotency works by saving the resulting status code and body of the first request made for any given idempotency key, regardless of whether it succeeded or failed. Subsequent requests with the same key return the same result, including `500` errors.\n\nWe suggest using V4 UUIDs, or another random string with enough entropy to avoid collisions.\n\nKeys expire after 24 hours, so a new request is generated if a key is reused outside of that time frame. Results are only saved if an API endpoint started executing. You can safely retry requests that fail validation or conflicts with another request that was executing concurrently. \n\nAll `POST` requests accept idempotency keys. Sending idempotency keys in `GET` and `DELETE` requests has no effect and should be avoided, as these requests are idempotent by definition." example: |- ```curl curl
-X POST https://api.1099policy.com/api/v1/jobs
-u t9k_test_wvnsjtZ8aMlbfGbIm0Lc0:
-H "Ten99Policy-Idempotent-Key: d9YozBtG5R"
-H 'Content-Type: application/json'
-d ... ``` title: Idempotent Requests - content: "All dates and timestamps in the 1099Policy API are represented as Unix timestamps \n(integers) and are always in UTC (Coordinated Universal Time). When sending date \nvalues in API requests, provide them as Unix timestamps representing UTC time.\n\n\n## Date Format\n\n\nDates are represented as Unix timestamps (seconds since January 1, 1970 UTC). \nFor example, `1705312800` represents January 15, 2024 at 10:00:00 AM UTC.\n\n\n## Same-Day Date Handling\n\n\nWhen creating quotes or assignments, if the `end_date` and `effective_date` are \non the same day, the API automatically adjusts the `end_date` to the start of the \nnext day (midnight UTC). This ensures proper date range validation and prevents \nsame-day date conflicts.\n\n\n## Date Validation Rules\n\n\n- `effective_date` must be in the future (with a small grace period for clock skew)\n- `end_date` must be after `effective_date`\n- `end_date` must be within one year of `effective_date`\n- Both dates are validated and normalized to UTC before processing\n\n\nWhen working with dates in your application, ensure you convert local times to \nUTC before sending timestamps to the API. All date comparisons and validations \nperformed by the API use UTC." example: "```basic\n\n{\n \"effective_date\": 1705312800,\n \"end_date\": 1705338000\n}\n\n```\n\n\nIn the example above, both dates are on the same day (January 15, 2024), so the \nAPI will automatically adjust `end_date` to January 16, 2024 00:00:00 UTC." title: Date Handling