Pay Items

Bulk Create Pay Items

Bulk creates pay items for employments. Supports up to 500 items per request. Each item must supply exactly one of code or external_import_code to identify the pay element. Integration-specific fields (shift code, currency, pay amount, etc.) go in the provider_data object. Pay codes that use a pay item custom configuration, such as a company car, describe it under custom_configuration in GET /v1/companies/:company_id/legal-entities/:legal_entity_id/pay-codes. Send its values in the pay item's custom_configuration, with the same key. Only Global Payroll employments are supported. Non-GP employments are returned as employment_not_global_payroll. An item whose partner_external_id the integration already holds on a live pay item of the company updates that pay item under the same rules as PATCH, and any other item creates a new pay item. When that pay item belongs to another employment or pay code, the item fails with partner_external_id_held_by_other_pay_item instead. When pay items generated from a recurring pay item hold the value, the item fails with partner_external_id_held_by_generated_pay_item, naming them. Clear its partner_external_id with PATCH to use the value again; when it has more than one live version, contact Remote support. When more than one live pay item holds the value, the item fails with partner_external_id_ambiguous, unless it already fails for its employment or its pay code, or because the value is held by a recurring pay item or a payment generated from one. Within one request each partner_external_id may appear once, and null or an empty string fails the item. An item without partner_external_id always creates a new pay item, so sending it again creates a duplicate. See Your own IDs on Remote records.

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.
  • 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.
  • Customer API token (CustomerAPIToken) — generated by the customer on their Integration Settings page, with the scopes they choose there. See Authorization for customers.

Scopes

Any one of the scopes in a token type's row is enough. all:write works too.

Token typeCategoryRead only ScopeWrite only Scope (read access implicit)
Company-scoped access tokenManage payroll runs (payroll)-Manage pay items (pay_item:write)
Company-scoped access token (assertion)Manage payroll runs (payroll)-Manage pay items (pay_item:write)
Customer API tokenManage payroll runs (payroll)-Manage pay items (pay_item:write)
post/v1/pay-items/bulk

Request

  • Base URL
    https://gateway.remote.com
  • URL
    https://gateway.remote.com/v1/pay-items/bulk
  • Auth
    • OAuth 2
      Authorization code: /auth/oauth2/authorize
      Token URL: /auth/oauth2/token scopes: https://gateway.remote.com/company.manage
    • or OAuth 2
      Authorization code: /auth/oauth2/authorize
      Token URL: /auth/oauth2/token scopes: pay_item:write
    • or OAuth 2
      Authorization code: /auth/oauth2/authorize
      Token URL: /auth/oauth2/token scopes: all:write
    • or OAuth 2
      Client credentials
      Token URL: /auth/oauth2/token scopes: pay_item:write
    • or OAuth 2
      Client credentials
      Token URL: /auth/oauth2/token scopes: all:write
    • or HTTP bearer

Request body

Example request

{
  "pay_items": [
    {
      "amount": 7200,
      "code": "overtime",
      "effective_date": "2026-03-11",
      "employment_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "provider_data": {
        "correction_effective_date": "2026-03-15",
        "hourly_rate": 2550,
        "hourly_rate_currency_code": "SGD",
        "pay_rate": 1.5,
        "shift_code": "DAY",
        "work_day_duration": 28800
      }
    }
  ]
}

Response

Success

Example response

{
  "data": {
    "failures": [
      {
        "error": "not_found",
        "row_number": 0
      }
    ],
    "successes": [
      {
        "pay_item": {
          "amount": 7200,
          "code": "overtime",
          "effective_date": "2026-03-11",
          "employment_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
          "end_date": null,
          "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
          "provider_data": {
            "correction_effective_date": "2026-03-15",
            "hourly_rate": 2550,
            "hourly_rate_currency_code": "SGD",
            "pay_rate": 1.5,
            "shift_code": "DAY",
            "work_day_duration": 28800
          },
          "replaced_ids": []
        },
        "row_number": 0
      }
    ]
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.