openapi: 3.1.0
info:
title: Deel Platform Extensions API
description: |
Specialized platform extensions covering background screenings (KYC/AML), immigration
case management (visa types, business visa eligibility, work permits, right-to-work
cases, document upload), and Deel IT (device provisioning, equipment assets, asset
orders) for distributed workforce hardware management.
version: '2026-05-25'
contact:
name: Deel Developer Support
url: https://developer.deel.com/api/platform/introduction
servers:
- url: https://api.letsdeel.com/rest/v2
description: Production
- url: https://api-sandbox.demo.deel.com/rest/v2
description: Sandbox
security:
- BearerAuth: []
tags:
- name: Screenings
description: KYC and AML background screenings
- name: Immigration
description: Visas, work permits, immigration case management
- name: Deel IT
description: Device provisioning and equipment lifecycle
paths:
/screenings:
get:
operationId: getScreenings
summary: List Background Screenings
tags: [Screenings]
parameters:
- { name: person_id, in: query, schema: { type: string } }
- { name: status, in: query, schema: { type: string, enum: [pending, in_progress, completed, failed, cancelled] } }
responses:
'200':
description: Screenings
content:
application/json:
schema:
type: object
properties:
data: { type: array, items: { $ref: '#/components/schemas/Screening' } }
post:
operationId: createScreening
summary: Create Background Screening
tags: [Screenings]
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/ScreeningCreate' }
responses:
'201':
description: Screening created
content:
application/json:
schema: { $ref: '#/components/schemas/Screening' }
/screenings/{screening_id}:
get:
operationId: getScreening
summary: Retrieve A Screening
tags: [Screenings]
parameters:
- { name: screening_id, in: path, required: true, schema: { type: string } }
responses:
'200':
description: Screening detail
content:
application/json:
schema: { $ref: '#/components/schemas/Screening' }
/immigration/visa-types:
get:
operationId: getVisaTypes
summary: Immigration Visa Types
tags: [Immigration]
parameters:
- { name: country, in: query, schema: { type: string } }
responses:
'200':
description: Visa types
content:
application/json:
schema:
type: object
properties:
data: { type: array, items: { $ref: '#/components/schemas/VisaType' } }
/immigration/business-visa/requirements:
get:
operationId: getBusinessVisaRequirement
summary: Get Business Visa Eligibility And Requirements
tags: [Immigration]
parameters:
- { name: nationality, in: query, required: true, schema: { type: string } }
- { name: destination_country, in: query, required: true, schema: { type: string } }
- { name: purpose, in: query, schema: { type: string } }
responses:
'200':
description: Requirements
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
visa_required: { type: boolean }
visa_types: { type: array, items: { type: string } }
max_stay_days: { type: integer }
requirements: { type: array, items: { type: string } }
/immigration/cases:
get:
operationId: getImmigrationCases
summary: List Of Immigration Cases
tags: [Immigration]
responses:
'200':
description: Cases
content:
application/json:
schema:
type: object
properties:
data: { type: array, items: { $ref: '#/components/schemas/ImmigrationCase' } }
/immigration/cases/{case_id}:
get:
operationId: getImmigrationCase
summary: Get Immigration Case Details
tags: [Immigration]
parameters:
- { name: case_id, in: path, required: true, schema: { type: string } }
responses:
'200':
description: Case detail
content:
application/json:
schema: { $ref: '#/components/schemas/ImmigrationCase' }
/immigration/cases/{case_id}/required-documents/{document_id}:
post:
operationId: uploadRequiredDocument
summary: Upload A Required Immigration Document
tags: [Immigration]
parameters:
- { name: case_id, in: path, required: true, schema: { type: string } }
- { name: document_id, in: path, required: true, schema: { type: string } }
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
required: [file]
properties:
file: { type: string, format: binary }
notes: { type: string }
responses:
'201': { description: Document uploaded }
/deel-it/assets:
get:
operationId: getDeelItAssets
summary: List Deel IT Assets
tags: [Deel IT]
parameters:
- { name: person_id, in: query, schema: { type: string } }
- { name: status, in: query, schema: { type: string, enum: [in_stock, assigned, in_transit, returned, retired] } }
responses:
'200':
description: Assets
content:
application/json:
schema:
type: object
properties:
data: { type: array, items: { $ref: '#/components/schemas/Asset' } }
/deel-it/orders:
post:
operationId: createAssetOrder
summary: Create Asset Order
description: Order a laptop, phone, or other equipment for a worker via Deel IT.
tags: [Deel IT]
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/AssetOrderCreate' }
responses:
'201':
description: Order created
content:
application/json:
schema: { $ref: '#/components/schemas/AssetOrder' }
components:
securitySchemes:
BearerAuth: { type: http, scheme: bearer, bearerFormat: opaque }
schemas:
Screening:
type: object
properties:
id: { type: string }
person_id: { type: string }
type: { type: string, enum: [identity, criminal, credit, employment_history, education, sanctions, aml, kyc] }
status: { type: string, enum: [pending, in_progress, completed, failed, cancelled] }
result: { type: string, enum: [clear, consider, suspected, withdrawn] }
country: { type: string }
created_at: { type: string, format: date-time }
completed_at: { type: string, format: date-time }
report_url: { type: string, format: uri }
ScreeningCreate:
type: object
required: [person_id, type, country]
properties:
person_id: { type: string }
type: { type: string, enum: [identity, criminal, credit, employment_history, education, sanctions, aml, kyc] }
country: { type: string }
consent_obtained: { type: boolean }
VisaType:
type: object
properties:
id: { type: string }
country: { type: string }
name: { type: string }
category: { type: string, enum: [work, business, student, dependent, permanent, other] }
duration_days: { type: integer }
renewable: { type: boolean }
ImmigrationCase:
type: object
properties:
id: { type: string }
person_id: { type: string }
country: { type: string }
visa_type: { type: string }
status: { type: string, enum: [draft, document_collection, in_review, submitted, approved, rejected, completed] }
created_at: { type: string, format: date-time }
target_start_date: { type: string, format: date }
required_documents:
type: array
items:
type: object
properties:
id: { type: string }
name: { type: string }
status: { type: string, enum: [missing, uploaded, approved, rejected] }
Asset:
type: object
properties:
id: { type: string }
type: { type: string, enum: [laptop, monitor, phone, headset, keyboard, mouse, other] }
manufacturer: { type: string }
model: { type: string }
serial: { type: string }
status: { type: string, enum: [in_stock, assigned, in_transit, returned, retired] }
assigned_to_person_id: { type: string }
country: { type: string }
purchase_date: { type: string, format: date }
AssetOrderCreate:
type: object
required: [person_id, items, shipping_address]
properties:
person_id: { type: string }
items:
type: array
items:
type: object
required: [type]
properties:
type: { type: string, enum: [laptop, monitor, phone, headset, keyboard, mouse, other] }
manufacturer: { type: string }
model: { type: string }
quantity: { type: integer, default: 1 }
shipping_address:
type: object
properties:
line1: { type: string }
city: { type: string }
state: { type: string }
postal_code: { type: string }
country: { type: string }
AssetOrder:
type: object
properties:
id: { type: string }
person_id: { type: string }
status: { type: string, enum: [placed, processing, shipped, delivered, cancelled] }
tracking_number: { type: string }
carrier: { type: string }
estimated_delivery: { type: string, format: date }
total_amount: { type: number }
currency: { type: string }