> SpecStream is the live web data engine for teams and agents. This is the Markdown copy of https://specstream.ai/docs/integrations/dasha. Every page, with what SpecStream does and costs: https://specstream.ai/llms.txt

# Dasha

Give a Dasha BlackBox voice agent a Deep Search list as a tool it calls during a call. The tool reads the list's rows, with a source link on every value, and the agent answers the caller from the row. No server of your own is needed.

[SpecStream for DashaAgent frameworks & builders](https://specstream.ai/integrations/dasha.md)

## What you need

-   A Dasha BlackBox agent you can edit.
-   A SpecStream account with a finished Deep Search list. New accounts get $10 of credit on sign-up, no card. [Create one](https://specstream.ai/signup?utm_source=dasha).

1.  1

    ## 1. Build the list in SpecStream

    Ask Deep Search for the records the agent should know, in plain words, and name the facts to bring back on each one. SpecStream reads the request back, prices it, and runs it once you approve the maximum. Open the finished list in your workspace. Its address ends in the list's `find_id`: `https://specstream.ai/workspace/collections/<find_id>`.

2.  2

    ## 2. Create a key that only reads

    In SpecStream, open [Agents & API](https://specstream.ai/workspace/agents?tab=keys&utm_source=dasha), choose **API keys**, then **Create API key**. Leave out execute permission: a key without it reads your lists and cannot spend. Copy the key.

3.  3

    ## 3. Store the list's ID on the agent

    In the agent's **Additional Data**, add the key `specstream_find_id` with the `find_id` as its value. The tool reads it as `{{agentAdditionalData.specstream_find_id}}`, so the language model never has to say it. To give each call its own list, pass `specstream_find_id` in the call's `additionalData` and use `{{callAdditionalData.specstream_find_id}}` instead.

4.  4

    ## 4. Add the tool

    Open the agent's **Tools** tab and click **Add Tool**. Fill in the fields:

    **Tool Name**: `lookup_list`. **Description**: what the list holds and when to use it, for example `Read the saved list of clinics in Lyon with their opening hours and phone numbers. Use it when the caller asks about a clinic.` **Schema**: `{"type": "object", "properties": {}}`, because the tool takes no arguments.

    **Webhook URL**: `https://api.specstream.ai/v1/finds/{{agentAdditionalData.specstream_find_id}}/rows`. **Headers**: `Authorization` with the value `Bearer` followed by your key.

    Open **Advanced request settings**, set **HTTP Method** to `GET`, and add two query parameters: `format` set to `markdown`, and `limit` set to `100`.

5.  5

    ## 5. Test it

    Click **Test Tool**. Fill in **Test values for custom data** with your `find_id`, or leave it blank to use the agent's own Additional Data. **Request Sent** shows the exact URL and headers, and the response holds `data.table`: the list's columns in order, one row a line, with a source link for each value.

6.  6

    ## 6. Tell the agent when to use it

    In the agent's prompt, say when to call the tool and how to answer from it:

    In the agent prompt

    ```text
    When the caller asks about a clinic, call lookup_list, find that clinic's row, and answer from it. If the clinic is not on the list, say so. Do not read out the links.
    ```

7.  7

    ## 7. Or create the tool with the API

    A tool created through the Dasha API replaces variables only when its webhook has `customSettings`. This is the same tool as JSON:

    lookup\_list tool

    ```json
    {
      "name": "lookup_list",
      "description": "Read the saved list of clinics in Lyon with their opening hours and phone numbers. Use it when the caller asks about a clinic.",
      "schema": {"type": "object", "properties": {}},
      "webhook": {
        "url": "https://api.specstream.ai/v1/finds/{{agentAdditionalData.specstream_find_id}}/rows",
        "headers": {"Authorization": "Bearer YOUR_SPECSTREAM_API_KEY"},
        "customSettings": {
          "httpMethod": "GET",
          "queryParams": {"format": ["markdown"], "limit": ["100"]}
        }
      },
      "fallBackResult": {"error": "The list could not be read right now."}
    }
    ```

## What the agent reads

`GET /v1/finds/{id}/rows` with `format=markdown` returns `data.columns`, the facts you asked for in order, and `data.table`, one table with a source link for each value. `limit` takes 1 to 100 rows; a longer list returns `next_cursor` for the next page. Leave out `format` to get the rows as JSON records instead. The [API reference](https://specstream.ai/docs/api.md) has every field.

## Answer one question from the live web

For a single fact that is on no list, add a second tool that calls the Search API. It answers in a few seconds with the fact, the page it was read from and the results it read. This key needs execute permission and a spending limit above zero.

Set **Tool Name** to `web_search`, **Schema** to one string property `q` (the question, in everyday words), **Webhook URL** to `https://api.specstream.ai/v1/web-search`, the same `Authorization` header with this key, **HTTP Method** `GET`, and the query parameters `q` set to `{{arguments.q}}` and `num` set to `5`.

Turn on `isLongRunning` and set `longRunningAdditionalInstructions` to what the agent says while it waits, for example `Tell the caller you are checking.` The agent keeps talking and tells the caller the answer as soon as it arrives. With **Enhanced tooling** on in the LLM configuration, these two settings are not used.

## Why the list is built before the call

A Deep Search run is priced before it starts and runs only after a person approves the maximum. A large list can take up to four hours, longer than any caller waits. So the run happens in your workspace, and the call reads the finished rows, which takes one request and spends nothing.

## Cost

Reading a list's rows costs nothing. Each row a Deep Search run delivers costs 5¢, 15¢ or $1, depending on how much the row needs, plus 5¢ for a person's email and 15¢ for a phone. A run never costs more than the maximum you approved, and a run that finds nothing costs nothing. Each `web_search` call is $5 per 1,000 searches of up to 10 results, from your balance. [Balance, quotes, and billing](https://specstream.ai/docs/billing.md) has the details.

## Disconnect

Delete the tools in the agent's **Tools** tab, then open **Agents & API** in your workspace, choose **API keys**, and revoke the keys. Your lists stay in your workspace. Questions go to [support@specstream.ai](mailto:support@specstream.ai).

## More

[SpecStream for Dasha](https://specstream.ai/integrations/dasha.md) covers what it does in Dasha on one page. Every other tool has its guide in [Connect your tools](https://specstream.ai/docs/integrations.md). You see the most a request can cost before it starts, and the matches are paid from your balance. [Billing](https://specstream.ai/docs/billing.md) has the details. For help, email [support@specstream.ai](mailto:support@specstream.ai).
