# Requires: npm i -g @infinite_dev/cli && export INFINITE_API_KEY=sk_sandbox_...
# Escape hatch for any endpoint: infinite api <METHOD> <path>
infinite api POST /v1/mandates/<mandateId>/evaluate \
--body '<request-json>'Evaluate a mandate against a sealed plan or draft proposal (<mandateId>).
# Infinite MCP is read-only for this endpoint — use a dedicated MCP tool when one exists, otherwise run the CLI tab.import requests
url = "https://sandbox.api.infinite.dev/v1/mandates/{mandateId}/evaluate"
payload = {
"asOf": "<string>",
"priorSpendDayMinor": "<string>",
"priorSpendMonthMinor": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
asOf: '<string>',
priorSpendDayMinor: '<string>',
priorSpendMonthMinor: '<string>'
})
};
fetch('https://sandbox.api.infinite.dev/v1/mandates/{mandateId}/evaluate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox.api.infinite.dev/v1/mandates/{mandateId}/evaluate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'asOf' => '<string>',
'priorSpendDayMinor' => '<string>',
'priorSpendMonthMinor' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.api.infinite.dev/v1/mandates/{mandateId}/evaluate"
payload := strings.NewReader("{\n \"asOf\": \"<string>\",\n \"priorSpendDayMinor\": \"<string>\",\n \"priorSpendMonthMinor\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox.api.infinite.dev/v1/mandates/{mandateId}/evaluate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"asOf\": \"<string>\",\n \"priorSpendDayMinor\": \"<string>\",\n \"priorSpendMonthMinor\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.api.infinite.dev/v1/mandates/{mandateId}/evaluate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"asOf\": \"<string>\",\n \"priorSpendDayMinor\": \"<string>\",\n \"priorSpendMonthMinor\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"allowed": true,
"mandateId": "<string>",
"denial": {
"code": "mandate_not_found",
"window": "PER_TRANSACTION",
"limit": "<string>",
"used": "<string>",
"message": "<string>"
}
}Evaluate a mandate against a sealed plan or draft proposal
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.
# Requires: npm i -g @infinite_dev/cli && export INFINITE_API_KEY=sk_sandbox_...
# Escape hatch for any endpoint: infinite api <METHOD> <path>
infinite api POST /v1/mandates/<mandateId>/evaluate \
--body '<request-json>'Evaluate a mandate against a sealed plan or draft proposal (<mandateId>).
# Infinite MCP is read-only for this endpoint — use a dedicated MCP tool when one exists, otherwise run the CLI tab.import requests
url = "https://sandbox.api.infinite.dev/v1/mandates/{mandateId}/evaluate"
payload = {
"asOf": "<string>",
"priorSpendDayMinor": "<string>",
"priorSpendMonthMinor": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
asOf: '<string>',
priorSpendDayMinor: '<string>',
priorSpendMonthMinor: '<string>'
})
};
fetch('https://sandbox.api.infinite.dev/v1/mandates/{mandateId}/evaluate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox.api.infinite.dev/v1/mandates/{mandateId}/evaluate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'asOf' => '<string>',
'priorSpendDayMinor' => '<string>',
'priorSpendMonthMinor' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sandbox.api.infinite.dev/v1/mandates/{mandateId}/evaluate"
payload := strings.NewReader("{\n \"asOf\": \"<string>\",\n \"priorSpendDayMinor\": \"<string>\",\n \"priorSpendMonthMinor\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox.api.infinite.dev/v1/mandates/{mandateId}/evaluate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"asOf\": \"<string>\",\n \"priorSpendDayMinor\": \"<string>\",\n \"priorSpendMonthMinor\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.api.infinite.dev/v1/mandates/{mandateId}/evaluate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"asOf\": \"<string>\",\n \"priorSpendDayMinor\": \"<string>\",\n \"priorSpendMonthMinor\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"allowed": true,
"mandateId": "<string>",
"denial": {
"code": "mandate_not_found",
"window": "PER_TRANSACTION",
"limit": "<string>",
"used": "<string>",
"message": "<string>"
}
}Authorizations
API Key in Bearer format (e.g., Bearer sk_test_...)
Headers
API key
Path Parameters
Mandate id (mdt_…).
Body
Preferred subject — sealed plan from an APPROVED payment outcome intent.
Show child attributes
Show child attributes
Draft-shaped subject for pre-approve checks (ENG-2007). Ignored when sealedPlan is set.
Show child attributes
Show child attributes
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.
Optional prior spend in the UTC day window (minor units). ENG-2007 will derive this; Lane A may supply it when mocking.
Optional prior spend in the UTC month window (minor units). ENG-2007 will derive this; Lane A may supply it when mocking.
Was this page helpful?