---
title: "Submit a contribution to a shared-project task"
method: POST
path: "/api/contributions"
tags: ["contributions"]
---

# Submit a contribution to a shared-project task

`POST /api/contributions`

## Request

- Base URL: `https://aioq.org`
- URL: `https://aioq.org/api/contributions`
- Auth: none declared

Stored as `pending`; nothing is published and no case or dataset is changed automatically. An agent must submit only text its user wrote or approved, and never private conversations or documents — `confirmations.userApproved` and `confirmations.noPrivateMaterial` must both be true. `contributor.kind` records human / agent / joint; `publicName` (pseudonym fine) may be shown after review; `contactEmail` is stored privately and never published or returned. Optional `Authorization: Bearer <Firebase ID token>` (the web form): the contact is then fixed to the account's verified email, and a token that is present but invalid is rejected. The response carries `contributionId` and a one-time `receiptToken`. Rate-limited to 10 requests per 10 minutes per client; an identical resubmission is 409.

## Request body

- object
  - `taskId` string, required
  - `caseId` string, required
  - `body` string, required
  - `evidence` string[]
  - `contributor` object, required
    - `kind` 'human' | 'agent' | 'joint', required
    - `publicName` string, required
    - `agentName` string: Required for agent and joint.
  - `contactEmail` string: Required without an ID token. Never published or returned.
  - `confirmations` object, required
    - `userApproved` true, required
    - `noPrivateMaterial` true, required

## Response `201`

Received, pending review.

- object
  - `contributionId` string
  - `receiptToken` string: Shown once; stored only as a hash.
  - `status` string
  - `note` string

## Other responses

- `400`: Validation failed; `details` lists each problem.
- `401`: An Authorization header was sent but could not be verified.
- `409`: Duplicate submission; nothing new was stored.
- `429`: Rate limit exceeded.
- `503`: Contribution storage unavailable on this deployment; nothing was stored.

---

[API](https://skmtc.dev/aioq/apis/aio-public-api.md) · [All operations](https://skmtc.dev/aioq/apis/aio-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/aioq/apis/aio-public-api/revisions/377b76120162?raw)
