---
title: "Search"
method: POST
path: "/api/v1/funds/rules/search"
tags: ["Fund Rules"]
---

# Search

`POST /api/v1/funds/rules/search`

Search rules by display name. Reads the Postgres mirror.

## Request body

- C1ApiFundsV1FundRuleServiceSearchRequest — The FundRuleServiceSearchRequest message.
  - `pageSize` integer — The pageSize field.
  - `pageToken` string — The pageToken field.
  - `query` string — Case-insensitive search over the rule display name; empty returns all.

## Response `200`

Successful response

- C1ApiFundsV1FundRuleServiceSearchResponse — The FundRuleServiceSearchResponse message.
  - `list` C1ApiFundsV1FundRule[], nullable — The list field.
    - `createdAt` string, date-time, nullable
    - `displayName` string — Admin-facing label, so a rule list reads as policy rather than as ids. Bounded on the message rather than only on Create: Update carries a whole FundRule, and this is the column the mirror's full-text and btree indexes are built on.
    - `grant` C1ModelsFundsV1SpendLimit — SpendLimit is the three-way behavior fork. Which arms are legal depends on the scope carrying it; pkg/funds enforces that matrix, not the schema, because one SpendControls shape is shared by every scope. This message contains a oneof named kind. Only a single field of the following list may be set at a time: - unlimited - amount - blocked
      - `amount` C1ModelsFundsV1SpendLimitAmount — SpendLimitAmount caps spend at money per resolved period.
        - `money` C1ModelsFundsV1Money — Money is wire-compatible with google.type.Money field-for-field, so the public API converts with a field copy. Declared here rather than imported because protoc-gen-pgdb mirrors a nested message by calling its generated DBReflect, which only exists for messages this repo generates.
          - `currencyCode` string — ISO 4217 currency code. Must equal the tenant's FundPolicy.currency_code.
          - `nanos` integer — Nano-unit remainder, 0 <= nanos < 10^9. Non-negative for the same reason as units, which also keeps the (units, nanos) pair unambiguous.
          - `units` string, int64 — Non-negative — grants, never debts — and bounded so units * 10^9 + nanos always fits int64. Without the ceiling a large value wraps positive and installs a limit nobody granted. The pair check spans two fields, so pkg/funds re-checks it on every conversion.
      - `blocked` C1ModelsFundsV1SpendLimitBlocked — SpendLimitBlocked refuses supply at this scope. Distinct from suspension: blocked is a stated policy posture, suspension is a reversible freeze that preserves the numbers underneath it.
      - `unlimited` C1ModelsFundsV1SpendLimitUnlimited — SpendLimitUnlimited is a tracking limit: full accounting, no admission condition. The maximum element, so an unlimited default makes grant rules no-ops.
    - `groupRef` C1ApiAppV1AppEntitlementRef — The AppEntitlementRef message.
      - `appId` string — The appId field.
      - `id` string — The id field.
    - `reason` string — Why this cohort is funded. Subject-visible where a grant is explained.
    - `ruleId` string — The ruleId field.
    - `tenantId` string — The tenantId field.
    - `updatedAt` string, date-time, nullable
  - `nextPageToken` string — The nextPageToken field.

## Changes

- **2026-09-01** `f76d07868c0c` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/conductorone/apis/c1-api/changes/api/v1/funds/rules/search/post.md)

---

[API](https://skmtc.dev/conductorone/apis/c1-api.md) · [All operations](https://skmtc.dev/conductorone/apis/c1-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/conductorone/c1-api/revisions/f76d07868c0c/schema)
