Working with Incentives
Overview
In this guide, you will learn:
- How to differentiate incentives
- About the incentive lifecycle
- How to work with one-time and recurring incentives
Before you get started
Before you get started, ensure that you have an active employment in your company.
Incentives
An Incentive represents all the items outside of regular salary that an employer might need to pay to the employee, for example, commissions, bonuses or allowances. The amount specified is in the currency the person gets paid in.
There are two payment frequencies:
- One time - when the incentive is created and paid only once, a single event;
- Monthly - when the incentive is periodicity, it is called a
Recurring Incentive
. It can repeat for a fixed number of months or it can be indefinite.
Besides that, each incentive has a type. Check the documentation of the Create Incentive / Create Recurring Incentive API Reference to get the updated list of available types. On a side note, not all one-time types are accepted for recurring incentives.
When creating an incentive, it is necessary to provide the effective_date
, which determines which payroll cycle the incentive will be paid out in. The incentive is not paid out on the effective date, but during the next payroll cycle.
Incentives also have the free-form text note
field, to add more information about the incentive. It is highly recommended to use that field since the Remote API has some mechanisms in place to prevent the registration of duplicated incentives, and having specific notes helps to differentiate them. For example, in case an employee is to receive two referral bonuses on the same day, this can be mentioned in the notes, such as Referral bonus regarding <people's name or id>
.
Incentive lifecycle
The status of an incentive depends on whether it is already associated to a payroll cycle or not. When the incentive is created and it is not yet associated to a payroll cycle, its status is pending
. When the incentive is associated to a payroll cycle, its status can be preparing
, processing
, or paid
. When an incentive is cancelled, it is marked as deleted
.
Working with one-time incentives
We provide endpoints for all basic operations (create, read, update, delete, and list) for one-time incentives in the /v1/incentives
route. For example, to create and update an incentive:
# create a one-time incentive
$ curl --location --request POST \
--header "Authorization: Bearer <your token>" \
--header "Content-Type: application/json" \
https://gateway.remote-sandbox.com/v1/incentives \
--data '{
"amount": 50000,
"amount_tax_type": "gross",
"effective_date": "2025-12-20",
"employment_id": "5509b6b0-5a0a-11ed-a6f6-c38dbde70e6f",
"note": "Bonus for moving start date to an earlier date",
"type": "signing_bonus"
}'
{
"data":{
"incentive":{
"amount": 50000,
"amount_tax_type": "gross",
"effective_date": "2025-12-20",
"employment_id": "5509b6b0-5a0a-11ed-a6f6-c38dbde70e6f",
"expected_payout_date": null,
"id": "e6c42029-d12a-4480-a732-73017991ba8e",
"note": "Bonus for moving start date to an earlier date",
"recurring_incentive_id": null,
"status": "pending",
"type": "signing_bonus"
}
}
}
# modify the incentive
$ curl --location --request PATCH \
--header "Authorization: Bearer <your token>" \
--header "Content-Type: application/json" \
https://gateway.remote-sandbox.com/v1/incentives/e6c42029-d12a-4480-a732-73017991ba8e\
--data '{
"amount": 150000
}'
{
"data":{
"incentive":{
"amount": 150000,
"amount_tax_type": "gross",
"effective_date": "2025-12-20",
"employment_id": "5509b6b0-5a0a-11ed-a6f6-c38dbde70e6f",
"expected_payout_date": null,
"id": "e6c42029-d12a-4480-a732-73017991ba8e",
"note": "Monthly stipend to buy food",
"recurring_incentive_id": "1e74fdc2-7420-4eef-ab0a-b794cbbef4e1",
"status": "pending",
"type": "meal_allowance"
}
}
}
Working with Recurring incentives
Recurring Incentives are an abstraction for scheduled one-time incentives, so we only provide endpoints for the create, list, and delete operations. When creating a recurring incentive, the response returned is the upcoming one-time incentive, but with the recurring_incentive_id
field filled.
To modify some information, you must indicate the upcoming one-time incentive. It's not possible to modify in batch all the recurring incentives since some occurrences might have been already paid or processed.
Deleting a recurring incentive cancels the upcoming one-time incentives with the pending
status. This request also returns a list of already_processing_incentives
, that are occurrences of incentives that cannot be deleted since they're in processing
status.
# create an indefinite recurring incentive
$ curl --location --request POST \
--header "Authorization: Bearer <your token>" \
--header "Content-Type: application/json" \
https://gateway.remote-sandbox.com/v1/incentives/recurring \
--data '{
"amount": 50000,
"amount_tax_type": "gross",
"effective_date": "2025-12-20",
"employment_id": "5509b6b0-5a0a-11ed-a6f6-c38dbde70e6f",
"note": "Monthly stipend to buy food",
"type": "meal_allowance"
}'
{
"data":{
"incentive":{
"amount": 50000,
"amount_tax_type": "gross",
"effective_date": "2025-12-20",
"employment_id": "5509b6b0-5a0a-11ed-a6f6-c38dbde70e6f",
"expected_payout_date": null,
"id": "e6c42029-d12a-4480-a732-73017991ba8e",
"note": "Monthly stipend to buy food",
"recurring_incentive_id": "1e74fdc2-7420-4eef-ab0a-b794cbbef4e1",
"status": "pending",
"type": "meal_allowance"
}
}
}
# modify the amount of the incentive
$ curl --location --request PATCH \
--header "Authorization: Bearer <your token>" \
--header "Content-Type: application/json" \
https://gateway.remote-sandbox.com/v1/incentives/e6c42029-d12a-4480-a732-73017991ba8e \
--data '{
"amount": 150000
}'
{
"data":{
"incentive":{
"amount": 150000,
"amount_tax_type": "gross",
"effective_date": "2025-12-20",
"employment_id": "5509b6b0-5a0a-11ed-a6f6-c38dbde70e6f",
"expected_payout_date": null,
"id": "e6c42029-d12a-4480-a732-73017991ba8e",
"note": "Monthly stipend to buy food",
"recurring_incentive_id": "1e74fdc2-7420-4eef-ab0a-b794cbbef4e1",
"status": "pending",
"type": "meal_allowance"
}
}
}
# delete the recurring incentive
$ curl --location --request DELETE \
--header "Authorization: Bearer <your token>" \
--header "Content-Type: application/json" \
https://gateway.remote-sandbox.com/v1/incentives/recurring/1e74fdc2-7420-4eef-ab0a-b794cbbef4e1
{
"data": {
"already_processing_incentives": [],
"status": "ok"
}
}
Updated 3 months ago