Skip to main content
Use the public agent invoke endpoint when you want to send a message to an agent from your own app or service. In Fetch Hive, you can copy the request shape from More -> Get Code in the agents sidebar or from Get Code in the agent editor control bar.

Authentication

See API Keys for how to create and manage keys.

Endpoint

POST https://api.fetchhive.com/v1/agent/invoke If you want Fetch Hive to generate the cURL example for you, open Agents, then use More -> Get Code. If you are already in the editor for a specific agent, click Get Code in the editor control bar instead.

Request

Use this request shape: metadata must be flat and scalar-only: strings, numbers, booleans, or null. Nested objects and arrays return a validation error before the run starts. attachments items can be simple URL strings:
They can also use this object shape when you want to provide metadata:
Only https:// URLs are accepted. Up to five attachments are allowed per message. Document attachments are exposed to the agent through the system read_file tool as an <available_files> manifest; the agent calls read_file before relying on document contents. If an attachment URL or type is invalid, Fetch Hive returns a 422 validation error instead of opening the stream. The error uses the standard error_code, error, and message fields; error and message are localized from the authenticated account language when available. Supported document attachments:
  • CSV: text/csv, .csv
  • XLSX: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, .xlsx
  • PDF: application/pdf, .pdf
  • DOCX: application/vnd.openxmlformats-officedocument.wordprocessingml.document, .docx
  • Text and Markdown by extension: .txt, .md, .markdown
For extensionless URLs, such as Fetch Hive Media Library URLs, pass the URL directly. Fetch Hive allow-lists the URL for read_file, and the file tool detects the actual type when it fetches the file. The in-app snippet shows the same body shape:

Basic example

This matches the cURL snippet shown in the product. The invoke dialog currently shows cURL, while Python and TypeScript still show Coming Soon. Use metadata for audit fields you want to see or filter in logs, such as customer IDs, plan names, regions, or experiment names. It is stored with the run and displayed under User metadata in logs. See Invoke metadata for examples and log filtering details.

Response

If streaming is true, the route returns a stream of events rather than one final JSON object. If the provider fails after the stream has opened, the route sends a final error event before closing the stream. If the client disconnects first, Fetch Hive treats it as a silent cancellation and does not create a failed agent run, bill usage, or report a provider-error event unless the provider had already completed and usage was committed.

Streaming response

The stream can include a summary event, reasoning chunks, response chunks, tool events, a final usage event, or an error event. Events arrive in this order when all successful events are present: summaryreasoningresponsetoolusage. An error event can arrive instead of usage if the provider fails mid-stream. Summary event (only emitted on threads with auto-summarization enabled):
This event fires at the start of the stream when the accumulated thread history has crossed the auto-summarization threshold. It means the prior conversation was compressed into a summary before being sent to the model — the agent retains the context, but the raw history has been condensed. original_token_count is the token count before compression; context_limit is the model’s total context window. You can surface this to users as a “conversation summarized” indicator, or ignore it — your app’s behaviour is unaffected either way. Reasoning event:
Response event:
Tool event:
Final usage event:
Error event:

Non-streaming response

If streaming is false, the route returns one JSON response with the generated output, usage data, and the request ID you can use to inspect the run in Logs. Provider execution failures return 502 Bad Gateway with an error message. The exact output field can vary by provider, but the response includes the run metadata you need. For example:
If the agent uses tools, the non-streaming response can also include tool execution details.

Multi-turn conversations

The invoke endpoint supports two approaches for multi-turn conversations.

Persistent threads (Fetch Hive manages history)

Pass a thread_id — any string you choose — and Fetch Hive will automatically create the thread on the first call and resume it on every subsequent call with the same value. Message history is stored in Fetch Hive and included in the context automatically.
You can use any string as a thread_id — a user ID, session ID, ticket number, or any other identifier that makes sense for your use case.

Stateless history (caller manages history)

If you prefer to manage conversation state yourself, pass the previous turns in the messages array. Fetch Hive uses the provided history for context but does not persist it.
For caller-managed sessions, send up to 50 account/workspace-owned Asset UUIDs in known_artifact_refs. Put the UUIDs selected for the current turn in artifact_refs; attachments plus artifact_refs can contain at most five items. An artifact_ref must also appear in known_artifact_refs. Persistent thread_id calls derive known artifacts from the saved chat and ignore conflicting client discovery metadata. External document and image URLs continue to use attachments or messages[].attachments. External audio URLs are unsupported. Streaming calls can receive an artifact event in addition to existing tool events. Non-stream responses include an artifacts array. Use messages when you already maintain your own chat state and do not need Fetch Hive to store the conversation history.

Next steps