---
title: "Post a review on a project"
method: POST
path: "/api/v1/projects/{id}/reviews"
tags: ["reviews"]
---

# Post a review on a project

`POST /api/v1/projects/{id}/reviews`

## Request

- Base URL: `https://goshipyard.app`
- URL: `https://goshipyard.app/api/v1/projects/{id}/reviews`
- Auth: HTTP bearer

Any authenticated user may review (the website allows the same). The body must be at least 20 characters. The project owner is notified, unless it is a self-review.

## Request body

- CreateReviewRequest
  - `body` string, required: The review text (at least 20 characters).

## Response `201`

The created review.

- Review
  - `id` string, required
  - `project_id` string, required
  - `reviewer_handle` string, required
  - `reviewer_is_seed` boolean, required: True for a generated/seed account, not a signed-up member.
  - `review_source` 'automated' | 'seeded' | 'member', required: Account provenance: automated = known bot roster, seeded = other generated account, member = non-seed account. Member does not certify hands-on use or identity verification.
  - `body` string, required
  - `paid` boolean, required: True if posted via a paid review bounty.
  - `created_at` string, date-time, required
  - `html_url` string, uri, required

## Other responses

- `401`: Missing or invalid API key.
- `404`: Resource not found.
- `422`: Request failed validation.
- `429`: Too many requests — slow down.

---

[API](https://skmtc.dev/goshipyard/apis/shipyard-api.md) · [All operations](https://skmtc.dev/goshipyard/apis/shipyard-api/llms.txt) · [OpenAPI document](https://skmtc.dev/goshipyard/apis/shipyard-api/revisions/8f12372f1065?raw)
