Description

Deel is a global workforce platform that enables companies to hire, manage, and pay contractors and employees across borders, offering built-in compliance, contracts, and localized payment automation.

Products

Fractional Insurance

Automated Certificate Review

Search vendor guides...

Deel Integration Guide

Learn how to extend Deel compliance with 1099Policy to add fractional insurance options for eligible US contractor engagements and automatically validate COIs for active contracts.

1. Overview

Connect Deel contract data to 1099Policy to ensure that every fixed-rate, hourly, or milestone-based engagement is insured or has a validated certificate of insurance (COI) before work begins. This integration automates policy binding, COI validation, and compliance updates between both systems. Insurance placement applies to eligible US contractor engagements and is subject to underwriting and state availability.

By integrating Deel and 1099Policy, you can:

  • Bind per-contract coverage once a contract becomes active
  • Validate and store uploaded Certificates of Insurance (COIs)
  • Sync coverage status with Deel lifecycle events through 1099Policy webhooks (policy.*, certificate.*)
  • Map Deel compensation to job.wage (in cents) and wage_type
  • Persist the Deel Contract ID in custom_metadata.contract_id for reconciliation
Comparing platforms instead of integrating?

See 1099Policy vs. Deel for what each platform does, what each costs, and when to use both together.

2. Integration Flow

Coverage should be bound as soon as a Deel contract is fully executed but before any services or payments occur. This ensures compliance and protection from the start of the engagement.

Deel consolidates contract lifecycle changes into a single status event: inspect the status value in the payload rather than listening for a dedicated activation event.

  • Primary trigger: contract.status.updated with status transitioning to active (Deel Webhooks API)
  • Supporting event: contract.created (pre-stage the contractor record when the IC contract is submitted)
  • Event delivery: Deel Webhooks API (contract.created, contract.status.updated)
  • Required data: contract.id, worker.id, contract_rate.amount, payment_unit, start_date, end_date
  • Authentication: Deel API uses bearer tokens for all requests

3. Core Concepts

Each Deel object maps directly to a 1099Policy resource, ensuring consistent coverage tracking.

Deel Object1099Policy ObjectDescription
ContractJob + AssignmentJob defines scope and rate; Assignment binds coverage to duration
WorkerContractorRepresents the insured individual
Document (COI upload)CertificateBYO-COI intake and validation
Contract IDcustom_metadata.contract_idReconciliation key

4. End-to-End Implementation

This section shows how to retrieve Deel data and create corresponding 1099Policy records step-by-step.

4.1 Create Contractor

Each Deel Worker must exist in 1099Policy as a Contractor before you can create Quotes or Assignments. Every Contractor must include a unique contact.email to ensure tenant-level uniqueness. If Deel does not expose an email address, generate a proxy such as <worker_id>@relay.yourdomain.com.

Deel Field1099Policy ContractorNotes
worker.idcustom_metadata.deel_worker_idReconciliation key
first_name, last_namecontact.first_name, contact.last_nameRequired
emailcontact.emailRequired; use proxy if missing
countryaddress.countryOptional
region / cityaddress.region / address.cityOptional

Source: Deel (REST)


GET https://api.letsdeel.com/rest/v2/workers/{worker_id}
Authorization: Bearer deel_live_***

Destination: 1099Policy (POST /contractors)


POST https://api.1099policy.com/api/v1/contractors
Authorization: Bearer t9k_test_***
Content-Type: application/json
Idempotency-Key: deel-worker-<WORKER_ID>


{
  "contact": {
    "first_name": "Jordan",
    "last_name": "Cruz",
    "email": "w_8831@relay.yourdomain.com"
  },
  "address": {
    "country": "US",
    "region": "NY",
    "city": "New York"
  },
  "custom_metadata": {
    "deel_worker_id": "w_8831"
  }
}

4.2 Create Job

Jobs represent the contract scope, category, and compensation. Create a Job when a Deel contract's status transitions to active.

1099Policy Job FieldDeel SourceNotes
namecontract.titleRole or contract title
descriptioncontract.descriptionScope of work
entityInternal client/account IDMust exist in 1099Policy
category_codejob_family → mapped codeMaintain mapping
wage (cents)contract_rate.amount × 100Required
wage_typepayment_unit"hourly" or "flatfee"Required
regionworker_countryDefaults to contractor region
custom_metadata.contract_idcontract.idReconciliation

Source: Deel (REST)


GET https://api.letsdeel.com/rest/v2/contracts/{contract_id}
Authorization: Bearer deel_live_***

Destination: 1099Policy (POST /jobs)


POST https://api.1099policy.com/api/v1/jobs
Authorization: Bearer t9k_test_***
Content-Type: application/json


{
  "name": "Marketing Design Contract #4451",
  "description": "Create campaign assets and landing pages for Q4 launch",
  "entity": "en_12AbC3",
  "category_code": "MARKETING_DESIGN",
  "wage": 500000,
  "wage_type": "flatfee",
  "region": "US",
  "custom_metadata": { "contract_id": "4451" }
}

