Reimbursing contractor expenses

Step-by-step guide to processing expense reimbursements through invoices

Overview

This guide walks you through the complete process of reimbursing contractor expenses using the invoice adjustments API. You will learn how to create, document, review, and track expense reimbursements from submission to payment.

When to use this workflow

Use this workflow when contractors incur business expenses that your organization agrees to reimburse:

  • Travel expenses (flights, hotels, transportation)
  • Equipment purchases (computers, monitors, peripherals)
  • Software subscriptions and licenses
  • Office supplies and materials
  • Internet and phone bills
  • Training and certification costs
  • Client entertainment and meals

Prerequisites

Before you begin, ensure you have:

  • A valid API token with invoice-adjustments:write scope
  • The contract_id of the contractor requesting reimbursement
  • Receipts or documentation for the expenses
  • Approval from the appropriate manager or budget owner

Most organizations require receipts for all expense reimbursements. Always attach documentation to maintain compliance and create a clear audit trail.

Step-by-step workflow

This example demonstrates reimbursing a contractor for travel expenses totaling $847.50 for a client meeting.

1

Gather expense details

Before creating the reimbursement, collect all necessary information:

  • Total reimbursement amount
  • Expense category (travel, equipment, software, etc.)
  • Detailed description of expenses
  • Receipt or proof of purchase
  • Date expenses were incurred
  • Contract ID of the contractor

Example expense breakdown:

Flight: $450.00
Hotel (2 nights): $320.00
Ground transportation: $77.50
Total: $847.50
2

Upload supporting documentation

If you have a receipt or invoice to attach, upload it first and note the file key.

Combine multiple receipts into a single PDF before uploading to simplify the reimbursement process. Include a summary sheet with itemized expenses.

3

Retrieve the contract

Get the contractor’s contract ID if you don’t already have it.

$curl --request GET 'https://api.letsdeel.com/rest/v2/contracts' \
>--header 'Authorization: Bearer {{token}}'

Response:

1{
2 "data": [
3 {
4 "id": "c2345678",
5 "title": "Senior Product Designer",
6 "type": "ongoing_time_based",
7 "worker_first_name": "Jane",
8 "worker_last_name": "Smith",
9 "status": "active",
10 "compensation_details": {
11 "amount": 7500.00,
12 "currency_code": "USD",
13 "frequency": "monthly"
14 }
15 }
16 ]
17}
4

Create the reimbursement adjustment

Create the expense reimbursement with detailed description and attached receipt.

$curl --request POST 'https://api.letsdeel.com/rest/v2/invoice-adjustments' \
>--header 'Authorization: Bearer {{token}}' \
>--header 'Content-Type: application/json' \
>--data-raw '{
> "data": {
> "type": "reimbursement",
> "amount": 847.50,
> "contract_id": "c2345678",
> "description": "Client meeting travel expenses - NYC Jan 15-17: Flight $450, Hotel $320 (2 nights), Transportation $77.50",
> "date_submitted": "2026-01-27",
> "attachment": {
> "key": "invoice_adjustment_attachments/2026/01/travel_receipts_jan2026.pdf",
> "filename": "travel_receipts_jan2026.pdf"
> }
> }
>}'

Always include a breakdown of expenses in the description. This provides transparency and makes the approval process faster.

Response:

1{
2 "data": {
3 "id": "ae6b97fa-c32c-4490-8cfa-05038e77898a",
4 "status": "pending",
5 "created": true,
6 "created_at": "2026-01-27T14:20:00Z"
7 }
8}

The reimbursement is now created with pending status, waiting for review and approval.

5

Verify the reimbursement

Check that the reimbursement was created correctly with all documentation attached.

$curl --request GET 'https://api.letsdeel.com/rest/v2/invoice-adjustments/ae6b97fa-c32c-4490-8cfa-05038e77898a' \
>--header 'Authorization: Bearer {{token}}'

Response:

