Skip to main content
POST
Reject a proposed action

Authorizations

X-API-Key
string
header
required

Path Parameters

proposal_id
string<uuid>
required

Query Parameters

dry_run
boolean
default:false

Report what would happen, and change nothing.

Response

Successful Response

One action the assistant proposed or applied, and what became of it: the card.

Prices are quoted in credits, never tenths, and never as a raw id: who decided is a display name resolved at this boundary. applied_result is the verb's own record of what it made (the new column's id, the rows enrolled), which is what the card links to.

applied_result
Applied Result · object | null
required

The verb's or tool's own record of what it made; null until applied. A tool card carries content (what the assistant read back), link (an app path to the thing), link_label (its name), entity_id, opens (whether the page should go to the link when this lands) and made (what was created, for the AI-made mark), plus any facts the tool added.

approve_label
string
required

What the Approve button says: "Approve", or with the most it spends, "Approve · up to 8 credits", or with a flat price, "Approve · 8 credits", or per day, "Approve · up to 145 credits a day".

batch_id
string<uuid> | null
required

Cards the assistant raised together in one reply share this, so they can be shown and approved as a group. Null for a card raised on its own.

conversation_id
string<uuid> | null
required
decided_at
string<date-time> | null
required
decided_by_display_name
string | null
required
error
string | null
required

Why an approval failed to apply, in plain words; null otherwise.

grantable
boolean
required

Whether the card may offer Approve and allow in this conversation: only a pending proposal of a verb that is not a send.

id
string<uuid>
required
kind
enum<string>
required

verb for one of the eight workspace actions, tool for an API operation the assistant asked to call on your behalf.

Available options:
verb,
tool
message_id
string<uuid> | null
required
origin
enum<string>
required

Which surface raised a proposal.

Kept as its own enum rather than reusing the thread-store origins: a scheduled search proposes with no conversation behind it at all, and the activity feed needs to say so.

Available options:
chat,
agent,
scheduled_search,
table_assistant
price_aside
string | null
required

What a waiting card says beside its Approve button, when the button does not say it all: "usually about 24", "Free", "Free to build · sending about 45 credits". Null when the button says everything.

price_credits
number | null
required

The published price of the operation when it was proposed, in credits; null when free.

price_label
string
required

What the card says it costs: "Free", or the most it can spend, "Up to 16.5 credits"; for a run charged by use, "Up to 65 credits · usually about 24"; for a flat price (a run of enrichments that each have one price), the one figure, "2,800 credits"; once that run has ended, "Charged 23.8 credits"; and for a card priced per day, "Up to 145 credits a day", before and after it is approved.

proposed_at
string<date-time>
required
source_column_id
string<uuid> | null
required

The agent column whose run raised the card; null for every other origin. What puts a card on its table's page when its arguments name a sequence or a destination instead of the table.

source_record_id
string<uuid> | null
required

The row the agent was working on when it raised the card; null otherwise.

status
enum<string>
required

Where one proposed action stands.

PROPOSED waits on a person. APPLIED happened. DISMISSED is a person saying no. FAILED is an approval whose apply raised; the error stays with the row so the card can say why instead of vanishing.

UNDONE is HISTORY ONLY. Nothing reaches it any more: undo was taken out while the assistant moved from eight hand-written verbs to any route it may call, because reversing an arbitrary write is per-route work nobody has done yet. The member stays because rows in this state were written before that, and a status the code cannot read is an activity feed that raises instead of loading.

Available options:
proposed,
applied,
undone,
dismissed,
failed
summary
string
required
verb
string
required

What the card proposes: one of the eight workspace verbs, or the name of an API operation the assistant asked to call. kind says which.

verb_label
string
required
charged_credits
number | null

What the run this card started was charged, in credits, once it finished. Null until then, and for every card that starts no run.

destructive
boolean
default:false

Whether approving this removes something. A destructive card is drawn apart from the safe ones, is never offered a standing grant, and is listed on its own in the confirm an Approve all opens.

detail
ProposalDetailSchema · object | null

What the card shows under its summary, when one line is not enough to decide on: a prompt being rewritten, an email being reworded. Null for most cards, which say it all in the summary.

expected_credits
number | null

What the run usually costs, in credits, read from what the same kind of cell has been charged before; equal to price_credits for a flat price, which the card then says as one figure. Null for a card whose price is the whole story.

loss
string | null

What approving a destructive card takes away, and whether it comes back, in one sentence; null when nothing is removed.

prepared_column
PreparedColumnSchema · object | null

The column this card created before it was decided, so it can be opened from the card while it waits. Null for every other card. Approving runs the column; dismissing removes it, because adding it and running it were one decision.

price_per
enum<string>
default:call

What price_credits is the price of. call: the most approving this card may spend, once. day: the card starts something that keeps spending by itself (no tool raises one today), and price_credits is the most one day may cost ("Approve · up to 145 credits a day"). A total of several cards, such as Approve all's, leaves a day card out of its one-off sum.

Available options:
call,
day
runs_column_id
string<uuid> | null

The column approving this card runs, while the card waits: the one it added, or one already on the table that it names. Lets the column's own panel approve this card instead of starting a second run. Null for a card that runs no column, and once the card is decided.