---
title: "Seed a contractor rate"
method: POST
path: "/v1/sandbox/contractors/employments/{employment_id}/rates"
tags: ["Sandbox"]
---

# Seed a contractor rate

`POST /v1/sandbox/contractors/employments/{employment_id}/rates`

## Request

- Base URL: `https://gateway.remote.com`
- URL: `https://gateway.remote.com/v1/sandbox/contractors/employments/{employment_id}/rates`
- Auth: one of:
  - OAuth 2
    - Authorization code: `/auth/oauth2/authorize`
    - Token URL: `/auth/oauth2/token`
  - OAuth 2
    - Client credentials
    - Token URL: `/auth/oauth2/token`
  - HTTP bearer

Sets the contractor's main rate, the same way an employer's rate edit does. A main rate without a
`service_start_date` is updated in place and keeps its `id`. A main rate with one belongs to a
Statement of Work and is kept: seeding adds a new main rate beside it, and the list endpoint
returns both while that Statement of Work is in force. This lets the rate endpoints be exercised
without going through contract signature. Contractor of Record contractors, including ones not
active yet, and Contractor Management Plus contractors whose contract is signed cannot be seeded,
since their Statement of Work sets the rate: the endpoint returns `422`.

The currency is derived from the legal entity the contractor is paid in by. A rate in a
currency the contractor cannot be paid in is rejected with `422`.

This endpoint is only available in Sandbox, otherwise it will respond with a 404.

## Authentication

This endpoint accepts any one of the following token types:

- **Company-scoped access token** (`OAuth2AuthorizationCode`) — obtained by a company manager through the Authorization Code flow or the Refresh Token flow. See [Authentication for partners](https://developer.remote.com/docs/authentication-for-partners).
- **Company-scoped access token (assertion)** (`OAuth2CompanyManagerAssertion`) — obtained through the `urn:ietf:params:oauth:grant-type:jwt-bearer` grant for a company manager. See [OAuth Assertion](https://developer.remote.com/docs/authorization-method-oauth-assertion).
- **Customer API token** (`CustomerAPIToken`) — generated by the customer on their Integration Settings page, with the scopes they choose there. See [Authorization for customers](https://developer.remote.com/docs/authorization-for-customers).

## Path parameters

- `employment_id` string, required

## Headers

- `Authorization` string, required

## Request body

- SandboxCreateContractorRateParams: Parameters for seeding a contractor rate in Sandbox.
  - `amount` string, required: The amount paid per `type`, in the major unit, e.g. 103.83.
  - `pay_frequency` 'weekly' | 'bi_weekly' | 'semi_monthly' | 'monthly', nullable: How often the contractor is paid. Must be null or omitted for a `one_off` rate.
  - `type` 'hourly' | 'daily' | 'weekly' | 'monthly' | 'one_off', required: The unit the amount is paid per.

## Response `201`

Created

- SandboxContractorRateResponse: The contractor rate that was seeded.
  - `data` ContractorRate, required: A rate configured for a contractor, with the dates of the contract it is paid under and, when a Statement of Work established it, that Statement of Work's service dates. `type` discriminates the payment mode: `one_off` is a single payment on completion of services; any other value is paid per pay period, where `type` is the calculation unit and `pay_frequency` the invoicing cadence. `type` and `pay_frequency` list every value Remote stores. A new value is announced as an API change before it appears.
    - `amount` MoneyResponse, required: Monetary amount and currency. `amount` is a decimal string in the major unit, e.g. 109.87.
      - `amount` string, required
      - `currency` CurrencyWithoutSlug, required: Currency structure without the slug, eg: built from ex_money
        - `code` string, required
        - `name` string, required
        - `symbol` string, required
    - `contract_expiration_date` string, date, nullable, required: Expiration date of the contractor's active contract (or the last active one for ended engagements). This is not a termination date. Null for an open-ended contract, and when the contractor has no contract on record.
    - `contract_start_date` string, date, nullable, required: Date the contractor started working under their active contract (or the last active one for ended engagements). This is the work start date, which can precede the date the contract became effective. Null when the contractor has no contract on record.
    - `id` string, uuid, required: Unique identifier of the rate.
    - `pay_frequency` 'weekly' | 'bi_weekly' | 'semi_monthly' | 'monthly', nullable, required: How often the contractor is paid. Always null for `one_off` rates. Can be null for a recurring rate when the company did not record a frequency.
    - `service_end_date` string, date, nullable, required: Planned end date of those services. The engagement continues month to month after it until the Statement of Work is replaced or ended, so the rate stays listed. Null for open-ended services and whenever `service_start_date` is null.
    - `service_start_date` string, date, nullable, required: Date the services under the Statement of Work that established this rate begin. Null when no Statement of Work record established the rate: one the company recorded itself, or one signed before Remote recorded service terms.
    - `type` 'hourly' | 'daily' | 'weekly' | 'monthly' | 'one_off', required: The unit the amount is paid per.

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `404`: Not Found
- `422`: Unprocessable Entity
- `429`: Too many requests

---

[API](https://skmtc.dev/remote-com/apis/testing-sandbox.md) - [All operations](https://skmtc.dev/remote-com/apis/testing-sandbox/llms.txt) - [OpenAPI document](https://skmtc.dev/remote-com/apis/testing-sandbox/revisions/94f6859e2604?raw)
