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.

Deel Platform Extensions API is one of 8 APIs that Deel publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 3 machine-runnable capabilities that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include Compliance, Background Checks, Immigration, Visas, and Equipment. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 3 Naftiko capability specs.

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 }