---
title: "Approve or reject a card"
method: POST
path: "/growth/approvals/{messageId}"
tags: ["RanlaCommands"]
---

# Approve or reject a card

`POST /growth/approvals/{messageId}`

## Request

- Base URL: `https://api.supersendtx.com`
- URL: `https://api.supersendtx.com/growth/approvals/{messageId}`
- Auth: HTTP bearer

The same answer as Approve or Decline in the app, with the same checks:
the role needed for the card, and the hire to approve anything that
sends. With `sync: true` the call waits for what approving runs and
returns its outcome as JSON; otherwise it streams. Payout runs move
money and are decided by a signed-in person in the app, never by a key.

## Request body

- object
  - `decision` 'approve' | 'reject', required
  - `sync` boolean: Wait and return JSON instead of a stream.

## Response `200`

Answered. With `sync`, what Ranla did next.

- RanlaApprovalOutcome
  - `text` string: What Ranla said after the decision (with `sync`).
  - `tools` object[]
  - `artifacts` object[]
  - `pendingApproval` object: Another card the run parked, if any.
  - `approval` object: When the decision needed no run (a decline, a payout run).
  - `error` string

## Other responses

- `402`: Approving this card needs Ranla hired
- `403`: The role (or a key, for payout runs) may not decide it
- `404`: Not waiting for a decision
- `409`: Ranla is mid-turn in that thread; try again shortly
- `500`: Approved, but what it ran failed

---

[API](https://skmtc.dev/ranla/apis/supersend-tx-api.md) · [All operations](https://skmtc.dev/ranla/apis/supersend-tx-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ranla/apis/supersend-tx-api/revisions/e3e782652f50?raw)
