Remote

Global HR and payroll for remote teams

developer.remote.com ↗
Version
0.1.0
OpenAPI
3.0.0
Endpoints
83
Schemas
202
89
Quality
Updated
3 days ago
Hr hr payroll remote-work
Use this API in your AI agent

Query structured spec data via REST or MCP. Get exactly what your agent needs.

Get API Key

Server URLs

https://gateway.remote.com
https://gateway.remote-sandbox.com

Endpoints

Benefitoffers 1 endpoints

GET /v1/benefit-offers/country-summaries

List benefit offers for each country.

operationId: BenefitOffers_listCountrySummaries

Responses

200

Success

404

Not Found

422

Unprocessable Entity

GET /v1/benefit-offers/country-summaries

Benefitoffersbyemployment 1 endpoints

GET /v1/benefit-offers

List benefit offers by employment.

operationId: BenefitOffersByEmployment_listByEmployment

Responses

200

Success

404

Not Found

GET /v1/benefit-offers

Billingdocuments 3 endpoints

GET /v1/billing-documents

List billing documents for a company

operationId: BillingDocuments_list

Parameters

Name In Required Type Description
period query optional string

The month for the billing documents (in ISO-8601 format)

page query optional integer

Starts fetching records after the given page

page_size query optional integer

Change the amount of records returned per page, defaults to 20, limited to 100

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/billing-documents
GET /v1/billing-documents/{billing_document_id}

Shows a billing document details.

Please contact api-support@remote.com to request access to this endpoint.

operationId: BillingDocuments_showDetails

Parameters

Name In Required Type Description
billing_document_id path required string

The billing document’s ID

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Unprocessable Entity

GET /v1/billing-documents/{billing_document_id}
GET /v1/billing-documents/{billing_document_id}/pdf

Downloads a billing document PDF

operationId: BillingDocuments_downloadPdf

Parameters

Name In Required Type Description
billing_document_id path required string

The billing document’s ID

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/billing-documents/{billing_document_id}/pdf

Companies 5 endpoints

GET /v1/companies

List all companies that authorized your integration to act on their behalf. In other words, these are all the companies that your integration can manage. Any company that has completed the authorization flow for your integration will be included in the response.

operationId: Companies_listAll

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/companies
POST /v1/companies

Creates a new company.

### Creating a company with only the required request body parameters
When you call this endpoint and omit all the optional parameters in the request body,
the following resources get created upon a successful response:

  • A new company with status pending.
  • A company owner for the new company with status initiated.

See the update a company endpoint for
more details on how to get your company and its owner to active status.

If you’d like to create a company and its owner with active status in a single request,
please provide the optional address_details parameter as well.

### Accepting the Terms of Service

A required step for creating a company in Remote is to accept our Terms of Service (ToS).

Company managers need to be aware of our Terms of Service and Privacy Policy,
hence it’s the responsibility of our partners to advise and ensure company managers read
and accept the ToS
. The terms have to be accepted only once, before creating a company,
and the Remote API will collect the acceptance timestamp as its confirmation.

To ensure users read the most recent version of Remote’s Terms of Service, their acceptance
must be done within the last fifteen minutes prior the company creation action
.

To retrieve this information, partners can provide an element with any text and a description
explaining that by performing that action they are accepting Remote’s Term of Service. For
instance, the partner can add a checkbox or a “Create Remote Account” button followed by a
description saying “By creating an account, you agree to
Remote’s Terms of Service. Also see Remote’s
Privacy Policy”.

operationId: Companies_createNewCompany

Parameters

Name In Required Type Description
action query optional string

Complementary action(s) to perform when creating a company:

  • get_oauth_access_tokens returns the user’s access and refresh tokens
  • send_create_password_email sends a reset password token to the company owner’s email so they can log in using Remote UI (not needed if integration plans to use SSO only)

If action contains send_create_password_email you can redirect the user to https://employ.remote.com/api-integration-new-password-send

Request Body

Create Company params

application/json
schema CreateCompanyParams
Property Type Required
name string required
tax_number string optional
external_id string optional
country_code string required
email_domain string optional
phone_number string optional
address_details object optional
desired_currency string required
company_owner_name string required
company_owner_email string required
registration_number string optional
bank_account_details object optional
terms_of_service_accepted_at string required

Responses

201

Created

400

Bad Request

403

Forbidden

409

Conflict

422

Unprocessable Entity

429

Unprocessable Entity

POST /v1/companies
GET /v1/companies/{company_id}

Given an ID, shows a company

operationId: Companies_showCompany

Parameters

Name In Required Type Description
company_id path required string

Company ID

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/companies/{company_id}
PATCH /v1/companies/{company_id}

Given an ID and a request object with new information, updates a company.

Getting a company and its owner to active status

If you created a company using the
create a company endpoint without all the required
request body parameters, you can use this endpoint to provide the missing data. Once the company
and its owner have all the necessary data, both their statuses will be set to active and the company
onboarding will be marked as “completed”.

The following constitutes a company with “all the necessary data”:

  • Complete address, with valid address, postal_code, country and state parameters (Varies by country. Use the
    show form schema endpoint to see which address parameters
    are required).
  • Company tax_number or registration_number is not nil
  • Company name is not nil (already required when creating the company)
  • Company has a desired_currency in their bank account (already required when creating the company)
  • Company has accepted terms of service (already required when creating the company)
operationId: Companies_updateCompany

Parameters

Name In Required Type Description
company_id path required string

Company ID

Request Body

Update Company params

application/json
schema UpdateCompanyParams
Property Type Required
name string optional
tax_number string optional
country_code string optional
phone_number string optional
address_details object optional
desired_currency string optional
registration_number string optional
bank_account_details object optional

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

PATCH /v1/companies/{company_id}
PUT /v1/companies/{company_id}

Given an ID and a request object with new information, updates a company.

Getting a company and its owner to active status

If you created a company using the
create a company endpoint without all the required
request body parameters, you can use this endpoint to provide the missing data. Once the company
and its owner have all the necessary data, both their statuses will be set to active and the company
onboarding will be marked as “completed”.

The following constitutes a company with “all the necessary data”:

  • Complete address, with valid address, postal_code, country and state parameters (Varies by country. Use the
    show form schema endpoint to see which address parameters
    are required).
  • Company tax_number or registration_number is not nil
  • Company name is not nil (already required when creating the company)
  • Company has a desired_currency in their bank account (already required when creating the company)
  • Company has accepted terms of service (already required when creating the company)
operationId: Companies_updateCompany

Parameters

Name In Required Type Description
company_id path required string

Company ID

Request Body

Update Company params

application/json
schema UpdateCompanyParams
Property Type Required
name string optional
tax_number string optional
country_code string optional
phone_number string optional
address_details object optional
desired_currency string optional
registration_number string optional
bank_account_details object optional

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

PUT /v1/companies/{company_id}

Companydepartment 2 endpoints

GET /v1/company-departments

Lists all departments for the authorized company specified in the request.

operationId: CompanyDepartment_list

Parameters

Name In Required Type Description
company_id query required string

Company ID

paginate query optional boolean

Paginate option. Default: true. When true, paginates response; otherwise, does not.

page query optional integer

Starts fetching records after the given page

page_size query optional integer

Number of items per page

Responses

200

Success

404

Not Found

422

Unprocessable Entity

GET /v1/company-departments
POST /v1/company-departments

Creates a new department in the specified company. Department names may be non-unique and must be non-empty with no more than 255 characters (Unicode code points).

operationId: CompanyDepartment_createNewDepartment

Request Body

required

Create Company Department request params

application/json
schema CreateCompanyDepartmentParams
Property Type Required
name string required
company_id string required

Responses

201

Created

404

Not Found

422

Unprocessable Entity

POST /v1/company-departments

Companymanagers 4 endpoints

GET /v1/company-managers

List all company managers of an integration. If filtered by the company_id param,
it lists only company managers belonging to the specified company.

operationId: CompanyManagers_listManagers

Parameters

Name In Required Type Description
company_id query optional string

A Company ID to filter the results (only applicable for Integration Partners).

page query optional integer

Starts fetching records after the given page

page_size query optional integer

Change the amount of records returned per page, defaults to 20, limited to 100

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/company-managers
POST /v1/company-managers

Create a Company Manager and sends the invitation email for signing in to the Remote Platform.

operationId: CompanyManagers_createInvite

Request Body

Company Manager params

application/json
schema CompanyManagerParams
Property Type Required
name string required
role string required
email string required
company_id string optional

Responses

201

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

POST /v1/company-managers
DELETE /v1/company-managers/{user_id}

Deletes a Company Manager user

operationId: CompanyManagers_deleteUser

Parameters

Name In Required Type Description
user_id path required string

User ID

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

DELETE /v1/company-managers/{user_id}
GET /v1/company-managers/{user_id}

Shows a single company manager user

operationId: CompanyManagers_showUser

Parameters

Name In Required Type Description
user_id path required string

User ID

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/company-managers/{user_id}

Contractamendments 5 endpoints

GET /v1/contract-amendments

List Contract Amendment requests.

operationId: ContractAmendments_listRequests

Parameters

Name In Required Type Description
page query optional integer

Starts fetching records after the given page

page_size query optional integer

Number of items per page

Responses

200

Success

401

Unauthorized

404

Not Found

422

Unprocessable Entity

GET /v1/contract-amendments
POST /v1/contract-amendments

Creates a Contract Amendment request.

This endpoint requires and returns country-specific data. The exact required and returned fields will
vary depending on which country the employment is in. To see the list of parameters for each country,
see the Show form schema endpoint under the Contract Amendments category.

Please note that the compliance requirements for each country are subject to change according to local
laws. Given its continual updates, using Remote’s json-schema-form should be considered in order to avoid
compliance issues and to have the latest version of a country requirements.

If you are using this endpoint to build an integration, make sure you are dynamically collecting or
displaying the latest parameters for each country by querying the “Show form schema” endpoint.

