---
title: "ask: preview"
description: "a predicate or its hash, the place, the window, the speeds wanted, and the caller with the surface it calls from to the typed answer of section 2.3, as it fills"
section: reference
address: /reference/ask/preview
contract: 0476e35e6e275db5
---

# ask: preview

a predicate or its hash, the place, the window, the speeds wanted, and the caller with the surface it calls from to the typed answer of section 2.3, as it fills

[figure: The caller sends PreviewInput to /v1/ask/preview. The platform returns a card whose body is PreviewAnswer.]

<span class="op-method">POST</span><span class="op-path">/v1/ask/preview</span><span class="op-note">a task, 202</span>

Preview. The call needs the strategy rung under a token with the ask grant, and it is served by either, by the size bound.

The route takes [PreviewInput](/concepts/previewinput) and returns a card whose body is [PreviewAnswer](/concepts/previewanswer).



## Request body
The request body is [PreviewInput](/concepts/previewinput).



| field | type | required | note |
|---|---|---|---|
| `predicate` | [Predicate](/concepts/predicate) | no |  |
| `predicate_hash` | `hash` | no |  |
| `place` | [PlaceARunsAt](/concepts/placearunsat) | yes |  |
| `window` | [Window](/concepts/window) | yes |  |
| `speeds` | `[one of instant \| the last seven days \| the whole record]` | yes |  |



## Response
The route returns a card whose body is [PreviewAnswer](/concepts/previewanswer). Every card ends with a foot that states the basis of each number, the scope of the call, and the time when the facts were true. This route runs as a long step and returns a task with status 202. `POST /v1/work/status` returns the task's progress, and `POST /v1/work/cancel` stops the task.

## Headers


| header | required | meaning |
|---|---|---|
| `Scale-Scope` | yes | the scope the call runs in: tenant/<id>, then /brand/<id>, then /strategy/<id> |
| `Scale-As-True-On` | no | the date the facts must have been true on; defaults to now |
| `Scale-As-Known-On` | no | the date the facts must have been known on; defaults to now |
| `Scale-Key` | no | for a change, the key made from the input; a repeat under the same key returns the unit held and writes nothing |



A caller needs the strategy rung and a token with the ask grant. The platform or the desktop app serves this route.

## Example
The example sends the smallest body that PreviewInput allows. The build validates it against the schema of PreviewInput.

<details class="wire"><summary>Example</summary>





```sh
curl -X POST https://api.scaleintelligence.co/v1/ask/preview \
  -H "Scale-Key: $SCALE_KEY" -H "Scale-Scope: tenant/<id>" \
  -H "content-type: application/json" \
  -d '{ "place": "…", "window": { "from": "…", "to": "…" }, "speeds": [] }'
```




```typescript
import { client } from "@scale/sdk";
const answer = await client.ask.preview({
    "place": "…",
    "window": {
      "from": "…",
      "to": "…"
    },
    "speeds": []
  });
// answer.body is a PreviewAnswer. answer.foot holds the basis, the scope and the time.
```




```python
import requests
answer = requests.post("https://api.scaleintelligence.co/v1/ask/preview",
    headers={"Scale-Key": KEY, "Scale-Scope": "tenant/<id>"},
    json={
      "place": "…",
      "window": {
        "from": "…",
        "to": "…"
      },
      "speeds": []
    }).json()
```




```rust
let answer: Card = client.post("https://api.scaleintelligence.co/v1/ask/preview")
    .header("Scale-Key", key).header("Scale-Scope", "tenant/<id>")
    .json(&PreviewInput { /* the fields of the page */ }).send().await?.json().await?;
```




</details>

## MCP tool
The MCP tool `si.ask.preview` takes the same input and returns the same card. The tool only reads data. An MCP host that renders cards draws this card from `ui://scale-intelligence/cards/PreviewAnswer`. The [tool's page](/reference/tools/si-ask-preview) describes it.
