API v1
Otklik API documentation
Reply generation, the review queue and publishing — for CRMs, bots and your own dashboards. The format is JSON, authorization is a key in the header. The console at the bottom of the page runs requests right in the browser, with the same analysis and checks as in the dashboard.
Base URL
https://api.otklik.example
Test key
ok_test_7f3a9c2e51b84d06
Rate limit
10 requests a minute in the demo, X-RateLimit-* headers
Authorization: Bearer ok_test_7f3a9c2e51b84d06
Content-Type: application/jsonPOST/v1/replies
Generate a reply
Returns a reply to a review, the results of the checks and the autopilot’s decision under the store’s rules. Publishes nothing.
Parameters
| marketplacerequired"wb" | "ozon" | Platform — the check rules depend on it |
| ratingrequired1–5 | The buyer’s rating |
| textstring | Review text, may be empty |
| productrequiredstring | Product SKU from the store’s catalogue |
| authorstring | Buyer’s name to address them by |
| tone"warm" | "business" | "light" | Tone, taken from the store settings by default |
curl -X POST "https://api.otklik.example/v1/replies" \
-H "Authorization: Bearer ok_test_7f3a9c2e51b84d06" \
-H "Content-Type: application/json" \
-d '{
"marketplace": "wb",
"rating": 2,
"product": "kruzhka",
"author": "Sergey",
"text": "The lid started leaking after just a week"
}'Response · 200
{
"reply": "Hello, Sergey! ...",
"sentiment": "negative",
"topics": ["leak"],
"route": "manual",
"checks": [{ "id": "contacts", "status": "ok" }]
}GET/v1/reviews
Review queue
The store’s reviews with draft replies. Filters by status and platform, cursor-based pagination.
Parameters
| status"new" | "approve" | "published" | Status in the queue |
| marketplace"wb" | "ozon" | Platform |
| limit1–100 | Page size, 20 by default |
curl -X GET "https://api.otklik.example/v1/reviews?status=approve&limit=5" \
-H "Authorization: Bearer ok_test_7f3a9c2e51b84d06"Response · 200
{
"items": [{ "id": "r2", "rating": 2, "status": "approve", "draft": "..." }],
"next_cursor": null
}POST/v1/reviews/{id}/publish
Publish a reply
Sends the draft or the provided text to the marketplace. Before sending, the reply goes through the checks once more — if it fails, you get a 422.
Parameters
| idrequiredstring | Review ID |
| textstring | Your own text instead of the draft |
curl -X POST "https://api.otklik.example/v1/reviews/r2/publish" \
-H "Authorization: Bearer ok_test_7f3a9c2e51b84d06" \
-H "Content-Type: application/json" \
-d '{ "text": "Hello, Sergey! ..." }'Response · 200
{ "id": "r2", "status": "published", "published_at": "2026-10-14T09:12:00Z" }GET/v1/usage
Limit usage
How many replies have been used this month, the plan limit and the forecast to the end of the month.
Parameters
No parameters.
curl -X GET "https://api.otklik.example/v1/usage" \
-H "Authorization: Bearer ok_test_7f3a9c2e51b84d06"Response · 200
{ "plan": "business", "used": 1240, "limit": 3000, "forecast": 2650 }Webhooks
The service sends a POST to your URL when events happen in the store. The signature is an HMAC-SHA256 of the body with the secret from the dashboard: verify it before trusting the request. Retries — 5 times with an increasing pause until you respond with 2xx.
review.created
A new review in the store — with topic analysis and a draft reply
reply.published
A reply was published by the autopilot or by a person
review.escalated
A review went to tasks: a defect, breakage or insults
POST https://your-server.ru/otklik-hook
X-Otklik-Event: review.created
X-Otklik-Signature: sha256=9c1f…e04a
{
"event": "review.created",
"review": { "id": "r2", "marketplace": "wb", "rating": 2, "topics": ["leak"] },
"draft": "Hello, Sergey! ...",
"route": "manual"
}Errors
The error body is always the same: { "error": { "code", "message" } }, and a 400 also has a list of fields.
| 400 | Bad request | A field is missing or a value is out of range — the response lists the fields with errors |
| 401 | Unauthorized | No Authorization header, or the key has been revoked |
| 402 | Limit reached | The plan’s replies have run out and top-ups are switched off |
| 422 | Checks failed | The text to publish contains contacts, links or stop phrases |
| 429 | Too many requests | More than 10 requests a minute in the demo (60 in the production version) |
Console
Requests run in the browser against a demo implementation of the API: the same checks, error codes and limit. Pick an example or build your own.
Press “Send” and the response will appear here