For more information on JSON Schemas, see the How JSON Schemas work documentation.

To learn how you can dynamically generate forms to display in your UI, see the documentation for
the json-schema-form tool.

operationId: ContractAmendments_createRequest

Request Body

Contract Amendment

application/json
schema CreateContractAmendmentParams
Property Type Required
employment_id string required
contract_amendment object required
amendment_contract_id string required

Responses

200

Success

401

Unauthorized

404

Not Found

422

Unprocessable Entity

POST /v1/contract-amendments
POST /v1/contract-amendments/automatable

Check if a contract amendment request is automatable.
If the contract amendment request is automatable, then after submission, it will instantly amend the employee’s contract
and send them an updated document.

This endpoint requires and returns country-specific data. The exact required and returned fields will
vary depending on which country the employment is in. To see the list of parameters for each country,
see the Show form schema endpoint under the Contract Amendments category.

Please note that the compliance requirements for each country are subject to change according to local
laws. Given its continual updates, using Remote’s json-schema-form should be considered in order to avoid
compliance issues and to have the latest version of a country requirements.

If you are using this endpoint to build an integration, make sure you are dynamically collecting or
displaying the latest parameters for each country by querying the “Show form schema” endpoint.

For more information on JSON Schemas, see the How JSON Schemas work documentation.

To learn how you can dynamically generate forms to display in your UI, see the documentation for
the json-schema-form tool.

operationId: ContractAmendments_checkAutomatability

Request Body

Contract Amendment

application/json
schema CreateContractAmendmentParams
Property Type Required
employment_id string required
contract_amendment object required
amendment_contract_id string required

Responses

200

Success

401

Unauthorized

404

Not Found

422

Unprocessable Entity

POST /v1/contract-amendments/automatable
POST /v1/contract-amendments/schema

Returns the json schema of the contract_amendment form.
This endpoint requires a company access token, as forms are dependent on certain
properties of companies and their current employments.

operationId: ContractAmendments_getFormSchema

Request Body

Contract Amendment Form

application/json
schema ContractAmendmentSchemaParams
Property Type Required
form string optional
country_code string required
employment_id string required

Responses

200

Success

401

Unauthorized

404

Not Found

422

Unprocessable Entity

POST /v1/contract-amendments/schema
GET /v1/contract-amendments/{id}

Show a single Contract Amendment request.

operationId: ContractAmendments_showSingleRequest

Parameters

Name In Required Type Description
id path required string

Contract amendment request ID

Responses

200

Success

401

Unauthorized

404

Not Found

422

Unprocessable Entity

GET /v1/contract-amendments/{id}

Costcalculator 4 endpoints

GET /v1/cost-calculator/countries

Lists active and processing countries

operationId: CostCalculator_listCountries

Responses

200

Success

GET /v1/cost-calculator/countries
POST /v1/cost-calculator/estimation
operationId: CostCalculator_createEmploymentEstimation

Request Body

Estimate params

application/json
schema CostCalculatorEstimateParams
Property Type Required
employments array required
age integer optional
title string optional
region_slug string required
employment_term string optional
annual_gross_salary integer optional
regional_to_employer_exchange_rate string optional
annual_gross_salary_in_employer_currency integer optional
include_benefits boolean optional
employer_currency_slug string required
include_cost_breakdowns boolean optional

Responses

200

Success

404

Not Found

422

Unprocessable Entity

500

Internal Server Error

POST /v1/cost-calculator/estimation
POST /v1/cost-calculator/estimation-pdf
operationId: CostCalculator_generateEstimationPdf

Request Body

Estimate params

application/json
schema CostCalculatorEstimateParams
Property Type Required
employments array required
age integer optional
title string optional
region_slug string required
employment_term string optional
annual_gross_salary integer optional
regional_to_employer_exchange_rate string optional
annual_gross_salary_in_employer_currency integer optional
include_benefits boolean optional
employer_currency_slug string required
include_cost_breakdowns boolean optional

Responses

200

Success

404

Not Found

422

Unprocessable Entity

500

Internal Server Error

POST /v1/cost-calculator/estimation-pdf
GET /v1/cost-calculator/regions/{slug}/fields

Returns required fields JSON Schema for a given region. These are required in order to calculate
the cost of employment for the region. These fields are based on employer contributions that are associated
with the region or any of it’s parent regions.

operationId: CostCalculator_showRegionFields

Parameters

Name In Required Type Description
slug path required string

Slug

Responses

200

Success

401

Unauthorized

500

Internal Server Error

GET /v1/cost-calculator/regions/{slug}/fields

Countries 3 endpoints

GET /v1/countries

Returns a list of all countries that are supported by Remote API alphabetically ordered. The supported list accounts for creating employment with basic information and it does not imply fully onboarding employment via JSON Schema.

operationId: Countries_listAlphabetically

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/countries
GET /v1/countries/{country_code}/holidays/{year}

List all holidays of a country for a specific year. Optionally, it can be filtered by country subdivision.

operationId: Countries_listHolidaysByYear

Parameters

Name In Required Type Description
country_code path required string

Country code according to ISO 3166-1 3-digit alphabetic codes

year path required string

Year for the holidays

country_subdivision_code query optional string

Country subdivision code according to ISO 3166-2 codes

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/countries/{country_code}/holidays/{year}
GET /v1/countries/{country_code}/{form}

Returns the json schema of a supported form. Possible form names are:

- address_details 
- administrative_details 
- bank_account_details 
- employment_basic_information 
- billing_address_details 
- contract_details 
- emergency_contact 
- employment_document_details 
- personal_details 
- pricing_plan_details 

This endpoint requires a company access token, as forms are dependent on certain
properties of companies and their current employments.

operationId: Countries_getFormSchema

Parameters

Name In Required Type Description
country_code path required string

Country code according to ISO 3-digit alphabetic codes

form path required string

Name of the desired form

employment_id query optional string

Required for contract_amendment form

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Unprocessable Entity

GET /v1/countries/{country_code}/{form}

Customfields 2 endpoints

GET /v1/custom-fields

Returns custom fields definitions

operationId: CustomFields_listDefinitions

Parameters

Name In Required Type Description
page query optional integer

Starts fetching records after the given page

page_size query optional integer

Change the amount of records returned per page, defaults to 20, limited to 100

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/custom-fields
GET /v1/custom-fields/{custom_field_id}/values/{employment_id}

Returns a custom field value for a given employment

operationId: CustomFields_showValue

Parameters

Name In Required Type Description
custom_field_id path required string

Custom field ID

employment_id path required string

Employment ID

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/custom-fields/{custom_field_id}/values/{employment_id}

Employmentcontracts 2 endpoints

GET /v1/employment-contracts

Get the employment contract history (list of all contracts active or not) for a given employment.

operationId: EmploymentContracts_getHistory

Parameters

Name In Required Type Description
employment_id query required string

Employment ID

Responses

200

Success

401

Unauthorized

403

Forbidden

404

Not Found

422

Unprocessable Entity

GET /v1/employment-contracts
GET /v1/employment-contracts/{employment_id}/pending-changes

Get all the pending changes (waiting for aproval or signature) for the employment contract.

operationId: EmploymentContracts_getPendingChanges

Parameters

Name In Required Type Description
employment_id path required string

Employment ID

Responses

200

Success

401

Unauthorized

403

Forbidden

404

Not Found

422

Unprocessable Entity

GET /v1/employment-contracts/{employment_id}/pending-changes

Employments 7 endpoints

GET /v1/employments

Lists all employments, except for the deleted ones.

This endpoint requires and returns country-specific data. The exact required and returned fields will
vary depending on which country the employment is in. To see the list of parameters for each country,
see the Show form schema endpoint under the Countries category.

Please note that the compliance requirements for each country are subject to change according to local
laws. Given its continual updates, using Remote’s json-schema-form should be considered in order to avoid
compliance issues and to have the latest version of a country requirements.

If you are using this endpoint to build an integration, make sure you are dynamically collecting or
displaying the latest parameters for each country by querying the “Show form schema” endpoint.

For more information on JSON Schemas, see the How JSON Schemas work documentation.

To learn how you can dynamically generate forms to display in your UI, see the documentation for
the json-schema-form tool.

operationId: Employments_listAll

Parameters

Name In Required Type Description
company_id query optional string

Company ID

email query optional string

Filters the results by employments whose login email matches the value

status query optional string

Filters the results by employments whose status matches the value

page query optional integer

Starts fetching records after the given page

page_size query optional integer

Change the amount of records returned per page, defaults to 20, limited to 100

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/employments
POST /v1/employments

Creates an employment. We support creating employees and contractors.

This endpoint requires and returns country-specific data. The exact required and returned fields will
vary depending on which country the employment is in. To see the list of parameters for each country,
see the Show form schema endpoint under the Countries category.

Please note that the compliance requirements for each country are subject to change according to local
laws. Given its continual updates, using Remote’s json-schema-form should be considered in order to avoid
compliance issues and to have the latest version of a country requirements.

If you are using this endpoint to build an integration, make sure you are dynamically collecting or
displaying the latest parameters for each country by querying the “Show form schema” endpoint.

For more information on JSON Schemas, see the How JSON Schemas work documentation.

To learn how you can dynamically generate forms to display in your UI, see the documentation for
the json-schema-form tool.

operationId: Employments_createEmployment

Request Body

Employment params

application/json
schema EmploymentBasicParams
Property Type Required
type string optional
full_name string required
job_title string required
country_code string required
personal_email string required
basic_information object optional
name string optional
email string optional
job_title string optional
has_seniority_date string optional
provisional_start_date string optional
provisional_start_date string optional

Responses

201

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

POST /v1/employments
GET /v1/employments/{employment_id}

Shows all the information of an employment.

This endpoint requires and returns country-specific data. The exact required and returned fields will
vary depending on which country the employment is in. To see the list of parameters for each country,
see the Show form schema endpoint under the Countries category.

