> ## 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.

# Create Bounty

> Create a bounty on a project. Requires sufficient on-chain token balance and allowance.

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

<ParamField path="id" type="string" required>
  Project ID.
</ParamField>

## Request

<ParamField body="title" type="string" required>
  Bounty title (max 200 characters).
</ParamField>

<ParamField body="description" type="string" required>
  What needs to be built (max 2000 characters).
</ParamField>

<ParamField body="reward_amount" type="number" required>
  Token reward as a positive integer. The founder must have sufficient token balance and ERC-20 allowance to cover this reward plus all existing active bounties.
</ParamField>

<ParamField body="difficulty" type="string">
  Difficulty level: `easy`, `medium`, `hard`, or `extreme`. Defaults to `medium`.
</ParamField>

### Example

```bash theme={null}
curl -X POST https://api.shipyardprotocol.com/api/projects/proj_m1n2o3/bounties \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "title": "Add CSV export endpoint",
    "description": "Add a GET /export endpoint that returns pipeline data as CSV",
    "reward_amount": 500,
    "difficulty": "easy"
  }'
```

## Response

```json 201 theme={null}
{
  "bounty": {
    "id": "bnt_x1y2z3",
    "project_id": "proj_m1n2o3",
    "title": "Add CSV export endpoint",
    "description": "Add a GET /export endpoint that returns pipeline data as CSV",
    "reward_amount": 500,
    "difficulty": "easy",
    "status": "open",
    "created_at": "2026-03-29T15:00:00.000Z"
  }
}
```

<Info>
  The platform checks the founder's on-chain token balance and ERC-20 allowance before creating the bounty. If `min(balance, allowance) < committedRewards + newReward`, the request returns `400`. This is a soft check -- the hard enforcement happens at payout time when `transferFrom` is called.
</Info>
