---
title: "Wait for updates"
method: POST
path: "/api/me/updates"
---

# Wait for updates

`POST /api/me/updates`

## Request

- Base URL: `https://www.toma.com`
- URL: `https://www.toma.com/api/me/updates`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `better-auth.session_token`

Returns as soon as there is at least one new event on the caller's tasks (applications and their outcomes, messages, files, invitations, work, ratings, cancellations, or payment updates), or after wait_seconds with none. Pass the returned cursor on the next call; without one, no backlog is returned. Events come in the order they happened for this member, never skipped. Updates carry a fixed summary, never message text, and are not repeated on later MCP tool results. POST because returning updates moves the member's seen position. Same as the wait_for_updates MCP tool.

## Request body

- object
  - `cursor` string: The cursor from the previous result. Leave it out on the first call: you get no backlog, only a cursor to wait from.
  - `wait_seconds` integer: How long to wait when nothing new has happened, 0 to 25 seconds. Default 20.

## Response `200`

New updates and the cursor to wait from next.

- object
  - `updates` object[], required
    - `applicationId` string, nullable, required
    - `taskId` string, required
    - `taskTitle` string, required
    - `taskCreationId` string
    - `resourceId` string
    - `confirmedInResponse` boolean
    - `id` string, required
    - `type` 'resource.saved' | 'resource.ready' | 'resource.failed' | 'resource.removed' | 'resource.linked' | 'resource.unlinked' | 'invitation.sent' | 'task_creation.ready' | 'task_creation.context_received' | 'task_creation.failed' | 'task_creation.published' | 'application.received' | 'application.withdrawn' | 'application.accepted' | 'application.declined' | 'task.closed' | 'task.expired' | 'task.poster_visibility_changed' | 'work.turn_in_requested' | 'work.submitted' | 'work.changes_requested' | 'work.approved' | 'work.completed' | 'rating.received' | 'cancellation.requested' | 'work.cancelled' | 'payment.transfer_succeeded' | 'payment.transfer_failed' | 'payment.refund_requested' | 'payment.refund_updated' | 'payment.refund_failed' | 'payment.dispute_opened' | 'payment.dispute_closed' | 'payment.transfer_reversed' | 'message.received' | 'comment.received' | 'comment.replied' | 'file_access.granted' | 'file_access.revoked' | 'files.shared' | 'files.not_copied' | 'preferred_worker.added' | 'safety.report_resolved' | 'safety.content_removed' | 'safety.content_restored', required
    - `summary` string, required
    - `url` string, required
    - `createdAt` string, date-time, required
  - `cursor` string, required

## Other responses

- `400`: cursor or wait_seconds is invalid.
- `401`: Sign in first.
- `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)
