Review Teams
Create and manage review teams that Human Reviews route to: workspace-unique names, an optional notification webhook URL, and owner-managed team membership.
Review teams are the routing registry for Human Reviews: named groups of workspace users a review can be assigned to, either at raise time (team_id on [POST /v1/apps/:id/reviews](app-reviews)) or later via POST /v1/reviews/:reviewId/assign. The inbox filters make the rest work: a team's members triage GET /v1/reviews?status=open and pick up what is routed their way. Teams are plane-neutral by design — Apps consume them today, other review-routing surfaces adopt the same registry later.
The CRUD is deliberately small. GET /v1/review-teams lists teams (read tier, name-ordered). POST /v1/review-teams creates one from a name (max 200 chars, workspace-unique — a duplicate answers 409 naming the clash) and an optional webhook_url (max 2000 chars) for team notification integrations. PATCH /v1/review-teams/:teamId renames or swaps the webhook URL (pass webhook_url: null to clear it); DELETE /v1/review-teams/:teamId removes the team. All three writes are owner tier — a human workspace owner — while reads sit at the read tier like the rest of the surface.
Membership is managed per team: GET /v1/review-teams/:teamId/members lists members, POST /v1/review-teams/:teamId/members adds one by user_id (a duplicate add answers 409 User is already a member of this team), and DELETE /v1/review-teams/:teamId/members/:userId removes one, answering { "removed": true }. Members are workspace users — the same identities that appear as assignee_user_id on reviews and as resolvers in the ledger.
curl — create a team and add a member
curl -s -X POST https://api.talonic.com/v1/review-teams \
-H "Authorization: Bearer <session-token>" \
-H "Content-Type: application/json" \
-d '{ "name": "Billing Ops", "webhook_url": "https://hooks.example.com/billing-ops" }'
# → { "id": "3f2b9c44-…", "name": "Billing Ops",
# "webhook_url": "https://hooks.example.com/billing-ops", "created_at": "…" }
curl -s -X POST https://api.talonic.com/v1/review-teams/$TEAM_ID/members \
-H "Authorization: Bearer <session-token>" \
-H "Content-Type: application/json" \
-d '{ "user_id": "9a7e1c22-4f0b-4e0e-8a4b-6d2f0c9b1e77" }'curl — route a review to the team
curl -s -X POST https://api.talonic.com/v1/reviews/$REVIEW_ID/assign \
-H "Authorization: Bearer tlnc_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "team_id": "3f2b9c44-1e0a-4b7c-9d21-5a8f0e6c3b12" }'For push-based team tooling, combine the team's webhook_url configuration with the workspace-level app.review.raised webhook: the workspace event tells your integration a review exists (with its kind and question), and your integration fans it out to the team's own channel. Resolution flows back through the normal [resolve endpoint](app-reviews), so a team bot can read the inbox filtered to its assignments and resolve data_request reviews autonomously while leaving approval kinds to humans.