---
title: "Api Limit Policies List Partial Update"
method: PATCH
path: "/api/limit-policies/list/"
tags: ["platformApi"]
---

# Api Limit Policies List Partial Update

`PATCH /api/limit-policies/list/`

PATCH handler with superadmin lock and field protection.

Checks:
1. Object lock (is_managed=True -> non-superadmins can't modify)
2. Field protection (non-superadmins can't modify specific fields)

## Headers

- `Authorization` string, required

## Response `200`

- LimitPolicyId — Minimal pre-enrichment serializer for the ``/list/`` route. ``DataEnrichmentMixin.list()`` serializes the page **once** with the view's ``serializer_class`` before ``enrich_results`` rebuilds each row from scratch (one PG IN-refetch + one pipelined Redis HGET + one TagManager IN-query for the whole page). If we used the full ``LimitPolicyListSerializer`` for that first pass, every row's ``current_state`` SerializerMethodField would fire a Redis HGET and every ``tags`` SerializerMethodField would fire a TagManager query — N+1 work that ``enrich_results`` immediately discards. This serializer emits **only** ``id`` because that is all ``LimitPoliciesListView.enrich_results`` reads off the dict (``policy_ids = [row.get("id") for row in results …]``). The OpenAPI response contract is declared via ``@extend_schema( responses=LimitPolicyStateRowSerializer)`` on the view, so codegen types still reflect the merged shape.
  - `id` string, required

---

[API](https://skmtc.net/keywordsai/apis/api-reference.md) · [All operations](https://skmtc.net/keywordsai/apis/api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/keywordsai/api-reference/versions/c26d550029f8/schema)