1{
2 "data": {
3 "id": "ae6b97fa-c32c-4490-8cfa-05038e77898a",
4 "type": "reimbursement",
5 "status": "pending",
6 "contract": {
7 "id": "c2345678",
8 "type": "ongoing_time_based",
9 "title": "Senior Product Designer Contract"
10 },
11 "total_amount": "847.50",
12 "currency_code": "USD",
13 "description": "Client meeting travel expenses - NYC Jan 15-17: Flight $450, Hotel $320 (2 nights), Transportation $77.50",
14 "attachment": {
15 "key": "invoice_adjustment_attachments/2026/01/travel_receipts_jan2026.pdf",
16 "filename": "travel_receipts_jan2026.pdf"
17 },
18 "created_at": "2026-01-27T14:20:00Z",
19 "date_submitted": "2026-01-27",
20 "reported_by": {
21 "id": "worker_789012",
22 "full_name": "Jane Smith"
23 },
24 "payment_cycle": {
25 "start_date": "2026-01-01T00:00:00Z",
26 "end_date": "2026-01-31T23:59:59Z"
27 }
28 }
29}

Verify that the attachment is present and the amount is correct.

6

Review and approve the reimbursement

The manager or finance team reviews the receipts and approves the reimbursement.

$curl --request POST 'https://api.letsdeel.com/rest/v2/invoice-adjustments/ae6b97fa-c32c-4490-8cfa-05038e77898a/reviews' \
>--header 'Authorization: Bearer {{token}}' \
>--header 'Content-Type: application/json' \
>--data-raw '{
> "data": {
> "status": "approved",
> "reason": "Receipts verified. Travel pre-approved by project manager. All expenses within policy limits."
> }
>}'

Include specific approval details in the reason field, such as who pre-approved the expense and which policy was applied. This creates a complete audit trail.

Response:

1{
2 "data": {
3 "created": true
4 }
5}
7

Confirm approval and payment tracking

Retrieve the adjustment to confirm approval and track payment status.

$curl --request GET 'https://api.letsdeel.com/rest/v2/invoice-adjustments/ae6b97fa-c32c-4490-8cfa-05038e77898a' \
>--header 'Authorization: Bearer {{token}}'

Response:

1{
2 "data": {
3 "id": "ae6b97fa-c32c-4490-8cfa-05038e77898a",
4 "status": "approved",
5 "type": "reimbursement",
6 "total_amount": "847.50",
7 "currency_code": "USD",
8 "description": "Client meeting travel expenses - NYC Jan 15-17: Flight $450, Hotel $320 (2 nights), Transportation $77.50",
9 "attachment": {
10 "key": "invoice_adjustment_attachments/2026/01/travel_receipts_jan2026.pdf",
11 "filename": "travel_receipts_jan2026.pdf"
12 },
13 "reported_by": {
14 "id": "worker_789012",
15 "full_name": "Jane Smith"
16 },
17 "reviewed_by": {
18 "id": "reviewer_234567",
19 "full_name": "Michael Torres",
20 "reviewed_at": "2026-01-27T16:45:00Z",
21 "remarks": "Receipts verified. Travel pre-approved by project manager. All expenses within policy limits."
22 },
23 "payment_cycle": {
24 "start_date": "2026-01-01T00:00:00Z",
25 "end_date": "2026-01-31T23:59:59Z"
26 }
27 }
28}

The reimbursement is approved and will be included in the next invoice for this payment cycle.

Handling recurring expense reimbursements

For expenses that repeat monthly, such as internet or phone stipends, use recurring adjustments.

Create recurring monthly stipend

$curl --request POST 'https://api.letsdeel.com/rest/v2/invoice-adjustments?recurring=true' \
>--header 'Authorization: Bearer {{token}}' \
>--header 'Content-Type: application/json' \
>--data-raw '{
> "data": {
> "type": "reimbursement",
> "amount": 100.00,
> "contract_id": "c2345678",
> "description": "Monthly home office stipend (internet and utilities)",
> "date_submitted": "2026-01-27",
> "is_auto_approved": true
> }
>}'

Use auto-approval for standard recurring stipends to streamline processing. This is ideal for fixed monthly allowances that don’t require receipt verification each time.

Stop recurring stipend

When the recurring reimbursement is no longer needed, delete it to stop future occurrences.

$curl --request DELETE 'https://api.letsdeel.com/rest/v2/invoice-adjustments/ae6b97fa-c32c-4490-8cfa-05038e77898a' \
>--header 'Authorization: Bearer {{token}}'

Handling declined reimbursements

If a reimbursement doesn’t meet policy requirements, decline it with a clear explanation.

Decline with feedback

