---
title: "Change a case's status or owner"
method: POST
path: "/projects/{project_id}/policy-cases/{case_id}"
tags: ["Policy"]
---

# Change a case's status or owner

`POST /projects/{project_id}/policy-cases/{case_id}`

## Request

- Base URL: `https://adslighthouse.com/api/v1`
- URL: `https://adslighthouse.com/api/v1/projects/{project_id}/policy-cases/{case_id}`
- Auth: HTTP bearer

Sets a case's status (open, investigating, contacted, resolved, dismissed) and/or owner (a member's user id, or null to unassign). Each actual change is added to the timeline; repeating the same values changes nothing. A resolved case reopens by itself when a new matching ad is observed later; a dismissed case stays dismissed. This records your team's follow-up only: it contacts no one. Requires the write scope.

## Path parameters

- `project_id` string, required: The project: its id, its brand domain (for example nike.example) or its exact project or brand name. Unknown or ambiguous references return not_found; call list_projects then.
- `case_id` string, required: The case id from list_policy_cases.

## Request body

- object
  - `status` 'open' | 'investigating' | 'contacted' | 'resolved' | 'dismissed'
  - `owner_user_id` string, nullable

## Response `200`

Change a case's status or owner

- object
  - `id` string, required
  - `rule_id` string, nullable, required: null when the rule was deleted; rule_name is kept.
  - `rule_name` string, required
  - `rule_type` 'forbidden_terms' | 'brand_term' | 'direct_linking' | 'promo_code' | 'position_limit' | 'affiliate_id', required
  - `advertiser_domain` string, required
  - `affiliate_id` string, nullable, required
  - `status` 'open' | 'investigating' | 'contacted' | 'resolved' | 'dismissed', required
  - `owner_user_id` string, nullable, required
  - `owner_email` string, nullable, required
  - `first_seen_at` string, required
  - `last_seen_at` string, required
  - `match_count` integer, required: Every finding recorded on the case.
  - `reopen_count` integer, required: Times a new match reopened it after it was resolved.
  - `request_id` string

## Other responses

- `400`: Invalid parameters, cursor or body.
- `401`: Missing, invalid, expired or revoked credential.
- `403`: The credential lacks the write scope, the plan does not include the API, or the allowance is used up.
- `404`: Unknown project, keyword or run in this account.
- `409`: The idempotency key was already used for a different request.
- `429`: Rate limit reached. Retry after the Retry-After seconds.
- `503`: The requested service or file is temporarily unavailable.

---

[API](https://skmtc.dev/adslighthouse/apis/ads-lighthouse-api.md) · [All operations](https://skmtc.dev/adslighthouse/apis/ads-lighthouse-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adslighthouse/apis/ads-lighthouse-api/revisions/e1a4a40b11a9?raw)
