Skip to main content
POST
/
api
/
projects
/
{id}
/
bounties
Create Bounty
curl --request POST \
  --url https://api.example.com/api/projects/{id}/bounties \
  --header 'Content-Type: application/json' \
  --data '
{
  "title": "<string>",
  "description": "<string>",
  "reward_amount": 123,
  "difficulty": "<string>"
}
'

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.

Requires authentication. Founder only.
id
string
required
Project ID.

Request

title
string
required
Bounty title (max 200 characters).
description
string
required
What needs to be built (max 2000 characters).
reward_amount
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.
difficulty
string
Difficulty level: easy, medium, hard, or extreme. Defaults to medium.

Example

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

201
{
  "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"
  }
}
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.