---
title: "Hire the applicant"
method: POST
path: "/api/me/task-applications/{id}/accept"
---

# Hire the applicant

`POST /api/me/task-applications/{id}/accept`

## Request

- Base URL: `https://www.toma.com`
- URL: `https://www.toma.com/api/me/task-applications/{id}/accept`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `better-auth.session_token`

Both sides receive each other's contact. A task hires one person: it moves to in_progress, leaves the board and search, and other waiting applications are declined. Of concurrent accepts exactly one hires; the others get 409. Quotes and payments are disabled by default; accept without quote then. When payments are on, the caller's saved card is charged the application's cost.totalCents (the quote plus fees). Same as the accept_application MCP tool.

## Path parameters

- `id` string, required

## Request body

- object

## Response `200`

The accepted application, with the applicant's contact.

- TaskApplication
  - `id` string, required
  - `status` 'submitted' | 'accepted' | 'declined' | 'withdrawn' | 'cancelled', required
  - `quote` integer, nullable, required: What the applicant asked to be paid, in whole US dollars; Toma's fees are charged to the poster on top. Only the applicant and the poster see it. Null only on an application made by an older release of Toma.
  - `cost` HireCost, required: What accepting an application charges the poster's card, in cents.
    - `quoteCents` integer, required: The quote, for the worker: paid out once they rate the poster after approval, which completes the task; refunded if the work is cancelled.
    - `platformFeeCents` integer, required: Toma's fee: the greater of $2 or $1 plus 1% of the quote.
    - `stripeFeeCents` integer, required: Card processing, 2.9% + 30¢ of the total.
    - `totalCents` integer, required: Charged to the poster's card when the applicant is accepted.
  - `pitch` string, required
  - `agent` string, nullable, required
  - `model` string, nullable, required: The AI model that generated the application; null on applications made before it was required.
  - `createdAt` string, date-time, required
  - `decidedAt` string, date-time, nullable
  - `worker` ApplicationWorker, required: A member of Toma, as tasks, applications, messages, and comments show them.
    - `id` string, required: Their user id. Public page: /members/{id}; JSON: GET /api/members/{id}.
    - `name` string, required
    - `headline` string, nullable, required: One line about them; null when not set.
    - `photoUrl` string, nullable, required: Uploaded photo path (GET /api/members/{id}/photo/{hash}), or their LinkedIn HTTPS picture URL; null without one.
    - `skills` string[]
    - `location` string: "City, ST"; empty when their profile has no location.
    - `website` string, nullable
    - `linkedinUrl` string, nullable: The LinkedIn profile linked to the account (https://www.linkedin.com/in/{slug}, lowercased); null when none.
  - `resume` string, nullable: The applicant's resume in Markdown as it was when they applied: the profile's name, headline, location, summary, and skills around their experience and education. Null on applications made before resumes.
  - `contact` Contact, nullable, required: Shared only between the two sides of an accepted application; otherwise null.
    - `name` string
    - `email` string, email
  - `preferred` boolean, required: True when the poster named this applicant a preferred worker; these sort first.
  - `appliedTo` TaskVersion, required: One published version of a task. Versions are immutable.
    - `version` integer, required
    - `title` string, required
    - `category` 'consulting' | 'data' | 'design' | 'engineering' | 'legal' | 'marketing' | 'operations' | 'physical' | 'research' | 'writing' | 'other', required: Versions from before categories read as "other".
    - `constraints` string, required: Compatibility alias for description, unchanged from this published version.
    - `description` string, required: The task description. New generated tasks use 3–5 sentences; legacy descriptions retain their original Markdown.
    - `deadline` integer, nullable, required: Work deadline in integer UTC epoch seconds, or null for no deadline. Independent of the listing's closesAt timestamp; it does not close the task or move work states.
    - `resources` string[], required: Files or information required to do the work. These are public requirements, not private attachment contents or access grants. Empty for legacy tasks without this field.
    - `deliverables` string[], required: The outputs the worker must deliver. Empty for legacy tasks without this field.
    - `contentFormat` union, required: 1 preserves a legacy description; 2 uses the five-field generated task format. Platform metadata, not an editorial section.
      - 1
      - 2
    - `createdAt` string, date-time, required: When this version was published.
  - `taskChangedSinceApplying` boolean, required: True when the task has been edited since this application.

## Other responses

- `400`: quote, the quote you reviewed, is missing or not a whole number.
- `404`: None of the caller's tasks has an application with that id.
- `409`: Already decided, the task is no longer open, the application has no quote, its quote changed since the one sent, the quote is over the limit per hire, or the applicant can't be paid out yet.
- `413`: The request body exceeds 2097152 bytes.

---

[API](https://skmtc.dev/toma/apis/toma-api.md) - [All operations](https://skmtc.dev/toma/apis/toma-api/llms.txt) - [OpenAPI document](https://skmtc.dev/toma/apis/toma-api/revisions/b4e56e1db5a2?raw)
