# Contractor portal

> A contractor's own hours, pay, agreements and profile, with a contractor sign-in.

MCP toolset: `contractor` (https://app.getoatmilk.com/api/mcp?toolset=contractor)

## agreement

- [`agreement.get`](https://app.getoatmilk.com/docs/api/contractor/agreement.get.md) — Read your agreement in effect: your role, when it starts and ends, the notice it asks for to end it and the day that notice is due, and when new terms start if they do.

## agreements

- [`agreements.download`](https://app.getoatmilk.com/docs/api/contractor/agreements.download.md) — Get a one-minute download link for an agreement sent to you, optionally one version.

- [`agreements.get`](https://app.getoatmilk.com/docs/api/contractor/agreements.get.md) — Read one agreement sent to you, with its status, version and your signature events.

- [`agreements.list`](https://app.getoatmilk.com/docs/api/contractor/agreements.list.md) — List the agreements sent to you for signature, with each one's status and version.

## history

- [`history.list`](https://app.getoatmilk.com/docs/api/contractor/history.list.md) — Read your own past and current timesheet history, including imported weeks and their agreement-based rate estimates.

## home

- [`home.get`](https://app.getoatmilk.com/docs/api/contractor/home.get.md) — Read your own portal summary for one company: your agreement and rate, your next payday, and the one thing to do next (a payment that couldn't be sent, returned hours, an agreement to sign, hours due, or details still needed).

## hours

- [`hours.amend`](https://app.getoatmilk.com/docs/api/contractor/hours.amend.md) — Change one of your submitted time entries (date, minutes, description, and optionally the custom field values) with its expectedRevision, as long as nobody has reviewed it yet. It stays submitted, and a reviewer who already opened it is told it changed.

- [`hours.create`](https://app.getoatmilk.com/docs/api/contractor/hours.create.md) — Log time: a date (not in the future, and not in a pay period that was already paid), minutes and a description, as a draft to submit with your timesheet. A day can't add up to more than 24 hours. The same work on the same day twice is refused unless confirmDuplicate is true.

- [`hours.form`](https://app.getoatmilk.com/docs/api/contractor/hours.form.md) — Read the custom fields you fill in for each time entry.

- [`hours.list`](https://app.getoatmilk.com/docs/api/contractor/hours.list.md) — List your own time entries, optionally from and to dates.

- [`hours.submit`](https://app.getoatmilk.com/docs/api/contractor/hours.submit.md) — Submit one of your time entries for approval with its expectedRevision, once the hours form's required fields are filled in.

- [`hours.update`](https://app.getoatmilk.com/docs/api/contractor/hours.update.md) — Change one of your draft or returned time entries (date, minutes, description) with its expectedRevision. The same rules as logging time apply.

- [`hours.withdraw`](https://app.getoatmilk.com/docs/api/contractor/hours.withdraw.md) — Take a submitted time entry back to draft with its expectedRevision, before it's reviewed.

## hours.correction

- [`hours.correction.request`](https://app.getoatmilk.com/docs/api/contractor/hours.correction.request.md) — Report a mistake in one of your approved time entries (hoursId, its expectedRevision, the corrected date, minutes and description, and a reason). The approved entry stays as it is and is held out of payouts until finance decides. Hours that were already paid are raised with finance as an adjustment instead. One correction can be open per entry.

- [`hours.correction.withdraw`](https://app.getoatmilk.com/docs/api/contractor/hours.correction.withdraw.md) — Take back a correction you reported (correctionId) before finance decides on it, so the entry can be paid as approved.

## hours.details

- [`hours.details.list`](https://app.getoatmilk.com/docs/api/contractor/hours.details.list.md) — Read the custom field values for your own time entries.

- [`hours.details.save`](https://app.getoatmilk.com/docs/api/contractor/hours.details.save.md) — Save custom field values for one of your own draft or returned time entries. Fill a time entry's required custom fields here before submitting it (hours.form lists them).

## identity

- [`identity.get`](https://app.getoatmilk.com/docs/api/contractor/identity.get.md) — Read your own contractor record: your name, legal name, email and country.

## invoice

- [`invoice.attach`](https://app.getoatmilk.com/docs/api/contractor/invoice.attach.md) — Attach an uploaded invoice to one of your pay periods. Finance sees it with your timesheet and your documents.

- [`invoice.prepare`](https://app.getoatmilk.com/docs/api/contractor/invoice.prepare.md) — Get a private upload link for an invoice (a PDF, PNG or JPEG up to 20 MB, with its size and SHA-256) for one of your pay periods.

## onboarding

- [`onboarding.save`](https://app.getoatmilk.com/docs/api/contractor/onboarding.save.md) — Record which setup questions you answered or skipped, whether you finished, and whether you agree to get your tax slips and pay statements by email. It changes nothing else about your profile. Over the API and MCP only answered, skipped and completed are accepted: agreeing to get tax slips by email (eDelivery) is the person's own choice in the portal and is refused with INTERACTIVE_PORTAL_REQUIRED.

## organizations

- [`organizations.list`](https://app.getoatmilk.com/docs/api/contractor/organizations.list.md) — List the companies whose contractor portal records are linked to your verified account. Use it first: pass the organizationId you choose with every other contractor call, or send the X-Accounting-Organization header.

## payment

- [`payment.get`](https://app.getoatmilk.com/docs/api/contractor/payment.get.md) — Read your own payment method with account numbers masked.

- [`payment.save`](https://app.getoatmilk.com/docs/api/contractor/payment.save.md) — Replace your own payment details. Saved numbers are never shown again in full. Change bank details in your contractor portal. Agents and API tokens can't replace payment details.

## payments

- [`payments.history`](https://app.getoatmilk.com/docs/api/contractor/payments.history.md) — Read your own linked bank payments, paid Oatmilk payouts and imported paid history for this employer, without bank descriptions or internal matching details.

## payouts

- [`payouts.list`](https://app.getoatmilk.com/docs/api/contractor/payouts.list.md) — Read your own payouts and when they were sent.

- [`payouts.statement`](https://app.getoatmilk.com/docs/api/contractor/payouts.statement.md) — Download a payment statement (PDF) for one of your paid payouts by id: what it was for, fees, GST/HST, total and date. It isn't a pay stub.

- [`payouts.summary`](https://app.getoatmilk.com/docs/api/contractor/payouts.summary.md) — Download a summary (PDF) of your payments in a calendar year (calendarYear), with totals by currency before and after GST/HST, for your own tax return.

## profile

- [`profile.get`](https://app.getoatmilk.com/docs/api/contractor/profile.get.md) — Read your own onboarding profile, completeness, pay cadence, and masked payment details.

- [`profile.save`](https://app.getoatmilk.com/docs/api/contractor/profile.save.md) — Update your own legal name, roles, contact details, address, sales tax, and corporation details.

## reminders

- [`reminders.set`](https://app.getoatmilk.com/docs/api/contractor/reminders.set.md) — Turn off, or back on, the emails that remind you to log, send and finish things. To take a break, turn them off with until, the day they start again by themselves (after today, at most two years away); pay periods inside a break are never reminded about. Emails about payments, returned hours and agreements always keep coming.

## requests

- [`requests.list`](https://app.getoatmilk.com/docs/api/contractor/requests.list.md) — Read the personal requests assigned to you for your own contractor profile and timesheets.

- [`requests.update`](https://app.getoatmilk.com/docs/api/contractor/requests.update.md) — Complete a personal request assigned to you using its current revision and an idempotency key.

## signatures

- [`signatures.accept`](https://app.getoatmilk.com/docs/api/contractor/signatures.accept.md) — Accept and sign an agreement in your own portal session, after reviewing the exact version. Only you can, interactively; agents can't sign for you.

- [`signatures.decline`](https://app.getoatmilk.com/docs/api/contractor/signatures.decline.md) — Decline an agreement with a reason, in your own portal session. Only you can, interactively; agents can't decide for you.

- [`signatures.prepare`](https://app.getoatmilk.com/docs/api/contractor/signatures.prepare.md) — Start signing an agreement in your own portal session. Only you can, interactively; agents can't sign for you.

- [`signatures.status`](https://app.getoatmilk.com/docs/api/contractor/signatures.status.md) — Read where your signature on an agreement stands.

## taxInfo

- [`taxInfo.get`](https://app.getoatmilk.com/docs/api/contractor/taxInfo.get.md) — Read your own tax numbers, shown only partly, and what your tax slip still needs: your SIN or business number and a complete mailing address.

- [`taxInfo.save`](https://app.getoatmilk.com/docs/api/contractor/taxInfo.save.md) — Add, replace or remove one of your tax numbers (SIN, business number, ITN, or your country's tax number) for your tax slips. It's stored encrypted and only ever shown partly again. Add or replace a tax number in your contractor portal. Agents and API tokens can't handle full tax numbers.

## timesheet

- [`timesheet.fill`](https://app.getoatmilk.com/docs/api/contractor/timesheet.fill.md) — Fill one of your own empty current or past pay periods with draft time entries copied from the last period or your usual pattern. Dates, hours, and reusable form answers can be reviewed before submission.

- [`timesheet.get`](https://app.getoatmilk.com/docs/api/contractor/timesheet.get.md) — Read one of your pay periods, by id or by a date in it, with its entries, custom fields, due date, pay date, and any hour limits in your agreement with how many hours are left this week, this month and in total.

- [`timesheet.noHours`](https://app.getoatmilk.com/docs/api/contractor/timesheet.noHours.md) — Mark your own empty pay period as having no hours, or undo your own report before finance skips it.

- [`timesheet.submit`](https://app.getoatmilk.com/docs/api/contractor/timesheet.submit.md) — Submit all of your draft entries in a pay period (by id, or by a date in it when the dates aren't in a scheduled pay period) after required custom fields are filled in, in one step: either all of them go to review or none do. Skipped and paid periods can't take hours.
