Submit tool-call input (batch)

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Answers several waiting tool calls at once with the same action, then resumes the turn. Use it instead of calling Submit tool-call input once per tool call.

Each tool call gets its own entry in results, so one of them can fail while the rest succeed. Check every entry rather than assuming the whole batch worked. The app is returned under app, not at the top level as it is on the single-tool-call endpoint.

The request stays open until the resumed turn settles, so it can take several minutes. Resuming a turn consumes credits.

Set an X-Request-ID header before you send. A network retry carrying the same value is ignored rather than resumed a second time and charged again. It comes back with an empty results array, which means nothing ran again rather than that the tool calls were rejected.

A 200 response does not mean the turn succeeded. Two cases come back as a 200.

  • The turn ran and finished. app.status.state is ready and the app is idle again.
  • The turn ran and failed. app.status.state is error, and app.status.error_source says where it failed. A value of paywall means the app's workspace has no credits left.

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time. Send only the fields documented here. Other request fields are not supported and their behavior can change.</Warning>

post/api/apps/{app_id}/chat/submit-tool-call-input/batch

Path parameters

app_idstring required

ID of the app whose AI chat this request acts on.

ID of the app whose AI chat this request acts on.

Request body

tool_call_idsstring[] required

IDs of the tool calls to answer, up to 100. They all get the same action, and a repeated ID is answered once.

action'approved' | 'rejected' required

Whether to let these tool calls run or turn them down.

Example request

{
  "tool_call_ids": [
    "toolu_01A9FJd3kP2mNqRs7VwXyZ4b",
    "toolu_01B8GKe4lQ3nOrSt8WxYzA5c"
  ],
  "action": "approved"
}

Response

Successful Response

Example response

{
  "results": [
    {
      "id": "toolu_01A9FJd3kP2mNqRs7VwXyZ4b",
      "success": true,
      "error": "Failed to process tool call"
    }
  ],
  "app": {
    "id": "6820f3a4e7b91d003c45a1f2",
    "name": "My CRM",
    "status": {
      "state": "ready",
      "details": "Publishing app",
      "request_id": "a1b2c3d4e5f67890abcdef12",
      "last_updated_date": "2026-08-02T14:30:00Z",
      "error_source": "build",
      "paywall_context": {
        "billing_organization_id": "67e0b12c4d8a3f005b21c9e4",
        "user_id": "6706af53b9c1e2004a37d85f",
        "evaluated_at": "2026-08-02T14:30:00Z"
      }
    },
    "conversation": {
      "id": "1f0c2b7a-9d51-4c3e-8a62-7b4d5e6f8a90",
      "messages": [
        {
          "id": "7f3a1c88-52d4-4a0e-9b31-2c6f0d8e4a19",
          "role": "assistant",
          "content": "I added a contact form to the home page.",
          "file_urls": [
            "https://example.com/mockup.png"
          ],
          "checkpoint_id": "6886b8d390dc7e2f4a2c91b3",
          "tool_calls": [
            {
              "id": "toolu_01A9FJd3kP2mNqRs7VwXyZ4b",
              "name": "create_file",
              "status": "waiting_for_user_input",
              "requires_user_input": true,
              "arguments_string": "{\"file_path\": \"src/pages/Home.jsx\", \"content\": \"export default function Home() {}\"}"
            }
          ],
          "usage": {
            "prompt_tokens": 18432,
            "completion_tokens": 742,
            "credits_charged": 1.5
          },
          "metadata": {
            "created_date": "2026-08-02T14:30:00",
            "created_by_email": "developer@example.com"
          }
        }
      ]
    }
  }
}

Changes

No recorded changes to this endpoint across all 1 revision of this API.