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 type | Category | Read only Scope | Write only Scope (read access implicit) |
|---|---|---|---|
| Company-scoped access token | Manage 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 token | Manage payroll runs (payroll) | - | Manage pay items (pay_item:write) |
Request
- Base URLhttps://gateway.remote.com
- URLhttps://gateway.remote.com/v1/pay-items/bulk
- Auth
- OAuth 2Authorization code: /auth/oauth2/authorizeToken URL: /auth/oauth2/token scopes: https://gateway.remote.com/company.manage
- or OAuth 2Authorization code: /auth/oauth2/authorizeToken URL: /auth/oauth2/token scopes: pay_item:write
- or OAuth 2Authorization code: /auth/oauth2/authorizeToken URL: /auth/oauth2/token scopes: all:write
- or OAuth 2Client credentialsToken URL: /auth/oauth2/token scopes: pay_item:write
- or OAuth 2Client credentialsToken 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.