# Submit a review

**Publié le** : 2026-05-12
**Catégorie** : Forms & Reviews

## `POST /reviews`

**Submit a review**

Submit a review for the site. Requires spam protection (same
contract as `/forms/{slug}/submit`). The new review enters the
site's moderation queue: it is NOT immediately visible via
`GET /reviews`. The status returned by the API reflects the
moderation flow (`pending` by default; `approved` when the site
enables auto-approve and the minimum rating threshold is met).

### Request Body

Content-Type: `application/json`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `authorName` | string | Yes | Required. 2-100 characters |
| `authorEmail` | string | No | Author email address |
| `authorPhotoUrl` | string | No | Author photo URL |
| `authorCompany` | string | No | Author company name. Max 100 characters |
| `authorPosition` | string | No | Author job title. Max 100 characters |
| `authorCity` | string | No | Author city. Max 100 characters |
| `rating` | number | Yes | Required. Between 1 and 5 |
| `content` | string | Yes | Required. Text content. 10-5000 characters |
| `title` | string | No | Display title. Max 200 characters |
| `productName` | string | No | Associated product name. Max 200 characters |
| `productSku` | string | No | Associated product SKU. Max 100 characters |
| `customFields` | object | No | Custom field values |


### Responses

| Status | Description |
| --- | --- |
| `201` | Successful response |
| `422` | Validation error |


> **Notes:** Spam protection: see top-level `x-spam-protection`. Rate-limit
> bucket: public-submit (~30 rpm per IP). On spam rejection: 403. On
> validation failure: 422. The required-fields list (email,
> productName, photo, etc.) depends on the site's review settings;
> read `/reviews/settings` before rendering the form.

### Examples

```curl
curl -X POST "https://api.lynkow.com/public/{siteId}/reviews" \
  -H "Content-Type: application/json" \
  -d '{ "authorName": "Anna Cooper", "rating": 5, "title": "Great", "content": "Worked perfectly.", "honeypot": "", "timestamp": "2026-05-12T14:32:18.000Z" }'
```

```javascript
await fetch(`https://api.lynkow.com/public/${siteId}/reviews`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    authorName: 'Anna Cooper',
    rating: 5,
    title: 'Great',
    content: 'Worked perfectly.',
    honeypot: '',
    timestamp: new Date().toISOString(),
  }),
})
```

### Response Example

```json
"{\n  \"data\": {\n    \"id\": \"01J9R5Z3KE7Q1XB4T6F8H2D9P0\",\n    \"status\": \"pending\",\n    \"authorName\": \"Anna Cooper\",\n    \"rating\": 5,\n    \"title\": \"Great\",\n    \"content\": \"Worked perfectly.\",\n    \"createdAt\": \"2026-05-12T14:32:18.512Z\"\n  }\n}\n"
```

---