Adjustments
Adjustments allow you to add or subtract amounts from a worker’s payroll outside of their regular compensation. Use adjustments to handle bonuses, deductions, allowances, reimbursements, or any one-time payment that affects net pay.
The Adjustments API provides endpoints to create, retrieve, and manage adjustments programmatically. Each adjustment is linked to a specific contract and payroll cycle, ensuring accurate processing and compliance with local tax rules.
Key concepts
Adjustment types
Adjustments are categorized by purpose. Each category determines how the adjustment is processed and reported.
Common adjustment categories include:
- Bonuses: Performance bonuses, sign-on bonuses, or retention payments
- Deductions: Loan repayments, garnishments, or advance deductions
- Allowances: Housing allowances, transportation stipends, or meal allowances
- Reimbursements: Expense reimbursements for business-related costs
Use the GET /adjustments/categories endpoint to retrieve all available categories for your organization.
Adjustment status
Adjustments move through different statuses depending on the contract type and approval workflow.
Global Payroll (GP) statuses:
OPEN: Adjustment created but not yet submittedPENDING_APPROVAL: Submitted and awaiting approvalSUCCESS: Approved and processed in payrollFAILED: Processing failed due to validation errorsOVERWRITTEN: Replaced by a newer adjustmentAI_CHECK_IN_PROGRESS: Under automated review
Employer of Record (EOR) statuses:
DRAFT: Adjustment created but not finalizedPENDING: Submitted for processingAPPROVED: Approved and ready for disbursementDENIED: Rejected by approverDISBURSE_SCHEDULED: Scheduled for paymentREIMBURSED: Payment completedUNDER_REVIEW: Manual review in progressERRORS_FOUND: Validation errors detectedPENDING_DEEL_REVIEW: Awaiting internal Deel review
Payroll cycles
Adjustments are tied to specific payroll cycles. Each adjustment has:
date_of_adjustment: The date the adjustment should applycycle_reference: The payroll cycle identifieractual_start_cycle_date: Start date of the payroll cycleactual_end_cycle_date: End date of the payroll cycle
If move_next_cycle is set to true, the adjustment can be moved to the next payroll cycle if it misses the current cutoff.
Creating an adjustment
Use the POST /adjustments endpoint to create a new adjustment.
Required fields
Optional fields
Example request
Response structure
A successful request returns a 201 Created status with the adjustment details:
Retrieving adjustments
Retrieve a specific adjustment
Use GET /adjustments/{id} to fetch details of a single adjustment.
List adjustments by contract
Use GET /contracts/{contract_id}/adjustments to retrieve all adjustments for a specific contract.
This endpoint returns all adjustments associated with a contract, allowing you to track the complete history of bonuses, deductions, and other modifications.
Retrieving adjustment categories
Before creating an adjustment, retrieve the available categories for your organization using GET /adjustments/categories.
Each category has a unique identifier, name, and unit type that determines how the adjustment is processed.
Response structure
Error handling
The API returns standard HTTP status codes and error messages to help you diagnose issues.
Common errors
Example error response
Always validate adjustment amounts before submission. Negative amounts represent deductions and must be prefixed with a minus sign (e.g., “-150.00”).
Authentication and scopes
All adjustment endpoints require authentication using either an API token or OAuth2.
Required scopes:
adjustments:read- Read adjustment dataadjustments:write- Create and modify adjustments
For detailed information on authentication methods and token management, see the Authentication guide.
Best practices
Timing and payroll cycles
- Submit adjustments early: Create adjustments well before the payroll cutoff to ensure processing
- Monitor cycle dates: Check
actual_start_cycle_dateandactual_end_cycle_dateto confirm timing - Use move_next_cycle carefully: Only enable this if the adjustment can be delayed to the next cycle
- Validate cycle references: Ensure the
cycle_referencematches an active payroll cycle
Amount formatting
- Use string format: Always pass amounts as strings (e.g., “1234.56”) to preserve precision
- Include decimals: Specify two decimal places for currency values
- Negative for deductions: Use negative amounts (e.g., “-500.00”) for deductions
- Validate before submission: Check that amounts match your payroll records
Category selection
- Retrieve categories first: Always call
/adjustments/categoriesbefore creating adjustments - Use correct category IDs: Map your internal adjustment types to Deel’s categories
- Check unit_type: Ensure the category matches the adjustment purpose (currency vs. other units)
- Cache category data: Store category mappings to reduce API calls
Attachments and documentation
- Include supporting documents: Attach receipts, approvals, or invoices when applicable
- Use descriptive titles: Make adjustment titles clear and searchable
- Add context in descriptions: Provide additional details that explain the adjustment
- Track adjustment IDs: Store adjustment IDs in your system for reconciliation
Error handling and retries
- Handle validation errors: Check for 400 status codes and display helpful messages
- Implement retry logic: Retry failed requests with exponential backoff
- Log adjustment attempts: Keep audit trails of all adjustment creation attempts
- Monitor status changes: Poll adjustment status if approval workflows are involved
Common use cases
Scenario 1: Monthly performance bonuses
Submit performance bonuses at the end of each month for eligible employees.
Scenario 2: Expense reimbursements
Reimburse employees for business expenses like travel, meals, or equipment.
Scenario 3: Loan deductions
Process recurring loan deductions from employee paychecks.