Manage contracts

This guide covers the ongoing management operations for active IC and COR contracts. The sections below are independent; each covers a discrete management function rather than a sequential workflow. For initial contract creation and onboarding, see Create and onboard contractors.

All employer-side endpoints require an admin-scoped token. Worker-side endpoints (timesheets, time off) require a worker-scoped token. See Getting started for authentication setup.

Contract data

Read contract state and list all contracts within the organization.

MethodEndpointPurpose
GET/contractsList contracts, filterable by status, worker, and group
GET/contracts/{contract_id}Full contract detail including terms and current status

Subscribe to contract.status.updated to receive notifications of status changes without polling.

Amendments

Amendments change active contract terms, including rate, job title, scope, or other fields. After creation, the amendment requires worker signature before taking effect.

1

Create the amendment

Submit the amendment with the fields to change and the date the changes take effect.

POST /contracts/{contract_id}/amendments

Required fields: the changed contract fields and effective_date. Only include the fields you want to modify.

2

Track amendment progress

Retrieve all amendments for a contract, including status, changed fields, and signing state.

GET /contracts/{contract_id}/amendments

3

Receive completion confirmation

Subscribe to contract.amended to receive a notification when all parties have signed and the amendment is active.

Invoices and payments

Retrieve invoice and payment records for contractor billing cycles.

MethodEndpointPurpose
GET/invoicesList contractor invoices across all billing cycles
GET/paymentsList payment receipts
GET/payouts/balancesList contractor earned balances

Subscribe to invoice.paid and payment.completed rather than polling these endpoints for status changes.

Off-cycle payments

Off-cycle payments cover one-time amounts outside the regular billing cycle, including bonuses, commissions, and reimbursements.

MethodEndpointPurpose
POST/contracts/{contract_id}/off-cycle-paymentsCreate a payment with amount, currency, reason, and payment_date
GET/contracts/{contract_id}/off-cycle-paymentsTrack off-cycle payment status

Invoice adjustments

Invoice adjustments modify line items on an active invoice, including expenses, equipment, and additional items. Adjustments must be submitted before the invoice locks for the billing cycle.

MethodEndpointPurpose
POST/invoice-adjustmentsCreate an adjustment
PATCH/invoice-adjustments/{id}Update a pending adjustment before the invoice locks

Timesheets

Timesheet workflows apply to Pay-as-you-go contracts only. Workers submit hours each billing cycle; review and approve or reject each entry using your admin token.

Worker submission

Workers submit timesheet entries using the worker token.

POST /timesheets

Required fields: contract_id, quantity (hours), date_submitted (YYYY-MM-DD), description.

Employer review

Retrieve and action timesheet entries using your admin token.

MethodEndpointPurpose
GET/timesheetsList entries, filterable by contract and status
PATCH/timesheets/{id}Update an entry
POST/timesheets/{id}/reviewsApprove or reject (status: approved or rejected)

Subscribe to timesheet.reviewed to notify the worker of the outcome.

Worker time off

Workers submit and cancel time off requests using the worker token.

MethodEndpointPurpose
POST/time_offsSubmit a request (hris_profile_id, type_id, start_date, end_date)
DELETE/time_offs/{time_off_id}Cancel a pending request

Subscribe to time-off.reviewed to notify the worker of the outcome.

Termination

Terminating a contract ends the engagement on a specified date or immediately.

1

Terminate the contract

Submit the termination request with the required fields.

POST /contracts/{contract_id}/terminations

Required fields: termination_type, completion_date (YYYY-MM-DD), terminate_now (boolean; set to true to terminate immediately). Optional: message.

2

Receive confirmation

Subscribe to contract.terminated and people.terminated to confirm the termination has taken effect.

To cancel a termination before it takes effect, use DELETE /contracts/{contract_id}/terminations. This endpoint is only available before completion_date has passed.

Test all termination flows in the sandbox environment before connecting to production data. Termination is irreversible once the completion_date passes.

Webhook events

EventTrigger
contract.amendedAmendment signed by all parties
invoice.paidInvoice settled
payment.completedPayment disbursed to contractor
timesheet.reviewedTimesheet entry approved or rejected
time-off.reviewedTime off request approved or rejected
contract.terminatedContract termination confirmed
people.terminatedContractor profile marked as terminated

See the Webhooks guide for event payload structure and signature verification.

Next steps