---
title: "Claim Receipt"
method: POST
path: "/tasks/claim-receipt"
---

# Claim Receipt

`POST /tasks/claim-receipt`

Claim the next eligible backlog row and return a signed claim receipt.

The dependency gate is enforced by :class:`ClaimFilter`: a row is offered
only when its ``depends_on`` are all in ``completed_ids``. The granted
claim is mirrored into the audit chain via the existing
``record_task_claim_receipt`` (no new event type), and the returned
receipt embeds that event's chain head so the claim verifies offline. A
filter matching no eligible row returns a signed refusal receipt.

## Request body

- ClaimReceiptRequest — Body for POST /tasks/claim-receipt (#2555). Drives the dependency-gated claim path over MCP and returns a signed, content-addressed :class:`ClaimReceipt` instead of a mutable task projection. The eligibility predicates mirror :class:`bernstein.core.tasks.claim.ClaimFilter`: a task is offered only when its ``depends_on`` are all present in ``completed_ids`` (the dependency gate), and a filter that matches no eligible row still returns a signed refusal receipt (never a silent skip).
  - `claimer_id` string, required
  - `claimer_card_fingerprint` string, nullable
  - `role` string, nullable
  - `project` string, nullable
  - `capability` string, nullable
  - `completed_ids` string[]
  - `max_attempts` integer, nullable

## Response `200`

Successful Response

- object

## Other responses

- `422` — Validation Error
- `503` — Server is draining -- no new claims accepted

---

[API](https://skmtc.net/sipyourdrink-ltd/apis/bernstein-task-server.md) · [All operations](https://skmtc.net/sipyourdrink-ltd/apis/bernstein-task-server/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sipyourdrink-ltd/bernstein-task-server/versions/86f514b4e920/schema)
