---
title: "What this agent enforces on an organization, installed policy packs counted (internal service)"
method: GET
path: "/api/v1/policy-packs/summary"
tags: ["Decision Mode"]
---

# What this agent enforces on an organization, installed policy packs counted (internal service)

`GET /api/v1/policy-packs/summary`

## Request

- Base URL: `https://agent.getaxonflow.com`
- URL: `https://agent.getaxonflow.com/api/v1/policy-packs/summary`
- Auth: API key in header `X-Internal-Service-ID` and API key in header `X-Internal-Service-Token`
- TypeScript: <https://skmtc.dev/getaxonflow/apis/axonflow-agent-api/docs/api/v1/policy-packs/summary/get.ts> (a function with typed inputs; its response is checked against the schema)

The count of the policies in force on the decide scope, taken from the
activation this agent enforces on the organization: its active typed
document, its recorded detection overrides and the policy packs this
process installed (#4249). The agent is the only process that loads a
deployment's packs, so the orchestrator's and the customer portal's
`GET /api/v1/typed-policies/active/summary` read this to count them.

`packs_counted` is always true here: this process knows which packs
are installed, so a deployment that installed none, every Community
one included, answers `pack` 0, a counted zero.

INTERNAL BY ITS CREDENTIAL, NOT ITS PATH. Only the internal-service
credential (`X-Internal-Service-ID` + `X-Internal-Service-Token`) is
answered; any other caller, a tenant's included, gets 401. The
organization is the one the internal caller names in `X-Org-ID`. The
route is deliberately not under `/api/v1/typed-policies`, which the
agent forwards whole to the orchestrator: there it would either shadow
the tenant summary route with a 401, or send the orchestrator's read
back to the orchestrator, which would count no packs and say nothing.

## Headers

- `X-Org-ID` string, required

## Response `200`

The count of the policies in force, installed packs counted

- object
  - `success` boolean, required
  - `scope` 'decide', required
  - `shipped` integer, required
  - `organization` integer, required
  - `pack` integer, required
  - `packs_counted` boolean, required
  - `disabled` integer, required
  - `total` integer, required
  - `not_bound_here` string[]
  - `detector_not_run_here` object[]: Per control, the registry detector this scope does not run and the planes that do. Every id here is also in `not_bound_here`. Omitted when there are none.
    - `id` string
    - `detector` string
    - `runs_on` string[]

## Other responses

- `400`: Missing X-Org-ID header
- `401`: Not the internal-service credential
- `503`: What this agent enforces could not be counted; `reason` names the cause (`decision_enforcement_unavailable`, `active_document_unreadable`, `detection_overrides_unreadable`, `summary_unavailable`, or the activation's cause)

---

[API](https://skmtc.dev/getaxonflow/apis/axonflow-agent-api.md) - [All operations](https://skmtc.dev/getaxonflow/apis/axonflow-agent-api/llms.txt) - [OpenAPI document](https://skmtc.dev/getaxonflow/apis/axonflow-agent-api/revisions/34d30fcb7fa1?raw)
