Remote Contractors API

Manage contractor subscriptions across the Standard, Plus (indemnity), and Contractor-of-Record plans. Surfaces include contractor invoices, scheduled-invoice automation, contract-eligibility checks (powered by Remote's AI misclassification tooling), COR termination requests, and contractor currency catalogs.

OpenAPI Specification

remote-contractors-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Remote Contractors API
  description: |
    Manage contractors and Contractor-of-Record (COR) subscriptions on
    Remote.com. The API supports two contractor offerings:

    - **Contractor Management** — Remote handles localized contracts,
      invoice approval, and payments while the customer remains the
      engaging party.
    - **Contractor of Record (COR)** — Remote becomes the legal engaging
      party, providing uncapped indemnity and IP-transfer protection.

    This API also exposes scheduled-invoice automation, contractor
    currency catalogs, contract-eligibility checks, and COR-termination
    requests.
  version: '2026-05-22'
  contact:
    name: Remote API Support
    url: https://support.remote.com/
  x-logo:
    url: https://remote.com/favicon.ico

servers:
  - url: https://gateway.remote.com/v1
    description: Production
  - url: https://gateway.remote-sandbox.com/v1
    description: Sandbox

security:
  - BearerAuth: []

tags:
  - name: Contractor Subscriptions
    description: Manage contractor plan subscriptions (Standard, Plus, COR)
  - name: Contractor Invoices
    description: List and inspect contractor invoices
  - name: Scheduled Invoices
    description: Schedule recurring contractor invoices
  - name: Contract Eligibility
    description: Verify contractor-vs-employee classification
  - name: COR Termination
    description: Terminate Contractor-of-Record engagements
  - name: Contractor Currencies
    description: List currencies available for contractor payments

paths:
  /contractors/subscriptions:
    get:
      summary: List Contractor Subscriptions
      operationId: listContractorSubscriptions
      tags: [Contractor Subscriptions]
      parameters:
        - { name: employment_id, in: query, schema: { type: string, format: uuid } }
        - { name: plan, in: query, schema: { type: string, enum: [standard, plus, cor] } }
      responses:
        '200':
          description: Subscriptions.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/SubscriptionList' }

  /contractors/{employment_id}/subscriptions/plus:
    parameters:
      - $ref: '#/components/parameters/EmploymentIdPath'
    post:
      summary: Manage Contractor Plus Subscription
      description: Subscribe, change, or cancel the Plus indemnity plan for a contractor.
      operationId: manageContractorPlusSubscription
      tags: [Contractor Subscriptions]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/SubscriptionManageRequest' }
      responses:
        '200':
          description: Updated.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/SubscriptionEnvelope' }

  /contractors/{employment_id}/subscriptions/cor:
    parameters:
      - $ref: '#/components/parameters/EmploymentIdPath'
    post:
      summary: Manage Contractor Of Record Subscription
      description: Subscribe, change, or cancel the Contractor-of-Record subscription.
      operationId: manageCorSubscription
      tags: [Contractor Subscriptions]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/SubscriptionManageRequest' }
      responses:
        '200':
          description: Updated.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/SubscriptionEnvelope' }
    delete:
      summary: Delete Contractor Of Record Subscription
      operationId: deleteCorSubscription
      tags: [Contractor Subscriptions]
      responses:
        '204': { description: Subscription canceled. }

  /contractors/{employment_id}/cor_termination:
    parameters:
      - $ref: '#/components/parameters/EmploymentIdPath'
    get:
      summary: Show COR Termination Request
      operationId: showCorTerminationRequest
      tags: [COR Termination]
      responses:
        '200':
          description: Termination request.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/CorTerminationRequestEnvelope' }
    post:
      summary: Create COR Termination Request
      operationId: createCorTerminationRequest
      tags: [COR Termination]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/CorTerminationRequestCreate' }
      responses:
        '201':
          description: Termination created.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/CorTerminationRequestEnvelope' }

  /contractors/{employment_id}/terminate:
    parameters:
      - $ref: '#/components/parameters/EmploymentIdPath'
    post:
      summary: Terminate A Contractor Of Record Employment
      operationId: terminateContractorOfRecordEmployment
      tags: [COR Termination]
      responses:
        '202':
          description: Termination submitted.

  /contractor_invoices:
    get:
      summary: List Contractor Invoices
      operationId: listContractorInvoices
      tags: [Contractor Invoices]
      parameters:
        - { name: employment_id, in: query, schema: { type: string, format: uuid } }
        - { name: status, in: query, schema: { type: string, enum: [draft, submitted, approved, paid, rejected, void] } }
      responses:
        '200':
          description: Invoices.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/InvoiceList' }

  /contractor_invoices/{contractor_invoice_id}:
    parameters:
      - { name: contractor_invoice_id, in: path, required: true, schema: { type: string, format: uuid } }
    get:
      summary: Show A Contractor Invoice
      operationId: showContractorInvoice
      tags: [Contractor Invoices]
      responses:
        '200':
          description: Invoice.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/InvoiceEnvelope' }

  /scheduled_contractor_invoices:
    get:
      summary: List Scheduled Contractor Invoices
      operationId: listScheduledContractorInvoices
      tags: [Scheduled Invoices]
      responses:
        '200':
          description: Scheduled invoices.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/ScheduledInvoiceList' }

  /scheduled_contractor_invoices/bulk:
    post:
      summary: Bulk Create Scheduled Contractor Invoices
      operationId: bulkCreateScheduledContractorInvoices
      tags: [Scheduled Invoices]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                scheduled_contractor_invoices:
                  type: array
                  items: { $ref: '#/components/schemas/ScheduledInvoiceCreate' }
      responses:
        '201':
          description: Scheduled invoices created.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/ScheduledInvoiceList' }

  /scheduled_contractor_invoices/{scheduled_invoice_id}:
    parameters:
      - { name: scheduled_invoice_id, in: path, required: true, schema: { type: string, format: uuid } }
    get:
      summary: Show A Scheduled Contractor Invoice
      operationId: showScheduledContractorInvoice
      tags: [Scheduled Invoices]
      responses:
        '200':
          description: Scheduled invoice.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/ScheduledInvoiceEnvelope' }
    patch:
      summary: Update A Scheduled Contractor Invoice
      operationId: updateScheduledContractorInvoice
      tags: [Scheduled Invoices]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/ScheduledInvoiceCreate' }
      responses:
        '200':
          description: Updated.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/ScheduledInvoiceEnvelope' }

  /contract_eligibility:
    post:
      summary: Create A Contract Eligibility Check
      description: |
        Submit a contractor classification check that returns a misclassification
        risk score and recommendations. Backed by Remote's AI misclassification tooling.
      operationId: createContractEligibility
      tags: [Contract Eligibility]
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/EligibilityCheckRequest' }
      responses:
        '201':
          description: Eligibility result.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/EligibilityCheckResult' }

  /contract_eligibility/legal_entities:
    get:
      summary: List Contractor Eligibility Legal Entities
      operationId: listContractorEligibilityLegalEntities
      tags: [Contract Eligibility]
      responses:
        '200':
          description: Legal entities.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true

  /contractor_currencies:
    get:
      summary: List Contractor Currencies
      operationId: listContractorCurrencies
      tags: [Contractor Currencies]
      responses:
        '200':
          description: Currencies.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/CurrencyList' }

components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

  parameters:
    EmploymentIdPath:
      name: employment_id
      in: path
      required: true
      schema: { type: string, format: uuid }

  schemas:
    Subscription:
      type: object
      properties:
        id: { type: string, format: uuid }
        employment_id: { type: string, format: uuid }
        plan:
          type: string
          enum: [standard, plus, cor]
        status:
          type: string
          enum: [pending, active, canceled, terminated]
        starts_on: { type: string, format: date }
        ends_on: { type: string, format: date, nullable: true }

    SubscriptionEnvelope:
      type: object
      properties:
        data:
          type: object
          properties:
            subscription: { $ref: '#/components/schemas/Subscription' }

    SubscriptionList:
      type: object
      properties:
        data:
          type: object
          properties:
            subscriptions:
              type: array
              items: { $ref: '#/components/schemas/Subscription' }

    SubscriptionManageRequest:
      type: object
      required: [action]
      properties:
        action:
          type: string
          enum: [subscribe, change, cancel]
        plan:
          type: string
          enum: [standard, plus, cor]
        starts_on: { type: string, format: date }

    Invoice:
      type: object
      properties:
        id: { type: string, format: uuid }
        employment_id: { type: string, format: uuid }
        amount: { type: integer, description: Amount in smallest currency unit. }
        currency: { type: string }
        status:
          type: string
          enum: [draft, submitted, approved, paid, rejected, void]
        period_start: { type: string, format: date }
        period_end: { type: string, format: date }
        issued_at: { type: string, format: date-time }

    InvoiceList:
      type: object
      properties:
        data:
          type: object
          properties:
            contractor_invoices:
              type: array
              items: { $ref: '#/components/schemas/Invoice' }

    InvoiceEnvelope:
      type: object
      properties:
        data:
          type: object
          properties:
            contractor_invoice: { $ref: '#/components/schemas/Invoice' }

    ScheduledInvoice:
      type: object
      properties:
        id: { type: string, format: uuid }
        employment_id: { type: string, format: uuid }
        amount: { type: integer }
        currency: { type: string }
        recurrence:
          type: string
          enum: [one_time, weekly, biweekly, monthly]
        next_run_at: { type: string, format: date-time }

    ScheduledInvoiceCreate:
      type: object
      required: [employment_id, amount, currency, recurrence]
      properties:
        employment_id: { type: string, format: uuid }
        amount: { type: integer }
        currency: { type: string }
        recurrence:
          type: string
          enum: [one_time, weekly, biweekly, monthly]
        starts_on: { type: string, format: date }
        ends_on: { type: string, format: date }
        description: { type: string }

    ScheduledInvoiceList:
      type: object
      properties:
        data:
          type: object
          properties:
            scheduled_contractor_invoices:
              type: array
              items: { $ref: '#/components/schemas/ScheduledInvoice' }

    ScheduledInvoiceEnvelope:
      type: object
      properties:
        data:
          type: object
          properties:
            scheduled_contractor_invoice: { $ref: '#/components/schemas/ScheduledInvoice' }

    CorTerminationRequest:
      type: object
      properties:
        id: { type: string, format: uuid }
        employment_id: { type: string, format: uuid }
        status:
          type: string
          enum: [submitted, review_started, completed, canceled]
        last_day_of_engagement: { type: string, format: date }
        reason: { type: string }

    CorTerminationRequestEnvelope:
      type: object
      properties:
        data:
          type: object
          properties:
            cor_termination_request: { $ref: '#/components/schemas/CorTerminationRequest' }

    CorTerminationRequestCreate:
      type: object
      required: [employment_id, last_day_of_engagement, reason]
      properties:
        employment_id: { type: string, format: uuid }
        last_day_of_engagement: { type: string, format: date }
        reason: { type: string }
        additional_information: { type: object, additionalProperties: true }

    EligibilityCheckRequest:
      type: object
      required: [country_code, work_relationship]
      properties:
        country_code: { type: string }
        work_relationship:
          type: object
          additionalProperties: true
          description: Structured answers to the misclassification questionnaire.

    EligibilityCheckResult:
      type: object
      properties:
        data:
          type: object
          properties:
            risk_level:
              type: string
              enum: [low, medium, high]
            risk_score: { type: integer, minimum: 0, maximum: 100 }
            recommendation:
              type: string
              enum: [proceed_as_contractor, switch_to_eor, request_review]
            findings:
              type: array
              items: { type: string }

    Currency:
      type: object
      properties:
        code: { type: string }
        name: { type: string }
        symbol: { type: string }

    CurrencyList:
      type: object
      properties:
        data:
          type: object
          properties:
            currencies:
              type: array
              items: { $ref: '#/components/schemas/Currency' }