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' }