Deel Platform Extensions API

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.

OpenAPI Specification

deel-platform-extensions-api-openapi.yml Raw ↑
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 }