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

# Try Public Tool

> Run a credential-free tool with no account, from its catalog page

## Overview

Runs a tool that needs no credential, with no account. This is what the try-it control on a public tool page calls. The run is recorded under a shared public identity rather than any account, and the result is stored so it can be shared at `run_url`.

**Auth:** None.

## Eligibility

The tool must pass every check below, or the response is `403`:

* Its service is public.
* Its service declares no credential schema.
* It is not deprecated.
* It is not a Danube-hosted AI tool.
* It is not paid, by per-call price or by x402 pricing.

An unknown tool or service returns `404`.

## Limits

| Limit                                 | Behaviour                                                                               |
| ------------------------------------- | --------------------------------------------------------------------------------------- |
| 10 requests per minute per IP address | Rate limited                                                                            |
| 50 runs per day per IP address        | `429` with a message suggesting sign-up. The counter is keyed on a hash of the address. |
| 10 seconds per run                    | `504` when the tool has not answered in time                                            |

The body options of [Call Tool](/api-reference/endpoint/call_tools) (`fields`, `max_response_chars`, `timeout_seconds`, `confirm_token`) are not read here.

## Path Parameters

<ParamField path="tool_id" type="string" required>
  The tool UUID or slug
</ParamField>

## Body Parameters

<ParamField body="tool_input" type="object">
  Input parameters for the tool. When the body has no `tool_input` key, the whole body is taken as the input.
</ParamField>

## Response

The same execution envelope as [Call Tool](/api-reference/endpoint/call_tools) (`status`, `result`, `error`, `execution_time`, `error_type`, `fault`, `retryable`, `truncated`, `redaction` and the rest), plus two fields:

<ResponseField name="execution_id" type="string">
  Handle for the stored run
</ResponseField>

<ResponseField name="run_url" type="string">
  `/tools/public/runs/{execution_id}`. The stored run is readable without auth at `GET /v1/tools/public/runs/{execution_id}`, which returns `execution_id`, `tool_id`, `tool_name`, `tool_slug`, `service_id`, `service_name`, `service_slug`, `service_logo`, `status`, `executed_at`, `execution_time`, `error`, `request_params`, `result` and `truncated`. Only runs made through this endpoint are readable there.
</ResponseField>

## Example

The Python and TypeScript SDKs do not wrap this endpoint, and it is not an MCP tool. Signed-in callers use [Call Tool](/api-reference/endpoint/call_tools).

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.danubeai.com/v1/tools/public/tool_abc123/try" \
    -H "Content-Type: application/json" \
    -d '{"tool_input": {"city": "San Francisco"}}'
  ```
</RequestExample>

<ResponseExample>
  ```json theme={null}
  {
    "tool_id": "tool_abc123",
    "status": "success",
    "result": {
      "temperature": "18C",
      "condition": "Partly cloudy"
    },
    "error": null,
    "execution_time": 0.42,
    "truncated": false,
    "execution_id": "exec_xyz789",
    "run_url": "/tools/public/runs/exec_xyz789"
  }
  ```
</ResponseExample>
