Create a project

Creates a project for a client you already have. title, company_id and billing_type are required; find the company id with GET /public-api/v1/companies.

billing_fee and billing_cycle have to agree with billing_type, and a mismatch is rejected rather than ignored:

billing_type billing_fee billing_cycle
fixed_fee required must be omitted
retainer required required
time must be omitted must be omitted
not_billable must be omitted must be omitted

Bonsai fills in the rest: the project number, its client-facing URL token, its color, and its starting members. currency follows the client's currency and start_date defaults to today.

Body
required
application/json

Project attributes, wrapped in a project key.

  • project
    Type: object
    required
Responses
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for post/public-api/v1/projects
curl https://app.hellobonsai.com/public-api/v1/projects \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "project": {
    "title": "Acme Website",
    "company_id": 42,
    "currency": "USD",
    "start_date": "2026-05-01",
    "billing_type": "fixed_fee",
    "billing_fee": "5000",
    "billing_cycle": "monthly"
  }
}'
{
  "data": {
    "id": 51,
    "title": "Acme Website",
    "public_url_token": "acme-website-x4n2",
    "currency": "USD",
    "start_date": "2026-05-01",
    "sequence": 1,
    "number": "ACME-0001",
    "board_group_id": "0c8f1e2a-3b4c-4d5e-6f70-8192a3b4c5d6",
    "company_name": "Acme Corp",
    "billing_type": "fixed_fee",
    "billing_cycle": "monthly",
    "billing_fee": "5000.0",
    "company_id": 42,
    "url": "https://app.hellobonsai.com/projects/acme-website-x4n2"
  },
  "meta": {
    "request_id": "b1f0d2c4-7a9e-4c3b-8d5f-1e2a3b4c5d6e"
  }
}