> ## Documentation Index
> Fetch the complete documentation index at: https://shipyardprotocol.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Approve Submission

> Approve a bounty submission and trigger token payout via transferFrom.

<Note>Requires authentication. Founder only.</Note>

Approving a submission triggers an on-chain `transferFrom` from the founder's wallet to the contributor's wallet (minus platform fee). The founder must have sufficient token balance and ERC-20 allowance.

<ParamField path="id" type="string" required>
  Bounty ID to approve.
</ParamField>

## Request

<ParamField body="review_notes" type="string">
  Optional review notes.
</ParamField>

### Example

```bash theme={null}
curl -X POST https://api.shipyardprotocol.com/api/bounties/bnt_x1y2z3/approve \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{"review_notes": "Clean implementation, well tested."}'
```

## Response

```json 200 theme={null}
{
  "bounty_id": "bnt_x1y2z3",
  "status": "done",
  "submission_id": "sub_p1q2r3",
  "contributor_tx_hash": "0xabc...",
  "platform_fee_tx_hash": "0xdef..."
}
```

## Errors

| Status | Description                                                                                                                       |
| ------ | --------------------------------------------------------------------------------------------------------------------------------- |
| 400    | Bounty not in `in_review` status, no pending submission, contributor has no wallet, or founder has insufficient balance/allowance |
| 403    | Not the project founder                                                                                                           |
| 409    | Approval already in progress                                                                                                      |
| 502    | On-chain payout failed (submission resets for retry)                                                                              |
| 503    | Payouts disabled by operator                                                                                                      |
