---
title: "Dismiss a proposed action"
method: POST
path: "/assistant/actions/{proposal_id}/dismiss/"
tags: ["workspace-actions"]
---

# Dismiss a proposed action

`POST /assistant/actions/{proposal_id}/dismiss/`

## Request

- Base URL: `https://api.getoneprofile.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getoneprofile.ai/assistant/actions/{proposal_id}/dismiss/`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Decline a proposal. Nothing runs, and the card records who said no.

## Path parameters

- `proposal_id` string, uuid, required

## Response `200`

Successful Response

- ActionProposalReadSchema: 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` object, nullable, 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, nullable, 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.
  - `charged_credits` number, nullable: What the run this card started was charged, in credits, once it finished. Null until then, and for every card that starts no run.
  - `conversation_id` string, uuid, nullable, required
  - `decided_at` string, date-time, nullable, required
  - `decided_by_display_name` string, nullable, required
  - `destructive` boolean: 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: The body of a card: what to read under the summary before approving. ``kind`` says how to draw it. ``text`` is a block to read; ``diff`` is a before and an after to compare, which is how a prompt or an email being rewritten is shown, so nobody approves a rewrite they have not seen. A card about a lead search also carries the search: under a ``text`` card's text, or as the first lines of a ``diff``'s before and after. The text then holds only what is not a filter.
    - `after` string: What it would say, for a diff.
    - `before` string: What it says now, for a diff.
    - `kind` 'text' | 'diff', required
    - `landing` CardLandingSchema: The table a lead search's card would make: its name, how many it adds, a few who match. The card leads with it, so a person sees the list they asked for before approving it. Every word is the server's; the dashboard draws it as given.
      - `adds` string, required: How many rows it adds out of how many match: "Adds 10 of 608 people".
      - `sample_columns` string[]: The sample's column names, as the table names them.
      - `sample_rows` array[]: A few who match, one value per column. Empty for a search whose rows are bought.
        - string[]
      - `table_name` string, required: The new table's name, the card's title.
    - `search` CardSearchSchema: A lead search a card lists the filters of, as the search route takes it. Drawn by the dashboard through the Find leads page's own summary, so a card names each filter as the page does, never by its route name.
      - `query` object: The search's filters, filter name to value.
      - `record_type` 'people' | 'companies' | 'signal_companies' | 'signal_people' | 'lookalikes' | 'local_businesses' | 'hiring_companies' | 'backlinks' | 'search_results' | 'post_authors', required: Which dataset a search runs against, and so which provider serves it. Values are persisted in String(16) columns, so every member must stay within 16 characters.
    - `search_before` CardSearchSchema: A lead search a card lists the filters of, as the search route takes it. Drawn by the dashboard through the Find leads page's own summary, so a card names each filter as the page does, never by its route name.
      - `query` object: The search's filters, filter name to value.
      - `record_type` 'people' | 'companies' | 'signal_companies' | 'signal_people' | 'lookalikes' | 'local_businesses' | 'hiring_companies' | 'backlinks' | 'search_results' | 'post_authors', required: Which dataset a search runs against, and so which provider serves it. Values are persisted in String(16) columns, so every member must stay within 16 characters.
    - `text` string: The body, for a text card.
  - `error` string, nullable, required: Why an approval failed to apply, in plain words; null otherwise.
  - `expected_credits` number, nullable: 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.
  - `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` 'verb' | 'tool', required: How an approved card is carried out. VERB is F-15's eight hand-written workspace verbs: each has a spec in the registry with its own apply, because applying one is real work rather than a single request. TOOL is any route the assistant may call. An approval re-issues the request the model asked for, through the same executor an MCP client would use, so there is nothing to write per route and nothing to keep in step.
  - `loss` string, nullable: What approving a destructive card takes away, and whether it comes back, in one sentence; null when nothing is removed.
  - `message_id` string, uuid, nullable, required
  - `origin` 'chat' | 'agent' | 'scheduled_search' | 'table_assistant', 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.
  - `prepared_column` PreparedColumnSchema: The column a card created before anybody decided it. Adding a column and running it are one decision: the column lands the moment the card appears, so the person can open it and see what they are being asked to pay for, and the card quotes the run alone. Dismissing the card removes the column again.
    - `column_id` string, uuid, nullable, required: The column the card runs, when the card added it. Null when the card runs a column that was already on the table and added only columns that read it.
    - `dependent_column_ids` string[]: Columns the same reply added that the run fills in after this one. Dismissing the card removes them too. Empty for most cards.
    - `table_id` string, uuid, required
  - `price_aside` string, nullable, 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, nullable, 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.
  - `price_per` 'call' | 'day': What a card's price is the price of: one call, or each day of what the call starts. CALL is nearly every card: the most approving it may spend, once. DAY is a card that starts (or re-arms) a standing buy that goes on spending by itself, adding rows every day: its price is the most one day may cost, said "up to 145 credits a day", and Approve all keeps it out of the one-off total it adds up. No tool starts one today.
  - `proposed_at` string, date-time, required
  - `runs_column_id` string, uuid, nullable: 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.
  - `source_column_id` string, uuid, nullable, 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, nullable, required: The row the agent was working on when it raised the card; null otherwise.
  - `status` 'proposed' | 'applied' | 'undone' | 'dismissed' | 'failed', 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.
  - `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

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Proposal not found.
- `409`: The proposal is not in a state this decision applies to.
- `422`: Invalid request made to the API.
- `500`: Internal server error.
- `502`: Bad gateway error.
- `503`: Service unavailable.

---

[API](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile.md) · [All operations](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/llms.txt) · [OpenAPI document](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/revisions/4a6bd71e3f02?raw)
