> ## Documentation Index
> Fetch the complete documentation index at: https://developers.reintersect.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Answer a deferred invocation

> Send the answer to a slash command or message action your app deferred.

> Reintersect apps are in developer preview. Names and limits can still change before general
> release.

Answers a [slash command](/commands) or [message action](/message-actions) run that your app
deferred by answering its delivery with `202`. Reintersect places the answer exactly as it would have
placed a direct answer: a public answer is posted as your app, and a private answer becomes the card
only the member who ran it sees. The answer's `visibility` applies whatever the deferral said; the
deferral only decided who saw your app thinking.

Authenticate with an install token. No scope is needed. The run must belong to the same install.

## Body

| Field | Type | Required | Description |
| - | - | - | - |
| `interactionToken` | `string` | Yes | The `interactionToken` from the `command.run` or `messageAction.run` delivery. |
| `answer` | `InvocationAnswer` | Yes | The answer, below. |

`InvocationAnswer`:

| Field | Type | Required | Description |
| - | - | - | - |
| `visibility` | `"public" \| "private"` | Yes | Public posts in the chat or conversation; private shows only to the member who ran it. |
| `content` | `Document` | No | A structured document, such as the output of [`renderPayload`](/reference/client#renderpayload), with the same rules as [reply content](/api-reference/replies/create). |
| `block` | `{ type, props }` | No | One block of your app's types. `props` must match its props schema. |
| `notice` | `{ tone, text }` | No | `tone` is `neutral`, `info`, `success`, `warning` or `danger`; `text` at most 140 characters. A `danger` or `warning` notice with no content or block ends the run as failed and shows the text. |

You have 15 minutes from the delivery. A run takes one answer.

## Response

`200` with `{ invocationId }`.

## Errors

| `_tag` | Status | Cause |
| - | - | - |
| `ReintersectAppInteractionExpiredError` | 401 | The token is unknown, expired or already answered, belongs to another install, or the place to answer in no longer exists. |
| `ReintersectAppBlockTypeUnknownError` | 422 | The installed version has no block of this type. |
| `ReintersectAppBlockPropsInvalidError` | 422 | The props don't match the schema. |
| `ReintersectAppResponseInvalidError` | 502 | Your app's `block.insert` answer for the block was invalid or its tree failed validation. |
| `ReintersectApiInvalidDocumentError` | 422 | The content isn't a valid document. |
| `ReintersectApiMentionUnavailableError` | 422 | A mention names a member, circle or conversation that doesn't exist or that your app can't reach. |
| `ReintersectApiCircleMentionUnavailableError` | 422 | A circle mentioned by slug doesn't exist or your app can't reach it. |
| `ReintersectApiUnsafeLinkError` | 422 | A link uses a scheme Reintersect doesn't allow. |
| `ReintersectApiInvalidEmojiNameError`, `ReintersectApiInvalidAssetReferenceError` | 422 | An unknown emoji name or asset reference in the content. |

An answer that fails validation leaves the run failed; the member sees the failure card.

## Example

```bash theme={null}
curl -X POST https://api.reintersect.com/v0/invocations/respond \
  -H "authorization: Bearer $INSTALL_TOKEN" \
  -H "content-type: application/json" \
  -d '{ "interactionToken": "'"$INTERACTION_TOKEN"'", "answer": { "visibility": "public", "block": { "type": "deploy", "props": { "service": "api", "environment": "production" } } } }'
```

With the SDK, call `reintersect.invocations.respond({ interactionToken, answer })`, or return
`defer(async () => answer)` from the handler. See [Deferring](/commands#deferring).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.