---
title: "Resolve the effective policy for an effect type"
method: GET
path: "/v1/policies/{effectType}"
tags: ["Policies"]
---

# Resolve the effective policy for an effect type

`GET /v1/policies/{effectType}`

## Request

- Base URL: `https://ratchetgate.com`
- URL: `https://ratchetgate.com/v1/policies/{effectType}`
- Auth: HTTP bearer

Returns the workspace default with is_default=true when no explicit policy exists.

## Path parameters

- `effectType` string, required

## Response `200`

Default Response

- object
  - `effect_type` string
  - `mode` 'allow' | 'require_approval' | 'deny'
  - `on_indeterminate` 'block' | 'retry' | 'probe'
  - `lease_seconds` integer
  - `max_attempts` integer
  - `max_cost_micros` integer, nullable
  - `daily_budget_micros` integer, nullable
  - `retention_days` integer
  - `require_cost` boolean
  - `reconcile_every_hours` integer, nullable: How often this effect type should be compared against the vendor's own record. Ratchet cannot perform that comparison — it keeps the calendar and says when one is overdue, via the reconciliation.due event.
  - `approval_above_micros` integer, nullable: Declared cost at or above which begin returns approval_required instead of execute. Raises the decision only — it never turns an approval or a denial back into an allow. Null disables it.
  - `structuring_threshold_micros` integer, nullable: A line watched but never enforced. Nothing is refused for exceeding it; the structuring analysis measures how closely declared amounts crowd it.
  - `required_dimensions` string[]: Dimensions a caller must declare on begin, or the call is refused. Without this a ceiling keyed on a dimension is evaded by simply not declaring it.
  - `dimension_limits` object: Per-dimension daily ceilings, e.g. {"counterparty":{"daily_micros":200000000,"daily_count":20}} for "no more than $200 and no more than 20 effects to any one counterparty per UTC day". daily_count applies even to effects that declare no cost, which is what makes it usable for outbound messaging.
  - `surge_per_hour` integer, nullable: New effects of this type per hour above which the circuit breaker opens. Null disables surge containment, which is the default.
  - `surge_action` 'monitor' | 'require_approval' | 'deny'
  - `surge_cooldown_seconds` integer
  - `surge_multiplier` integer, nullable: Relative surge threshold: how many times normal is definitely wrong. Use when you do not know your own traffic. Does nothing until enough history exists to compute a baseline.
  - `surge_baseline_per_hour` integer, nullable: Median hourly volume over the last 7 days. Computed for you.
  - `surge_effective_ceiling` integer, nullable: The hourly ceiling actually in force, whichever rule produced it.
  - `surge_ceiling_source` 'absolute' | 'learned' | 'null', nullable
  - `is_default` boolean

## Other responses

- `400`: Invalid request.
- `401`: Missing or invalid API key.
- `402`: Insufficient prepaid credit.
- `403`: Scope, policy, or budget refusal.
- `404`: Not found.
- `409`: Conflicting state or idempotency-key reuse.
- `413`: Payload too large.
- `429`: Rate limit exceeded.

---

[API](https://skmtc.dev/ratchetgate/apis/ratchet-api.md) · [All operations](https://skmtc.dev/ratchetgate/apis/ratchet-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ratchetgate/apis/ratchet-api/revisions/5712f33c692f?raw)