$curl --request POST 'https://api.letsdeel.com/rest/v2/invoice-adjustments/ae6b97fa-c32c-4490-8cfa-05038e77898a/reviews' \
>--header 'Authorization: Bearer {{token}}' \
>--header 'Content-Type: application/json' \
>--data-raw '{
> "data": {
> "status": "declined",
> "reason": "Receipt not legible. Please resubmit with a clear copy of the original receipt showing date, amount, and vendor name."
> }
>}'

When declining reimbursements, always provide specific reasons and actionable feedback. This helps contractors understand what they need to fix for resubmission.

Resubmit corrected reimbursement

After addressing the decline reason, the contractor can submit a new reimbursement.

$curl --request POST 'https://api.letsdeel.com/rest/v2/invoice-adjustments' \
>--header 'Authorization: Bearer {{token}}' \
>--header 'Content-Type: application/json' \
>--data-raw '{
> "data": {
> "type": "reimbursement",
> "amount": 847.50,
> "contract_id": "c2345678",
> "description": "Client meeting travel expenses - NYC Jan 15-17 (resubmission with clear receipts): Flight $450, Hotel $320 (2 nights), Transportation $77.50",
> "date_submitted": "2026-01-27",
> "attachment": {
> "key": "invoice_adjustment_attachments/2026/01/travel_receipts_jan2026_v2.pdf",
> "filename": "travel_receipts_jan2026_clear.pdf"
> }
> }
>}'

Best practices

Documentation requirements

Always attach receipts that include:

  • Vendor or merchant name
  • Date of purchase or service
  • Itemized list of charges
  • Total amount paid
  • Payment method

For travel expenses:

  • Flight confirmation with ticket price
  • Hotel invoice with dates and nightly rate
  • Transportation receipts (taxi, rideshare, parking)
  • Meal receipts with date and location

For equipment:

  • Full invoice or receipt
  • Product specifications
  • Warranty information
  • Proof of business use

Amount verification

Before creating reimbursements:

  • Add up all line items to verify the total
  • Check that amounts match the receipts exactly
  • Convert foreign currency using the exchange rate from the transaction date
  • Include taxes and fees if they are reimbursable per policy

Pre-approval workflow

For large or unusual expenses:

  1. Contractor requests pre-approval before making the purchase
  2. Manager approves the planned expense and budget
  3. Contractor makes the purchase and saves receipts
  4. Contractor submits reimbursement with receipts
  5. Finance verifies against pre-approval and receipts
  6. Reimbursement is approved and paid

Expense policy compliance

Create clear expense policies that define:

  • Maximum amounts for different expense categories
  • What expenses are reimbursable vs. non-reimbursable
  • Required documentation and approval levels
  • Timeframe for submitting reimbursement requests
  • Currency conversion policies
  • Per diem rates for meals and incidentals

Timing considerations

  • Submit reimbursements promptly after expenses are incurred
  • Some organizations require submission within 30 or 60 days
  • Submit early in the payment cycle to ensure inclusion in the current invoice
  • Late submissions may roll to the next payment cycle

Audit trail

Maintain a complete audit trail by:

  • Attaching all receipts and documentation
  • Including detailed descriptions
  • Recording approval reasons
  • Keeping copies of declined reimbursements
  • Tracking reimbursement by category and contractor

Troubleshooting

Attach a clear, legible receipt that includes all required information (vendor, date, amount, items). If the original receipt is lost, request a duplicate from the vendor or provide a credit card statement as supporting documentation.

Verify the total amount includes all line items from the receipt. If you made a mistake, update the pending adjustment with the correct amount before approval.

Convert the amount to the contract currency using the exchange rate from the transaction date. Include the original amount, currency, and exchange rate used in the description. Attach the receipt showing the foreign currency amount.

Provide a translation of key information (vendor, date, items, amount) in the description field. For large expenses, consider attaching a certified translation.

Create separate reimbursements for each contractor’s portion. Clearly indicate in the description that the expense was shared and specify each person’s share. Attach the full receipt to all related reimbursements.

If the expense exceeds policy limits, either reduce the reimbursement amount to the policy maximum or request special approval from senior management before submitting.

Combine all receipts into a single PDF file before uploading. Include a cover sheet summarizing all expenses with a total. Many free PDF tools can merge multiple files.

Next steps