---
title: "Evaluate a mandate against a sealed plan or draft proposal"
method: POST
path: "/v1/mandates/{mandateId}/evaluate"
tags: ["Mandates"]
---

# Evaluate a mandate against a sealed plan or draft proposal

`POST /v1/mandates/{mandateId}/evaluate`

## Request

- Base URL: `https://sandbox.api.infinite.dev`
- URL: `https://sandbox.api.infinite.dev/v1/mandates/{mandateId}/evaluate`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/infinite/apis/infinite-api/docs/v1/mandates/:mandateId/evaluate/post.ts> (a function with typed inputs; its response is checked against the schema)

Fail-closed spend-policy check. Prefer sealedPlan from an APPROVED payment outcome intent. Draft proposals support pre-approve mocks (ENG-2007 wires draft create). Does not move money and does not auto-execute.

## Path parameters

- `mandateId` string, required

## Headers

- `X-API-Key` string

## Request body

- EvaluateMandateDto
  - `sealedPlan` MandateSealedPaymentPlanDto
    - `v` number, required
    - `legs` MandateSealedPaymentPlanLegDto[], required
      - `legIndex` number, required
      - `sourceAmountMinor` string, required
      - `sourceCurrency` string, required
      - `sourceAccountId` string, required
      - `sourceRail` string, required
      - `destinationAmountMinor` string, required
      - `destinationCurrency` string, required
      - `payeeAccountId` string, required
      - `destinationRail` string, required
  - `proposal` MandateDraftProposalDto
    - `customerId` string, required
    - `amountMinor` string, required: Minor units.
    - `currency` string, required
    - `destinationAccountId` string, required
    - `destinationRail` string, required
    - `sourceAccountId` string, nullable
    - `sourceRail` string, nullable
    - `drafterPrincipalId` string, nullable: Principal that would create the draft (`agt_…`, `ak_…`, `usr_…`).
  - `asOf` string: Instant to evaluate the validity window against. Only applied for sealedPlan subjects (use seal time). Draft proposals always evaluate at now — caller-supplied asOf is ignored.
  - `priorSpendDayMinor` string: Optional prior spend in the UTC day window (minor units). ENG-2007 will derive this; Lane A may supply it when mocking.
  - `priorSpendMonthMinor` string: Optional prior spend in the UTC month window (minor units). ENG-2007 will derive this; Lane A may supply it when mocking.

## Response `200`

- MandateEvaluationResponseDto
  - `allowed` boolean, required
  - `mandateId` string, required
  - `denial` MandateDenialDto
    - `code` 'mandate_not_found' | 'mandate_not_active' | 'mandate_outside_validity_window' | 'mandate_limit_exceeded' | 'mandate_payee_not_allowed' | 'mandate_rail_not_allowed' | 'mandate_drafter_not_allowed' | 'mandate_currency_mismatch' | 'mandate_customer_mismatch' | 'mandate_empty_subject' | 'mandate_prior_spend_required', required
    - `window` 'PER_TRANSACTION' | 'PER_DAY' | 'PER_MONTH'
    - `limit` string: Limit that was exceeded (minor units).
    - `used` string: Used amount including this subject (minor units).
    - `message` string

## Other responses

- `401`: Unauthorized - Invalid or missing authentication credentials

## Changes

- **2026-10-03** `9f50af0b2ebf`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/infinite/apis/infinite-api/changes/v1/mandates/:mandateId/evaluate/post.md)

---

[API](https://skmtc.dev/infinite/apis/infinite-api.md) - [All operations](https://skmtc.dev/infinite/apis/infinite-api/llms.txt) - [OpenAPI document](https://skmtc.dev/infinite/apis/infinite-api/revisions/90065d3e6974?raw)