Please note that the compliance requirements for each country are subject to change according to local
laws. Given its continual updates, using Remote’s json-schema-form should be considered in order to avoid
compliance issues and to have the latest version of a country requirements.

If you are using this endpoint to build an integration, make sure you are dynamically collecting or
displaying the latest parameters for each country by querying the “Show form schema” endpoint.

For more information on JSON Schemas, see the How JSON Schemas work documentation.

To learn how you can dynamically generate forms to display in your UI, see the documentation for
the json-schema-form tool.

operationId: Employments_getEmploymentInfo

Parameters

Name In Required Type Description
employment_id path required string

Employment ID

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/employments/{employment_id}
PATCH /v1/employments/{employment_id}

Updates an employment.

For created employments: You can change all basic params and onboarding tasks or perform a per onboarding task update. You can also update basic_information.

For active employments: You can update the manager (manager_id field), emergency_contact_details and address_details.

This endpoint requires and returns country-specific data. The exact required and returned fields will
vary depending on which country the employment is in. To see the list of parameters for each country,
see the Show form schema endpoint under the Countries category.

Please note that the compliance requirements for each country are subject to change according to local
laws. Given its continual updates, using Remote’s json-schema-form should be considered in order to avoid
compliance issues and to have the latest version of a country requirements.

If you are using this endpoint to build an integration, make sure you are dynamically collecting or
displaying the latest parameters for each country by querying the “Show form schema” endpoint.

For more information on JSON Schemas, see the How JSON Schemas work documentation.

To learn how you can dynamically generate forms to display in your UI, see the documentation for
the json-schema-form tool.

Automatically inviting an employee

When you submit the contract_details and pricing_plan_details, Remote should have all the required data to automatically
send an invite to the employee. You can tell if an automatic invite has been sent by looking at the employment_lifecycle_stage
field value. If its value is employee_self_enrollment, it means the employee has received an email to join the Remote platform
at their personal_email.

After an automatic invite is sent to an employee, you will not be able to update employment data through the Remote API.
After onboarding, only a limited set of employment data will be available for updates, such as emergency_contact_details.
If you want to provide additional information for an employment, please make sure to do so before the employee is invited.
We block updates to some employment data because employees need to agree to amendments in certain cases,
such as when there are changes to their contract_details.
Currently, these amendments can only be done through the Remote UI.

Please contact Remote if you need to update contractors via API since it’s currently not supported.

operationId: Employments_updateData

Parameters

Name In Required Type Description
employment_id path required string

Employment ID

Request Body

Employment params

application/json
schema EmploymentFullParams
Property Type Required
manager string optional
full_name string required
job_title string required
company_id string optional
country_code string required
department_id string optional
personal_email string required
address_details object optional
contract_details object optional
personal_details object optional
basic_information object optional
name string optional
email string optional
job_title string optional
has_seniority_date string optional
provisional_start_date string optional
bank_account_details object optional
pricing_plan_details object optional
frequency string optional
administrative_details object optional
provisional_start_date string optional
billing_address_details object optional
emergency_contact_details object optional

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

409

Conflict

422

Unprocessable Entity

429

Too many requests

PATCH /v1/employments/{employment_id}
PUT /v1/employments/{employment_id}

Updates an employment.

For created employments: You can change all basic params and onboarding tasks or perform a per onboarding task update. You can also update basic_information.

For active employments: You can update the manager (manager_id field), emergency_contact_details and address_details.

This endpoint requires and returns country-specific data. The exact required and returned fields will
vary depending on which country the employment is in. To see the list of parameters for each country,
see the Show form schema endpoint under the Countries category.

Please note that the compliance requirements for each country are subject to change according to local
laws. Given its continual updates, using Remote’s json-schema-form should be considered in order to avoid
compliance issues and to have the latest version of a country requirements.

If you are using this endpoint to build an integration, make sure you are dynamically collecting or
displaying the latest parameters for each country by querying the “Show form schema” endpoint.

For more information on JSON Schemas, see the How JSON Schemas work documentation.

To learn how you can dynamically generate forms to display in your UI, see the documentation for
the json-schema-form tool.

Automatically inviting an employee

When you submit the contract_details and pricing_plan_details, Remote should have all the required data to automatically
send an invite to the employee. You can tell if an automatic invite has been sent by looking at the employment_lifecycle_stage
field value. If its value is employee_self_enrollment, it means the employee has received an email to join the Remote platform
at their personal_email.

After an automatic invite is sent to an employee, you will not be able to update employment data through the Remote API.
After onboarding, only a limited set of employment data will be available for updates, such as emergency_contact_details.
If you want to provide additional information for an employment, please make sure to do so before the employee is invited.
We block updates to some employment data because employees need to agree to amendments in certain cases,
such as when there are changes to their contract_details.
Currently, these amendments can only be done through the Remote UI.

Please contact Remote if you need to update contractors via API since it’s currently not supported.

operationId: Employments_updateDetails

Parameters

Name In Required Type Description
employment_id path required string

Employment ID

Request Body

Employment params

application/json
schema EmploymentFullParams
Property Type Required
manager string optional
full_name string required
job_title string required
company_id string optional
country_code string required
department_id string optional
personal_email string required
address_details object optional
contract_details object optional
personal_details object optional
basic_information object optional
name string optional
email string optional
job_title string optional
has_seniority_date string optional
provisional_start_date string optional
bank_account_details object optional
pricing_plan_details object optional
frequency string optional
administrative_details object optional
provisional_start_date string optional
billing_address_details object optional
emergency_contact_details object optional

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

409

Conflict

422

Unprocessable Entity

429

Too many requests

PUT /v1/employments/{employment_id}
POST /v1/employments/{employment_id}/invite

Invite an employment to start the self-enrollment.

Requirements for the invitation to succeed:

  • Employment needs to have the following JSON Schema forms filled: contract_details and pricing_plan_details
  • provisional_start_date must consider the minimum onbaording time of the employment’s country

If there are validations errors, they are returned with a Conflict HTTP Status (409) and a descriptive message.
HTTP Status OK (200) is returned in case of success.

operationId: Employments_inviteStartEnrollment

Parameters

Name In Required Type Description
employment_id path required string

Employment ID

Responses

201

Success

400

Bad Request

409

Conflict

422

Unprocessable Entity

429

Unprocessable Entity

POST /v1/employments/{employment_id}/invite
POST /v1/ready

Completes the employee onboarding. When all tasks are completed, the employee is marked as in review status

operationId: Employments_completeOnboarding

Request Body

required

Employment slug

application/json
schema CompleteOnboarding
Property Type Required
employment_id string optional

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

POST /v1/ready

Expenses 6 endpoints

GET /v1/expenses

Lists all expenses records

operationId: Expenses_listRecords

Parameters

Name In Required Type Description
page query optional integer

Starts fetching records after the given page

page_size query optional integer

Change the amount of records returned per page, defaults to 20, limited to 100

Responses

201

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/expenses
POST /v1/expenses

Creates an approved expense

operationId: Expenses_createApprovedExpense

Request Body

Expenses

application/json
schema ParamsToCreateExpense
Property Type Required
title string required
amount integer required
receipt object optional
name string required
content string required
category string optional
currency string required
receipts array optional
name string required
content string required
timezone string optional
tax_amount integer optional
reviewed_at string optional
reviewer_id string optional
expense_date string required
employment_id string required

Responses

201

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

POST /v1/expenses
GET /v1/expenses/{expense_id}/receipts/{receipt_id}

Download a receipt by id.

operationId: Expenses_downloadReceiptById

Parameters

Name In Required Type Description
expense_id path required string

The expense ID

receipt_id path required string

The receipt ID

Responses

200

Success

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

422

Unprocessable Entity

429

Unprocessable Entity

500

Internal Server Error

GET /v1/expenses/{expense_id}/receipts/{receipt_id}
GET /v1/expenses/{id}

Shows a single expense record

operationId: Expenses_showRecord

Parameters

Name In Required Type Description
id path required string

Expense ID

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/expenses/{id}
PATCH /v1/expenses/{id}

Updates an expense

operationId: Expenses_updateRecord

Parameters

Name In Required Type Description
id path required string

Expense ID

Request Body

Expenses

application/json
schema UpdateExpenseParams

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

409

Conflict

422

Unprocessable Entity

429

Too many requests

PATCH /v1/expenses/{id}
PUT /v1/expenses/{id}

Updates an expense

operationId: Expenses_updateExpense

Parameters

Name In Required Type Description
id path required string

Expense ID

Request Body

Expenses

application/json
schema UpdateExpenseParams

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

409

Conflict

422

Unprocessable Entity

429

Too many requests

PUT /v1/expenses/{id}

Files 2 endpoints

POST /v1/documents

Uploads a file associated with a specified employment.

Please contact api-support@remote.com to request access to this endpoint.

operationId: Files_uploadEmploymentFile

Request Body

required

The file to be uploaded

multipart/form-data
schema FileParams
Property Type Required
file string required
type string required
employment_id string required

Responses

201

Created

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

POST /v1/documents
GET /v1/files/{id}

Downloads a file.

Please contact api-support@remote.com to request access to this endpoint.

operationId: Files_downloadFile

Parameters

Name In Required Type Description
id path required string

File ID

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/files/{id}

Identity 1 endpoints

GET /v1/identity/current

Shows information about the entities that can be controlled by the current auth token.

operationId: Identity_getTokenInfo

Responses

201

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/identity/current

Identityverification 1 endpoints

GET /v1/identity-verification/{employment_id}

Gets necessary information to perform the identity verification of an employee.

operationId: IdentityVerification_getEmploymentProfile

Parameters

Name In Required Type Description
employment_id path required string

Employment ID

Responses

201

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/identity-verification/{employment_id}

Incentives 1 endpoints

GET /v1/incentives

Lists all Incentives of a company

operationId: Incentives_listAll

Parameters

Name In Required Type Description
employment_id query optional string

Filter by Employment ID

status query optional string

Filter by Incentive status

recurring_incentive_id query optional string