4.3 Create Quote

Quotes determine the policy type and coverage duration for the Deel contract.

1099Policy Quote FieldDeel SourceNotes
contractorWorker → Contractor mappingMust exist first
jobReturned Job IDRequired
coverage_type[]Compliance requirementse.g., ["workers-comp","general"]
effective_datestart_date (epoch UTC)Required
end_dateend_date (epoch UTC)Required
custom_metadata.contract_idcontract.idReconciliation key

Source: Deel (REST)


GET https://api.letsdeel.com/rest/v2/contracts/{contract_id}/details
Authorization: Bearer deel_live_***

Destination: 1099Policy (POST /quotes)


POST https://api.1099policy.com/api/v1/quotes
Authorization: Bearer t9k_test_***
Content-Type: application/json


{
  "contractor": "cn_Kh18Qs",
  "job": "jb_Dl9n42",
  "coverage_type": ["workers-comp","general"],
  "effective_date": 1764300000,
  "end_date": 1766892000,
  "custom_metadata": { "contract_id": "4451" }
}

4.4 Create Insurance Application Session

The insurance application session allows the contractor to review and bind their first policy before work begins.

Destination: 1099Policy (POST /apply/sessions)


POST https://api.1099policy.com/api/v1/apply/sessions
Authorization: Bearer t9k_test_***
Content-Type: application/json


{
  "quote": "qt_Pf5LmA",
  "success_url": "https://app.deel.com/contracts/4451?coverage=active",
  "cancel_url": "https://app.deel.com/contracts/4451?coverage=canceled",
  "custom_metadata": { "contract_id": "4451" }
}

One time opt-in

The Worker completes this flow once to activate their first policy. Most applications complete in minutes; some require manual review before coverage binds.

4.5 Create Assignment

Assignments apply coverage automatically for returning contractors who already completed their opt-in.

Destination: 1099Policy (POST /assignments)


POST https://api.1099policy.com/api/v1/assignments
Authorization: Bearer t9k_test_***
Content-Type: application/json


{
  "contractor": "cn_Kh18Qs",
  "job": "jb_Dl9n42",
  "effective_date": 1764300000,
  "end_date": 1766892000,
  "coverage_type": ["workers-comp","general"],
  "custom_metadata": { "contract_id": "4451" }
}

4.6 Upload Certificate (BYO-COI)

If a contractor provides their own COI via Deel’s Documents API, upload it to 1099Policy for validation.

Source: Deel (REST)


GET https://api.letsdeel.com/rest/v2/contracts/{contract_id}/documents
Authorization: Bearer deel_live_***

Destination: 1099Policy (POST /files/certificates)
(multipart upload)

Fields:

  • certificate=@file.pdf
  • contractor=cn_Kh18Qs
  • custom_metadata[contract_id]=4451

4.7 Record Invoice (Optional)

If the contractor’s final pay differs from the original estimate, record the actual remuneration for reconciliation and audit. This step is optional and does not affect insurance coverage.

Destination: 1099Policy (POST /invoices)


POST https://api.1099policy.com/api/v1/invoices
Authorization: Bearer t9k_test_***
Content-Type: application/json


{
  "contractor": "cn_ti8eXviE4A",
  "job": "jb_rajdrwMUKi",
  "gross_pay": 1200,
  "paycycle_startdate": 1714419793,
  "paycycle_enddate": 1714419793
}

Unix timestamp

Use Unix seconds (UTC) for paycycle_startdate and paycycle_enddate. See full API reference: https://docs.1099policy.com/group/endpoint-invoice

5. Webhooks

Webhooks synchronize insurance and contract data across both platforms. Deel contract lifecycle changes arrive as contract.status.updated; branch on the status value in the payload.

SourceEventAction
Deelcontract.status.updated (status → active)Create Job and Quote
Deelcontract.status.updated (amended terms or dates)Adjust Assignment coverage window
Deelcontract.status.updated (status → completed or cancelled)End coverage
1099Policypolicy.activeMark contract as insured
1099Policypolicy.canceled / policy.expiredMark coverage inactive
1099Policycertificate.validatedMark COI as valid
1099Policycertificate.flaggedTrigger compliance review

6. Testing Checklist

Verify that your integration binds coverage and syncs correctly with Deel events.

  • Contractor created with proxy email if missing
  • Job created with wage and category mapping
  • Quote created with valid coverage window
  • Application Session launches and binds coverage
  • Assignment aligns with contract term
  • Webhook endpoint registered and verified against contract.status.updated transitions
  • Certificate uploads validated

7. References

Was this page helpful?

Yes

No

© Copyright 2024. All rights reserved.

© Copyright 2024. All rights reserved.

© Copyright 2024. All rights reserved.