Filter by Recurring Incentive id

page query optional integer

Starts fetching records after the given page

page_size query optional integer

Change the amount of records returned per page, defaults to 20, limited to 100

Responses

200

Success

400

Bad Request

401

Unauthorized

404

Not Found

422

Unprocessable Entity

429

Too many requests

GET /v1/incentives

Schemas

object ActionError
{
  "type": "object",
  "title": "ActionError",
  "required": [
    "code",
    "message",
    "action"
  ],
  "x-struct": null,
  "properties": {
    "code": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "An error code that describes the nature of the error."
    },
    "action": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "The action that lead to the error message."
    },
    "message": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "A developer friendly error message that gives details on what the error was and how it may be remedied."
    }
  },
  "x-validate": null
}
array ActionErrors
{
  "type": "array",
  "items": {
    "$ref": "#/components/schemas/ActionError"
  },
  "title": "ActionErrors",
  "x-struct": null,
  "x-validate": null
}
string AmountTaxType
{
  "enum": [
    "gross",
    "net"
  ],
  "type": "string",
  "title": "AmountTaxType",
  "example": "net",
  "x-struct": null,
  "x-validate": null,
  "description": "  Whether the amount given accounts for taxes or not.\n\n  `gross` indicates that the amount given is the amount to be paid before taxes\n  are subtracted.\n\n  `net` indicates that the amount given is the amount which will be paid to the\n  employee after taxes. Remote will gross this up to ensure the taxes are\n  included and employee receives the amount requested without further reduction.\n"
}
object ApproveExpenseParams
{
  "type": "object",
  "title": "ApproveExpenseParams",
  "example": {
    "status": "approved"
  },
  "required": [
    "status"
  ],
  "x-struct": null,
  "properties": {
    "status": {
      "enum": [
        "approved"
      ],
      "type": "string",
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "Approve an expense"
}
object AuthorizationCodeParams
{
  "type": "object",
  "title": "AuthorizationCodeParams",
  "example": {
    "code": "eyJhbG...xb6H0",
    "grant_type": "authorization_code"
  },
  "required": [
    "grant_type",
    "code"
  ],
  "x-struct": null,
  "properties": {
    "code": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "The authorization code generated in Authorization Code flow"
    },
    "grant_type": {
      "enum": [
        "authorization_code"
      ],
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "The Authorization flow"
    }
  },
  "x-validate": null
}
object AuthorizationCodeResponse
{
  "type": "object",
  "allOf": [
    {
      "$ref": "#/components/schemas/BaseTokenResponse"
    },
    {
      "type": "object",
      "example": {
        "user_id": "6550e536-8655-4bce-8bd9-b295f786ad71",
        "company_id": "6e60f5f9-e6a6-4b04-b13c-84bced848bab",
        "expires_in": 7200,
        "token_type": "Bearer",
        "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.cThIIoDvwdueQB468K5xDc5633seEFoqwxjF_xSJyQQ",
        "refresh_token": "b480036a-d229-49ef-a606-7e8fba58a5eb"
      },
      "x-struct": null,
      "properties": {
        "user_id": {
          "type": "string",
          "x-struct": null,
          "x-validate": null,
          "description": "The ID of the user who connected the company."
        },
        "company_id": {
          "type": "string",
          "x-struct": null,
          "x-validate": null,
          "description": "The ID of the connected company."
        },
        "refresh_token": {
          "type": "string",
          "x-struct": null,
          "x-validate": null,
          "description": "The refresh token. This token must be stored and used for issuing new access tokens for managing the company's resources."
        }
      },
      "x-validate": null
    }
  ],
  "title": "AuthorizationCodeResponse",
  "x-struct": null,
  "x-validate": null
}
object BadRequestResponse
{
  "type": "object",
  "oneOf": [
    {
      "type": "object",
      "required": [
        "message"
      ],
      "x-struct": null,
      "properties": {
        "message": {
          "type": "string",
          "x-struct": null,
          "x-validate": null
        }
      },
      "x-validate": null
    },
    {
      "type": "object",
      "x-struct": null,
      "properties": {
        "message": {
          "type": "object",
          "required": [
            "code",
            "message"
          ],
          "x-struct": null,
          "properties": {
            "code": {
              "type": "string",
              "x-struct": null,
              "x-validate": null
            },
            "message": {
              "type": "string",
              "x-struct": null,
              "x-validate": null
            }
          },
          "x-validate": null
        }
      },
      "x-validate": null
    }
  ],
  "title": "BadRequestResponse",
  "example": {
    "message": "invalid {resource}"
  },
  "x-struct": null,
  "x-validate": null
}
object Base64File
{
  "type": "object",
  "title": "Base64File",
  "example": {
    "name": "receipt.pdf",
    "content": "UGVyaW9kIEVuZCBEYXRlLFBheSBEYXRlLEVtcG...5jZSBPZiBSZXNpZGVuYdXJyZW50LEFsbG93"
  },
  "required": [
    "name",
    "content"
  ],
  "x-struct": null,
  "properties": {
    "name": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "The file name."
    },
    "content": {
      "type": "string",
      "format": "binary",
      "x-struct": null,
      "x-validate": null,
      "description": "The content in base64 encoding."
    }
  },
  "x-validate": null,
  "description": "All the params needed upload a base64 file."
}
object BaseTokenResponse
{
  "type": "object",
  "title": "BaseTokenResponse",
  "example": {
    "expires_in": 7200,
    "token_type": "Bearer",
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.cThIIoDvwdueQB468K5xDc5633seEFoqwxjF_xSJyQQ"
  },
  "x-struct": null,
  "properties": {
    "expires_in": {
      "type": "integer",
      "format": "int32",
      "x-struct": null,
      "x-validate": null,
      "description": "Number of seconds until token is expired."
    },
    "token_type": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "The type of the token. For now, always `Bearer`."
    },
    "access_token": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "A JWT token."
    }
  },
  "x-validate": null
}
object Benefit
{
  "type": "object",
  "title": "Benefit",
  "example": {
    "id": "562977cfd-cf60-4cf4-a70f-ac2061d709088X",
    "name": "benefit name",
    "type": "benefit type",
    "costs": {
      "employee_cost": 234,
      "employer_cost": 44
    },
    "status": "enrolled",
    "provider": {
      "id": "88297cfd-cf60-4cf4-a70f-ac2861d92b87X",
      "name": "Health Provider"
    },
    "projected_costs": null,
    "coverage_end_date": "2025-02-28",
    "coverage_start_date": "2024-03-18"
  },
  "required": [
    "id",
    "status",
    "name",
    "type",
    "coverage_start_date",
    "coverage_end_date",
    "provider",
    "costs",
    "projected_costs"
  ],
  "x-struct": null,
  "properties": {
    "id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "name": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "type": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "costs": {
      "$ref": "#/components/schemas/Costs"
    },
    "status": {
      "enum": [
        "initiated",
        "enrolled",
        "waived"
      ],
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "provider": {
      "$ref": "#/components/schemas/BenefitProvider"
    },
    "projected_costs": {
      "$ref": "#/components/schemas/Costs"
    },
    "coverage_end_date": {
      "type": "string",
      "format": "date",
      "x-struct": null,
      "x-validate": null
    },
    "coverage_start_date": {
      "type": "string",
      "format": "date",
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "Benefits with status enrolled have their summed costs in costs.\nBenefits with status initiated have their summed costs in projected_costs.\nBenefit-offers where the employer opted-out have benefit_tier: null in the response.\n"
}
object BenefitGroup
{
  "type": "object",
  "title": "BenefitGroup",
  "example": {
    "id": "54297cfd-cf60-4cf4-a70f-ac2061d72b44X",
    "name": "Health",
    "policy_end_date": "2024-12-31",
    "policy_start_date": "2024-01-01"
  },
  "required": [
    "id",
    "name",
    "policy_start_date",
    "policy_end_date"
  ],
  "x-struct": null,
  "properties": {
    "id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "name": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "policy_end_date": {
      "type": "string",
      "format": "date",
      "x-struct": null,
      "x-validate": null
    },
    "policy_start_date": {
      "type": "string",
      "format": "date",
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null
}
object BenefitOffer
{
  "type": "object",
  "title": "BenefitOffer",
  "example": {
    "costs": {
      "employee_cost": 234,
      "employer_cost": 44
    },
    "benefits": [
      {
        "id": "562977cfd-cf60-4cf4-a70f-ac2061d709088",
        "name": "benefit name",
        "type": "benefit type",
        "costs": {
          "employee_cost": 234,
          "employer_cost": 44
        },
        "status": "enrolled",
        "provider": {
          "id": "88297cfd-cf60-4cf4-a70f-ac2861d92b87X",
          "name": "Health Provider"
        },
        "projected_costs": null,
        "coverage_end_date": "2025-02-28",
        "coverage_start_date": "2024-03-18"
      }
    ],
    "benefit_tier": {
      "id": "66297cfd-cf60-4cf4-a70f-ac2561d92b04X",
      "name": "Premium 2023 (Medical, Dental and Vision)",
      "providers": [
        {
          "id": "88297cfd-cf60-4cf4-a70f-ac2861d92b87X",
          "name": "Health Provider"
        }
      ]
    },
    "benefit_group": {
      "id": "54297cfd-cf60-4cf4-a70f-ac2061d72b44X",
      "name": "Health",
      "policy_end_date": "2024-12-31",
      "policy_start_date": "2024-01-01"
    }
  },
  "required": [
    "benefit_group",
    "benefit_tier",
    "costs",
    "benefits"
  ],
  "x-struct": null,
  "properties": {
    "costs": {
      "$ref": "#/components/schemas/Costs"
    },
    "benefits": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/Benefit"
      },
      "x-struct": null,
      "x-validate": null
    },
    "benefit_tier": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/components/schemas/BenefitTier"
        }
      ],
      "title": "MaybeBenefitTier",
      "example": {
        "id": "66297cfd-cf60-4cf4-a70f-ac2561d92b04X",
        "name": "Premium 2023 (Medical, Dental and Vision)",
        "providers": [
          {
            "id": "88297cfd-cf60-4cf4-a70f-ac2861d92b87X",
            "name": "Health Provider"
          }
        ]
      },
      "nullable": true,
      "x-struct": null,
      "x-validate": null
    },
    "benefit_group": {
      "$ref": "#/components/schemas/BenefitGroup"
    }
  },
  "x-validate": null
}
object BenefitOfferByEmploymentResponse
{
  "type": "object",
  "title": "BenefitOfferByEmploymentResponse",
  "example": {
    "data": {
      "currency": [
        {
          "code": "EUR",
          "name": "European Euro",
          "slug": "eur-3b840951-099f-4bd5-90b9-032f7bfe51d9",
          "symbol": "€"
        }
      ],
      "company_id": "79297cfd-cf60-4cf4-a70f-ac2061d72a74",
      "benefit_offers_by_employment": [
        {
          "costs": {
            "employee_cost": 234,
            "employer_cost": 44
          },
          "employment": {
            "id": "67897cfd-cf60-4cf4-a70f-ac2061d72984X",
            "name": "Name",
            "country": {
              "code": "PRT",
              "name": "Portugal",
              "alpha_2_code": "PT",
              "country_subdivisions": [
                {
                  "code": "PT-06",
                  "name": "Coimbra",
                  "subdivision_type": "District"
                },
                {
                  "code": "PT-11",
                  "name": "Lisboa",
                  "subdivision_type": "District"
                }
              ],
              "supported_json_schemas": [
                "additional_documents",
                "address_details",
                "administrative_details",
                "employment-basic-information",
                "bank_account_details",
                "contract_details",
                "emergency_contact"
              ]
            },
            "surname": "Surname",
            "given_name": "Given Name"
          },
          "benefit_offers": [
            {
              "costs": {
                "employee_cost": 234,
                "employer_cost": 44
              },
              "benefits": [
                {
                  "id": "562977cfd-cf60-4cf4-a70f-ac2061d709088X",
                  "name": "benefit name",
                  "type": "benefit type",
                  "costs": {
                    "employee_cost": 234,
                    "employer_cost": 44
                  },
                  "status": "enrolled",
                  "provider": {
                    "id": "88297cfd-cf60-4cf4-a70f-ac2861d92b87X",
                    "name": "Health Provider"
                  },
                  "projected_costs": null,
                  "coverage_end_date": "2025-02-28",
                  "coverage_start_date": "2024-03-18"
                }
              ],
              "benefit_tier": {
                "id": "66297cfd-cf60-4cf4-a70f-ac2561d92b04X",
                "name": "Premium 2023 (Medical, Dental and Vision)",
                "providers": [
                  {
                    "id": "88297cfd-cf60-4cf4-a70f-ac2861d92b87X",
                    "name": "Health Provider"
                  }
                ]
              },
              "benefit_group": {
                "id": "54297cfd-cf60-4cf4-a70f-ac2061d72b44X",
                "name": "Health",
                "policy_end_date": "2024-12-31",
                "policy_start_date": "2024-01-01"
              }
            }
          ]
        }
      ]
    }
  },
  "required": [
    "data"
  ],
  "x-struct": null,
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "benefit_offers_by_employment",
        "company_id",
        "currency"
      ],
      "x-struct": null,
      "properties": {
        "currency": {
          "$ref": "#/components/schemas/Currency"
        },
        "company_id": {
          "type": "string",
          "x-struct": null,
          "x-validate": null
        },
        "benefit_offers_by_employment": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/BenefitOffersByEmployment"
          },
          "x-struct": null,
          "x-validate": null
        }
      },
      "x-validate": null
    }
  },
  "x-validate": null
}
object BenefitOffersByEmployment
{
  "type": "object",
  "title": "BenefitOffersByEmployment",
  "example": {
    "costs": {
      "employee_cost": 234,
      "employer_cost": 44
    },
    "employment": {
      "id": "67897cfd-cf60-4cf4-a70f-ac2061d72984X",
      "name": "Name",
      "country": {
        "code": "PRT",
        "name": "Portugal",
        "alpha_2_code": "PT",
        "country_subdivisions": [
          {
            "code": "PT-06",
            "name": "Coimbra",
            "subdivision_type": "District"
          },
          {
            "code": "PT-11",
            "name": "Lisboa",
            "subdivision_type": "District"
          }
        ],
        "supported_json_schemas": [
          "additional_documents",
          "address_details",
          "administrative_details",
          "employment-basic-information",
          "bank_account_details",
          "contract_details",
          "emergency_contact"
        ]
      },
      "surname": "Surname",
      "given_name": "Given Name"
    },
    "benefit_offers": [
      {
        "costs": {
          "employee_cost": 234,
          "employer_cost": 44
        },
        "benefits": [
          {
            "id": "562977cfd-cf60-4cf4-a70f-ac2061d709088X",
            "name": "benefit name",
            "type": "benefit type",
            "costs": {
              "employee_cost": 234,
              "employer_cost": 44
            },
            "status": "enrolled",
            "provider": {
              "id": "88297cfd-cf60-4cf4-a70f-ac2861d92b87X",
              "name": "Health Provider"
            },
            "projected_costs": null,
            "coverage_end_date": "2025-02-28",
            "coverage_start_date": "2024-03-18"
          }
        ],
        "benefit_tier": {
          "id": "66297cfd-cf60-4cf4-a70f-ac2561d92b04X",
          "name": "Premium 2023 (Medical, Dental and Vision)",
          "providers": [
            {
              "id": "88297cfd-cf60-4cf4-a70f-ac2861d92b87X",
              "name": "Health Provider"
            }
          ]
        },
        "benefit_group": {
          "id": "54297cfd-cf60-4cf4-a70f-ac2061d72b44X",
          "name": "Health",
          "policy_end_date": "2024-12-31",
          "policy_start_date": "2024-01-01"
        }
      }
    ]
  },
  "required": [
    "employment",
    "costs",
    "benefit_offers"
  ],
  "x-struct": null,
  "properties": {
    "costs": {
      "$ref": "#/components/schemas/Costs"
    },
    "employment": {
      "$ref": "#/components/schemas/Employment"
    },
    "benefit_offers": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/BenefitOffer"
      },
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null
}
object BenefitProvider
{
  "type": "object",
  "title": "BenefitProvider",
  "example": {
    "id": "88297cfd-cf60-4cf4-a70f-ac2861d92b87X",
    "name": "Health Provider"
  },
  "required": [
    "id",
    "name"
  ],
  "x-struct": null,
  "properties": {
    "id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "name": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null
}
object BenefitTier
{
  "type": "object",
  "title": "BenefitTier",
  "example": {
    "id": "66297cfd-cf60-4cf4-a70f-ac2561d92b04X",
    "name": "Premium 2023 (Medical, Dental and Vision)",
    "providers": [
      {
        "id": "88297cfd-cf60-4cf4-a70f-ac2861d92b87X",
        "name": "Health Provider"
      }
    ]
  },
  "required": [
    "id",
    "name",
    "providers"
  ],
  "x-struct": null,
  "properties": {
    "id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "name": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "providers": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/BenefitProvider"
      },
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null
}
object BillingDocument
{
  "type": "object",
  "title": "BillingDocument",
  "example": {
    "id": "8772a9f1-b43c-46be-a1ce-e50b6819f5eeX",
    "items": [
      {
        "type": "base_salary",
        "employment_id": "0d25c513-employment-id-198557128104",
        "source_amount": 50000,
        "source_currency": "EUR",
        "billing_document_amount": 1000000,
        "billing_document_currency": "CAD"
      }
    ],
    "total": 1100000,
    "company_id": "2f889520-9a21-44b0-990d-e4ae37d8db53",
    "issued_date": "2023-08-22",
    "billing_document_type": "reconciliation_invoice",
    "billing_document_period": "2021-12",
    "billing_document_currency": "EUR"
  },
  "required": [
    "company_id",
    "id",
    "billing_document_period",
    "issued_date",
    "billing_document_type",
    "billing_document_currency",
    "total",
    "items"
  ],
  "x-struct": null,
  "properties": {
    "id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "items": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/BillingDocumentAmountItem"
      },
      "x-struct": null,
      "x-validate": null
    },
    "total": {
      "type": "integer",
      "x-struct": null,
      "x-validate": null
    },
    "company_id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "issued_date": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "billing_document_type": {
      "enum": [
        "reconciliation_invoice",
        "prefunding_invoice",
        "supplemental_service_invoice",
        "reconciliation_credit_note"
      ],
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "billing_document_period": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "billing_document_currency": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "Information of a billing document"
}
object BillingDocumentAmountItem
{
  "type": "object",
  "title": "BillingDocumentAmountItem",
  "example": {
    "type": "base_salary",
    "employment_id": "0d25c513-employment-id-198557128104",
    "source_amount": 50000,
    "source_currency": "EUR",
    "billing_document_amount": 1000000,
    "billing_document_currency": "CAD"
  },
  "required": [
    "type",
    "billing_document_amount",
    "billing_document_currency"
  ],
  "x-struct": null,
  "properties": {
    "type": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "employment_id": {
      "type": "string",
      "nullable": true,
      "x-struct": null,
      "x-validate": null
    },
    "source_amount": {
      "type": "integer",
      "nullable": true,
      "x-struct": null,
      "x-validate": null
    },
    "source_currency": {
      "type": "string",
      "nullable": true,
      "x-struct": null,
      "x-validate": null
    },
    "billing_document_amount": {
      "type": "integer",
      "nullable": true,
      "x-struct": null,
      "x-validate": null
    },
    "billing_document_currency": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null
}
object BillingDocumentResponse
{
  "type": "object",
  "title": "BillingDocumentResponse",
  "example": {
    "data": {
      "billing_document": {
        "id": "8772a9f1-b43c-46be-a1ce-e50b6819f5eeX",
        "items": [
          {
            "type": "base_salary",
            "employment_id": "0d25c513-employment-id-198557128104",
            "source_amount": 50000,
            "source_currency": "EUR",
            "billing_document_amount": 1000000,
            "billing_document_currency": "CAD"
          }
        ],
        "total": 1100000,
        "company_id": "2f889520-9a21-44b0-990d-e4ae37d8db53",
        "issued_date": "2023-08-22",
        "billing_document_type": "reconciliation_invoice",
        "billing_document_period": "2021-12",
        "billing_document_currency": "EUR"
      }
    }
  },
  "required": [
    "data"
  ],
  "x-struct": null,
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "billing_document"
      ],
      "x-struct": null,
      "properties": {
        "billing_document": {
          "$ref": "#/components/schemas/BillingDocument"
        }
      },
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "Information of a billing document"
}
object BillingDocumentsResponse
{
  "type": "object",
  "title": "BillingDocumentsResponse",
  "example": {
    "data": {
      "total_count": 1,
      "total_pages": 1,
      "current_page": 1,
      "billing_documents": [
        {
          "id": "8772a9f1-b43c-46be-a1ce-e50b6819f5ee",
          "billing_document_type": "base_salary",
          "billing_document_period": "2023-12"
        }
      ]
    }
  },
  "required": [
    "data"
  ],
  "x-struct": null,
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "billing_documents",
        "current_page",
        "total_pages",
        "total_count"
      ],
      "x-struct": null,
      "properties": {
        "total_count": {
          "type": "integer",
          "example": 100,
          "x-struct": null,
          "x-validate": null,
          "description": "The total number of records returned counting all pages"
        },
        "total_pages": {
          "type": "integer",
          "example": 10,
          "x-struct": null,
          "x-validate": null,
          "description": "The total number of pages the user can go through"
        },
        "current_page": {
          "type": "integer",
          "example": 1,
          "x-struct": null,
          "x-validate": null,
          "description": "The current page among all of the total_pages"
        },
        "billing_documents": {
          "type": "array",
          "items": {
            "x-struct": null,
            "properties": {
              "id": {
                "type": "string",
                "x-struct": null,
                "x-validate": null
              },
              "billing_document_type": {
                "enum": [
                  "reconciliation_invoice",
                  "prefunding_invoice",
                  "supplemental_service_invoice",
                  "reconciliation_credit_note"
                ],
                "type": "string",
                "x-struct": null,
                "x-validate": null
              },
              "billing_document_period": {
                "type": "string",
                "x-struct": null,
                "x-validate": null
              }
            },
            "x-validate": null
          },
          "x-struct": null,
          "x-validate": null
        }
      },
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "Information about a list of billing documents"
}
object ClientCredentialsParams
{
  "type": "object",
  "title": "ClientCredentialsParams",
  "example": {
    "client_id": "<client_id>",
    "grant_type": "client_credentials"
  },
  "required": [
    "grant_type",
    "client_id"
  ],
  "x-struct": null,
  "properties": {
    "client_id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "The client id generated during registration"
    },
    "grant_type": {
      "enum": [
        "client_credentials"
      ],
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "The Authorization flow"
    }
  },
  "x-validate": null
}
object CommonIncentiveParams
{
  "type": "object",
  "title": "CommonIncentiveParams",
  "example": {
    "note": "Bonus for moving start date to an earlier date",
    "amount": 50000,
    "effective_date": "2021-12-20",
    "amount_tax_type": "net"
  },
  "x-struct": null,
  "properties": {
    "note": {
      "type": "string",
      "nullable": true,
      "x-struct": null,
      "x-validate": null
    },
    "amount": {
      "type": "integer",
      "x-struct": null,
      "x-validate": null,
      "description": "The amount (in the currency of the employment) to be given to the employee.\n\nThis field accepts fractional amounts as well. However to avoid precision issues\nand errors that can arise from storing fractional amounts, the Remote API only\naccepts currencies and their fractional amounts as integers. This means you\nshould append fractional amounts to the end of the amount you're passing in with\nthis field.\n\nFor example, if the incentive you're offering is EUR 500.25, you would specify `50025` as\nthe amount for this field.\n"
    },
    "effective_date": {
      "type": "string",
      "format": "date",
      "x-struct": null,
      "x-validate": null,
      "description": "The date at which the incentive should take effect.\n\nNote that the incentive is not paid out on the effective date, but during the\nnext payroll cycle. The effective date determines which payroll cycle the\nincentive will be paid out in.\n\nThe effective date needs to be today or a future date.\n\nNote for recurring incentives: since the months don't have the same amount of days,\nif day of month of `effective_date` is one of [28, 29, 30, 31] it will be transformed to\nthe last day of each month, avoiding the possibility of skipping a month in the recurrence.\n"
    },
    "amount_tax_type": {
      "$ref": "#/components/schemas/AmountTaxType"
    }
  },
  "x-validate": null
}
object CompaniesResponse
{
  "type": "object",
  "title": "CompaniesResponse",
  "example": {
    "data": {
      "companies": [
        {
          "id": "e5a8b061-company-id-4c5c81ac885eX",
          "name": "Your Company Name",
          "status": "active",
          "created_at": "2021-10-29T12:39:13",
          "updated_at": "2021-10-29T12:39:15",
          "external_id": "00001111",
          "country_code": "USA",
          "phone_number": "+1123123456",
          "address_details": {
            "city": "San Francisco",
            "state": "CA",
            "address": "1709 Broderick St",
            "postal_code": "94115",
            "address_line_2": "Flat number 123"
          },
          "desired_currency": "USD",
          "company_owner_name": "Joe Smith",
          "company_owner_email": "te@remote.com",
          "bank_account_details": {
            "name": "Bank name",
            "account_type": "savings",
            "account_holder": "Joe Smith",
            "account_number": "31234123123",
            "ownership_type": "BUSINESS",
            "routing_number": "123124123"
          },
          "terms_of_service_accepted_at": "2021-10-29T12:39:15Z"
        }
      ]
    }
  },
  "x-struct": null,
  "properties": {
    "companies": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/Company"
      },
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "Shows a list of companies"
}
object Company
{
  "type": "object",
  "title": "Company",
  "example": {
    "id": "e5a8b061-company-id-4c5c81ac885eX",
    "name": "Your Company Name",
    "status": "active",
    "created_at": "2021-10-29T12:39:13",
    "updated_at": "2021-10-29T12:39:15",
    "external_id": "00001111",
    "country_code": "USA",
    "phone_number": "+1123123456",
    "address_details": {
      "city": "San Francisco",
      "state": "CA",
      "address": "1709 Broderick St",
      "postal_code": "94115",
      "address_line_2": "Flat number 123"
    },
    "desired_currency": "USD",
    "company_owner_name": "Joe Smith",
    "company_owner_email": "te@remote.com",
    "bank_account_details": {
      "name": "Bank name",
      "account_type": "savings",
      "account_holder": "Joe Smith",
      "account_number": "31234123123",
      "ownership_type": "BUSINESS",
      "routing_number": "123124123"
    },
    "terms_of_service_accepted_at": "2021-10-29T12:39:15Z"
  },
  "required": [
    "address_details",
    "company_owner_email",
    "country_code",
    "created_at",
    "desired_currency",
    "id",
    "name",
    "status",
    "updated_at",
    "terms_of_service_accepted_at"
  ],
  "x-struct": null,
  "properties": {
    "id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "name": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "status": {
      "enum": [
        "pending",
        "review",
        "active",
        "archived"
      ],
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "The company status determines what a company is allowed to do:\n- `pending`: The company has been created and the company owner invited. Remote is waiting for the company owner to complete onboarding.\n- `review`: The company is under review. In rare occasions, a company may not automatically get created in `active` status because Remote needs to\n  manually review the company that was created. The company will become `active` once the review is completed and no further action is necessary\n  through the Remote API.\n- `active`: The company owner has completed onboarding and the company is ready to employ.\n- `archived`: The company is no longer active on the Remote platform and no changes can be made to the company.\n"
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "x-struct": null,
      "x-validate": null
    },
    "tax_number": {
      "type": "string",
      "nullable": true,
      "x-struct": null,
      "x-validate": null
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "x-struct": null,
      "x-validate": null
    },
    "external_id": {
      "type": "string",
      "nullable": true,
      "x-struct": null,
      "x-validate": null
    },
    "country_code": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "phone_number": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "address_details": {
      "type": "object",
      "x-struct": null,
      "x-validate": null,
      "description": "Fields can vary depending on the country. Please, check the required fields structure using the [Show form schema endpoint](https://gateway.remote.com/v1/docs/openapi.html).\nUse the desired country and `address_details` as the form name for the placeholders.\nThe response complies with the [JSON Schema](https://remote.com/resources/api/how-json-schemas-work) specification.\n"
    },
    "desired_currency": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "company_owner_name": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "company_owner_email": {
      "type": "string",
      "format": "email",
      "x-struct": null,
      "x-validate": null
    },
    "registration_number": {
      "type": "string",
      "nullable": true,
      "x-struct": null,
      "x-validate": null
    },
    "bank_account_details": {
      "type": "object",
      "x-struct": null,
      "x-validate": null,
      "description": "Fields can vary depending on the country. Please, check the required fields structure using the [Show form schema endpoint](https://gateway.remote.com/v1/docs/openapi.html).\nUse the desired country and `bank_account_details` as the form name for the placeholders.\nThe response complies with the [JSON Schema](https://remote.com/resources/api/how-json-schemas-work) specification.\n"
    },
    "terms_of_service_accepted_at": {
      "type": "string",
      "format": "date-time",
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null
}
object CompanyAlreadyExistsErrorResponse
{
  "type": "object",
  "title": "CompanyAlreadyExistsErrorResponse",
  "example": {
    "message": {
      "code": "resource_already_exists",
      "message": "The company with the provided EIN is already registered.",
      "resource_id": "d1bb9535-3296-4240-8a67-81475bd24e80",
      "resource_type": "company_creation"
    }
  },
  "x-struct": null,
  "properties": {
    "code": {
      "type": "string",
      "pattern": "resource_already_exists",
      "x-struct": null,
      "x-validate": null
    },
    "message": {
      "type": "string",
      "pattern": "The company with the provided EIN is already registered.",
      "x-struct": null,
      "x-validate": null
    },
    "resource_id": {
      "type": "string",
      "format": "uuid",
      "x-struct": null,
      "x-validate": null
    },
    "resource_type": {
      "type": "string",
      "pattern": "company_creation",
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "Error returned when a company with matching criteria already exists"
}
object CompanyCreationConflictErrorResponse
{
  "type": "object",
  "title": "CompanyCreationConflictErrorResponse",
  "x-struct": null,
  "properties": {
    "message": {
      "oneOf": [
        {
          "$ref": "#/components/schemas/CompanyAlreadyExistsErrorResponse"
        },
        {
          "$ref": "#/components/schemas/CompanyNotEligibleForCreationErrorResponse"
        }
      ],
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null
}
object CompanyCreationResponse
{
  "type": "object",
  "title": "CompanyCreationResponse",
  "x-struct": null,
  "properties": {
    "data": {
      "oneOf": [
        {
          "$ref": "#/components/schemas/CompanyResponse"
        },
        {
          "$ref": "#/components/schemas/CompanyWithTokensResponse"
        }
      ],
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null
}
object CompanyDepartment
{
  "type": "object",
  "title": "CompanyDepartment",
  "example": {
    "id": "89c4fbb2-cd1f-4334-8e4b-280f8795bbd8X",
    "name": "Marketing",
    "company_id": "669f9e18-889f-4c2c-95b8-67795a3113cc"
  },
  "required": [
    "id",
    "company_id",
    "name"
  ],
  "x-struct": null,
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "x-struct": null,
      "x-validate": null
    },
    "name": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "company_id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "Company ID"
    }
  },
  "x-validate": null
}
object CompanyDepartmentCreatedResponse
{
  "type": "object",
  "title": "CompanyDepartmentCreatedResponse",
  "example": {
    "data": {
      "company_department": {
        "id": "89c4fbb2-cd1f-4334-8e4b-280f8795bbd8X",
        "name": "Marketing",
        "company_id": "669f9e18-889f-4c2c-95b8-67795a3113cc"
      }
    }
  },
  "x-struct": null,
  "properties": {
    "company_department": {
      "$ref": "#/components/schemas/CompanyDepartment"
    }
  },
  "x-validate": null
}
object CompanyManager
{
  "type": "object",
  "title": "CompanyManager",
  "example": {
    "role": "owner",
    "user_id": "983088c9-user-id-023fc08b8625",
    "user_name": "Anne White",
    "company_id": "0a8s2d1-company-id-2e3f4th",
    "user_email": "user@example.com"
  },
  "required": [
    "company_id",
    "user_id",
    "user_name",
    "user_email",
    "role"
  ],
  "x-struct": null,
  "properties": {
    "role": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "Company Manager role."
    },
    "user_id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "User ID"
    },
    "user_name": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "User's name"
    },
    "company_id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "Company ID"
    },
    "user_email": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "User Email"
    }
  },
  "x-validate": null
}
object CompanyManagerData
{
  "type": "object",
  "title": "CompanyManagerData",
  "example": {
    "company_manager": {
      "role": "owner",
      "user_id": "983088c9-user-id-023fc08b8625",
      "user_name": "Anne White",
      "company_id": "0a8s2d1-company-id-2e3f4th",
      "user_email": "user@example.com"
    }
  },
  "required": [
    "company_manager"
  ],
  "x-struct": null,
  "properties": {
    "company_manager": {
      "$ref": "#/components/schemas/CompanyManager"
    }
  },
  "x-validate": null
}
object CompanyManagerParams
{
  "type": "object",
  "title": "CompanyManagerParams",
  "required": [
    "name",
    "email",
    "role"
  ],
  "x-struct": null,
  "properties": {
    "name": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "The name of the company manager"
    },
    "role": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "The role assigned for the new manager. The value should be one of the following:\n\n- `admin`: an Admin can manage most of the resources in remote.\n- `onboarding_manager`: an Onboarding Manager can add, see and manage new hires.\n- `people_manager`: a People Manager can view employee profiles of the team members they manage and approve and decline time off and expenses for their employees.\n"
    },
    "email": {
      "type": "string",
      "format": "email",
      "x-struct": null,
      "x-validate": null,
      "description": "The work email of the company manager"
    },
    "company_id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "The Company ID. Required if the access token can access multiple companies. Optional otherwise."
    }
  },
  "x-validate": null
}
object CompanyManagerResponse
{
  "type": "object",
  "title": "CompanyManagerResponse",
  "example": {
    "data": {
      "company_manager": {
        "role": "owner",
        "user_id": "983088c9-user-id-023fc08b8625",
        "user_name": "Anne White",
        "company_id": "0a8s2d1-company-id-2e3f4th",
        "user_email": "user@example.com"
      }
    }
  },
  "required": [
    "data"
  ],
  "x-struct": null,
  "properties": {
    "data": {
      "$ref": "#/components/schemas/CompanyManagerData"
    }
  },
  "x-validate": null
}
object CompanyManagersResponse
{
  "type": "object",
  "title": "CompanyManagersResponse",
  "example": {
    "total_count": 1,
    "total_pages": 1,
    "current_page": 1,
    "company_managers": [
      {
        "role": "owner",
        "user_id": "983088c9-user-id-023fc08b8625",
        "user_name": "Anne White",
        "company_id": "0a8s2d1-company-id-2e3f4th",
        "user_email": "user@example.com"
      }
    ]
  },
  "x-struct": null,
  "properties": {
    "data": {
      "type": "object",
      "x-struct": null,
      "properties": {
        "total_count": {
          "type": "integer",
          "x-struct": null,
          "x-validate": null,
          "description": "The total number of records in the result"
        },
        "total_pages": {
          "type": "integer",
          "x-struct": null,
          "x-validate": null,
          "description": "The total number of pages the user can go through"
        },
        "current_page": {
          "type": "integer",
          "x-struct": null,
          "x-validate": null,
          "description": "The current page among all of the total_pages"
        },
        "company_managers": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/CompanyManager"
          },
          "x-struct": null,
          "x-validate": null
        }
      },
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "Response schema listing many company_managers"
}
object CompanyNotEligibleForCreationErrorResponse
{
  "type": "object",
  "title": "CompanyNotEligibleForCreationErrorResponse",
  "example": {
    "message": {
      "code": "resource_not_eligible",
      "message": "The company already have employees in integration supported countries.",
      "resource_id": "d1bb9535-3296-4240-8a67-81475bd24e80",
      "resource_type": "company_creation"
    }
  },
  "x-struct": null,
  "properties": {
    "code": {
      "type": "string",
      "pattern": "resource_not_eligible",
      "x-struct": null,
      "x-validate": null
    },
    "message": {
      "type": "string",
      "pattern": "The company already have employees in integration supported countries.",
      "x-struct": null,
      "x-validate": null
    },
    "resource_id": {
      "type": "string",
      "format": "uuid",
      "x-struct": null,
      "x-validate": null
    },
    "resource_type": {
      "type": "string",
      "pattern": "company_creation",
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "Error returned when the company already have employees in countries supported by the integration."
}
object CompanyResponse
{
  "type": "object",
  "title": "CompanyResponse",
  "example": {
    "data": {
      "company": {
        "id": "e5a8b061-company-id-4c5c81ac885eX",
        "name": "Your Company Name",
        "status": "active",
        "created_at": "2021-10-29T12:39:13",
        "updated_at": "2021-10-29T12:39:15",
        "external_id": "00001111",
        "country_code": "USA",
        "phone_number": "+1123123456",
        "address_details": {
          "city": "San Francisco",
          "state": "CA",
          "address": "1709 Broderick St",
          "postal_code": "94115",
          "address_line_2": "Flat number 123"
        },
        "desired_currency": "USD",
        "company_owner_name": "Joe Smith",
        "company_owner_email": "te@remote.com",
        "bank_account_details": {
          "name": "Bank name",
          "account_type": "savings",
          "account_holder": "Joe Smith",
          "account_number": "31234123123",
          "ownership_type": "BUSINESS",
          "routing_number": "123124123"
        },
        "terms_of_service_accepted_at": "2021-10-29T12:39:15Z"
      }
    }
  },
  "x-struct": null,
  "properties": {
    "company": {
      "$ref": "#/components/schemas/Company"
    }
  },
  "x-validate": null,
  "description": "Shows a company"
}
object CompanyWithTokensResponse
{
  "type": "object",
  "title": "CompanyWithTokensResponse",
  "example": {
    "data": {
      "tokens": {
        "user_id": "6550e536-8655-4bce-8bd9-b295f786ad71",
        "company_id": "6e60f5f9-e6a6-4b04-b13c-84bced848bab",
        "expires_in": 7200,
        "token_type": "Bearer",
        "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.cThIIoDvwdueQB468K5xDc5633seEFoqwxjF_xSJyQQ",
        "refresh_token": "b480036a-d229-49ef-a606-7e8fba58a5eb"
      },
      "company": {
        "id": "e5a8b061-company-id-4c5c81ac885e",
        "name": "Your Company Name",
        "status": "active",
        "created_at": "2021-10-29T12:39:13",
        "updated_at": "2021-10-29T12:39:15",
        "external_id": "00001111",
        "country_code": "USA",
        "phone_number": "+1123123456",
        "address_details": {
          "city": "San Francisco",
          "state": "CA",
          "address": "1709 Broderick St",
          "postal_code": "94115",
          "address_line_2": "Flat number 123"
        },
        "desired_currency": "USD",
        "company_owner_name": "Joe Smith",
        "company_owner_email": "te@remote.com",
        "bank_account_details": {
          "name": "Bank name",
          "account_type": "savings",
          "account_holder": "Joe Smith",
          "account_number": "31234123123",
          "ownership_type": "BUSINESS",
          "routing_number": "123124123"
        },
        "terms_of_service_accepted_at": "2021-10-29T12:39:15Z"
      }
    }
  },
  "x-struct": null,
  "properties": {
    "tokens": {
      "$ref": "#/components/schemas/OAuth2Tokens"
    },
    "company": {
      "$ref": "#/components/schemas/Company"
    }
  },
  "x-validate": null,
  "description": "Shows a company with its refresh and access tokens. Please contact Remote if you need the tokens when creating a company."
}
object Compensation
{
  "type": "object",
  "title": "Compensation",
  "example": {
    "amount": 33000,
    "currency_code": "CAD"
  },
  "required": [
    "amount",
    "currency_code"
  ],
  "x-struct": null,
  "properties": {
    "amount": {
      "type": "integer",
      "x-struct": null,
      "x-validate": null
    },
    "currency_code": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null
}
object CompleteOnboarding
{
  "type": "object",
  "title": "CompleteOnboarding",
  "x-struct": null,
  "properties": {
    "employment_id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "Parameters to complete onboarding"
}
object ConflictResponse
{
  "type": "object",
  "title": "ConflictResponse",
  "example": {
    "message": "Company needs to be in status active to manage employments"
  },
  "x-struct": null,
  "properties": {
    "message": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null
}
object ContractAmendment
{
  "type": "object",
  "title": "ContractAmendment",
  "example": {
    "id": "ba310525-9282-40c9-8977-14d844bf891aX",
    "status": "submitted",
    "changes": {
      "contract.job_title": {
        "current": "A new job title",
        "previous": "An old job title"
      },
      "compensation.amount": {
        "current": 500000,
        "previous": 400000
      },
      "contract_details.details.contract_duration_type": {
        "current": "fixed_term",
        "previous": "indefinite"
      }
    },
    "requested_by": "5a31f3c1-d7a7-4311-89cb-928959d3d540",
    "submitted_at": "2023-04-13T13:35:06Z",
    "employment_id": "1e74fdc2-7420-4eef-ab0a-b794cbbef4e1",
    "requested_details": {
      "effective_date": "2024-03-04",
      "reason_for_change": "annual_pay_adjustment",
      "additional_comments": null,
      "salary_decrease_details": null,
      "reason_for_change_description": null
    },
    "zendesk_ticket_url": "https://zendesk.com/ticket-23333",
    "amendment_contract_id": "8772a9f1-b43c-46be-a1ce-e50b6819f5ee"
  },
  "required": [
    "id",
    "amendment_contract_id",
    "employment_id",
    "status",
    "requested_by",
    "submitted_at",
    "request_details",
    "changes",
    "zendesk_ticket_url"
  ],
  "x-struct": null,
  "properties": {
    "id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "status": {
      "enum": [
        "submitted",
        "in_review",
        "done",
        "canceled",
        "deleted"
      ],
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "changes": {
      "type": "object",
      "x-struct": null,
      "x-validate": null,
      "description": "Describes all the changes requested for the contract and contract details with all their previous and current values."
    },
    "requested_by": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "submitted_at": {
      "type": "string",
      "format": "datetime",
      "x-struct": null,
      "x-validate": null
    },
    "employment_id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "request_details": {
      "$ref": "#/components/schemas/RequestDetails"
    },
    "zendesk_ticket_url": {
      "type": "string",
      "nullable": true,
      "x-struct": null,
      "x-validate": null
    },
    "amendment_contract_id": {
      "type": "string",
      "nullable": true,
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "Contract Amendment"
}
object ContractAmendmentAutomatableResponse
{
  "type": "object",
  "title": "ContractAmendmentAutomatableResponse",
  "x-struct": null,
  "properties": {
    "data": {
      "type": "object",
      "x-struct": null,
      "properties": {
        "message": {
          "type": "string",
          "x-struct": null,
          "x-validate": null,
          "description": "The message to explain how the contract amendment request will be processed depending if it is automatable or not."
        },
        "automatable": {
          "type": "boolean",
          "x-struct": null,
          "x-validate": null,
          "description": "If true, it means that the contract amendment request is automatable."
        }
      },
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "Contract Amendment Automatable response"
}
object ContractAmendmentFormResponse
{
  "type": "object",
  "title": "ContractAmendmentFormResponse",
  "example": {
    "data": {
      "type": "object",
      "required": [
        "job_title",
        "effective_date"
      ],
      "properties": {
        "job_title": {
          "type": "string",
          "title": "Job title",
          "maxLength": 255,
          "description": "What is their job title? E.g. Product designer"
        },
        "effective_date": {
          "type": "date",
          "title": "Effective date of change",
          "description": "If you want to backdate this amendment, we cannot guarantee your preferred date is possible due to country-specific laws.\nPlease enter your preferred date, and we’ll reach out to you if there are any issues.\n"
        }
      }
    }
  },
  "x-struct": null,
  "properties": {
    "data": {
      "type": "object",
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "Object with required and optional fields, its descriptions and suggested presentation"
}
object ContractAmendmentResponse
{
  "type": "object",
  "title": "ContractAmendmentResponse",
  "x-struct": null,
  "properties": {
    "data": {
      "type": "object",
      "required": [
        "contract_amendment"
      ],
      "x-struct": null,
      "properties": {
        "contract_amendment": {
          "$ref": "#/components/schemas/ContractAmendment"
        }
      },
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "Contract Amendment response"
}
object ContractAmendmentSchemaParams
{
  "type": "object",
  "title": "ContractAmendmentSchemaParams",
  "required": [
    "country_code",
    "employment_id"
  ],
  "x-struct": null,
  "properties": {
    "form": {
      "enum": [
        "contract_amendment"
      ],
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "Name of the desired form"
    },
    "country_code": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "Country code according to ISO 3-digit alphabetic codes."
    },
    "employment_id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null,
      "description": "The ID of the employment concerned by the contract amendment request."
    }
  },
  "x-validate": null
}
object ContractPendingChanges
{
  "type": "object",
  "title": "ContractPendingChanges",
  "example": {
    "changes": {
      "contract.job_title": {
        "current": "Senior Engineer",
        "previous": "Engineer"
      }
    },
    "contract_id": "0073fcb5-b669-4e4a-b963-2a47744e75a1",
    "effective_at": "2021-07-15T18:18:17Z"
  },
  "required": [
    "effective_at",
    "contract_id",
    "changes"
  ],
  "x-struct": null,
  "properties": {
    "changes": {
      "type": "object",
      "x-struct": null,
      "x-validate": null,
      "description": "Describes all the changes requested for the contract and contract details with all their previous and current values.\nIts properties may vary depending on the country.\n"
    },
    "contract_id": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "effective_at": {
      "$ref": "#/components/schemas/DateTimeIso8601"
    }
  },
  "x-validate": null
}
string CostCalculator.CountryAvailability
{
  "enum": [
    "active",
    "coming_soon"
  ],
  "type": "string",
  "title": "CostCalculator.CountryAvailability",
  "example": "active",
  "x-struct": null,
  "x-validate": null,
  "description": "- active: country is ready to onboard employee\n- coming_soon: country is in process of getting ready\n"
}
object CostCalculator.CountryLevelRegion
{
  "type": "object",
  "title": "CostCalculator.CountryLevelRegion",
  "example": {
    "code": "PRT",
    "name": "Portugal",
    "currency": {
      "code": "EUR",
      "name": "European Euro",
      "slug": "eur-3b840951-099f-4bd5-90b9-032f7bfe51d9",
      "symbol": "€"
    },
    "region_slug": "663e0b79-c893-45ff-a1b2-f6dcabc098b5",
    "availability": "active",
    "child_regions": {
      "code": "USA",
      "name": "United States",
      "slug": "663e0b79-c893-45ff-a1b2-f6dcabc098b5"
    },
    "has_additional_fields": "true",
    "original_country_slug": "portugal-ab18d96a-a9fd-42c0-9688-24f963d8bdc1"
  },
  "required": [
    "code",
    "currency",
    "name",
    "original_country_slug",
    "region_slug",
    "availability",
    "child_regions"
  ],
  "x-struct": null,
  "properties": {
    "code": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "name": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "currency": {
      "$ref": "#/components/schemas/Currency"
    },
    "region_slug": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "availability": {
      "$ref": "#/components/schemas/CostCalculator.CountryAvailability"
    },
    "child_regions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/MinimalRegion"
      },
      "x-struct": null,
      "x-validate": null
    },
    "has_additional_fields": {
      "type": "boolean",
      "x-struct": null,
      "x-validate": null
    },
    "original_country_slug": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null,
  "description": "A supported country on Remote"
}
object CostCalculator.ListCountryResponse
{
  "type": "object",
  "title": "CostCalculator.ListCountryResponse",
  "required": [
    "data"
  ],
  "x-struct": null,
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/CostCalculator.CountryLevelRegion"
      },
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null
}
object CostCalculatorCost
{
  "type": "object",
  "title": "CostCalculatorCost",
  "example": {
    "name": "Insurance",
    "amount": 1120000,
    "description": "Description of how the amount is calculated.",
    "zendesk_article_url": "https://examplezendesk.com/article/1234"
  },
  "required": [
    "amount",
    "description",
    "name",
    "zendesk_article_url"
  ],
  "x-struct": null,
  "properties": {
    "name": {
      "type": "string",
      "x-struct": null,
      "x-validate": null
    },
    "amount": {
      "type": "integer",
      "x-struct": null,
      "x-validate": null
    },
    "description": {
      "type": "string",
      "nullable": true,
      "x-struct": null,
      "x-validate": null
    },
    "zendesk_article_url": {
      "type": "string",
      "nullable": true,
      "x-struct": null,
      "x-validate": null
    }
  },
  "x-validate": null
}