Introduction

Programmatically manage agents, conversations, training sources, and web crawls with the AssistLoop API.

The AssistLoop API lets you build integrations on top of your AI agents: create and configure agents, run visitor and inbox conversations, choose AI models, upload and manage training sources (text, Q&A, URLs, and files), kick off and monitor web crawls, and track long‑running training jobs.

Base URL

All endpoints are served under a single versioned prefix:

https://api.assistloop.ai/api/public/v1

https://api.assistloop.ai is the API host. Every path in this reference is relative to this base URL.

What you need

  1. An API key. API requests authenticate with a bearer API key. Create one from your dashboard (Settings → API Keys). See Authentication for details and the available scopes.
  2. A premium or AppSumo plan. The API is gated to organizations on a paid (premium) plan or with an active AppSumo license. The check runs on every request, so a key stops working the moment the organization downgrades.
  3. Your organization UUID. Organization‑scoped endpoints (listing/creating agents, starting crawls) take your organization's UUID in the path. You can find it in your dashboard. Agent‑scoped endpoints take the agent's UUID instead.

Quickstart

Create an API key

In your dashboard, open Settings → API Keys, pick the scopes you need (for example conversation:create and conversation:read), choose an expiry, and copy the key — the full value is shown only once.

Create a conversation and send a message

Create a conversation
curl https://api.assistloop.ai/api/public/v1/agents/$AGENT_UUID/conversations \
  -H "Authorization: Bearer $ASSISTLOOP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "chat_user_id": "user-123" }'

Use the returned conversation id to send visitor text. The response is the visitor message; the assistant reply arrives later via polling or a webhook.

Send a visitor message
curl https://api.assistloop.ai/api/public/v1/agents/$AGENT_UUID/conversations/$CONVERSATION_UUID/messages \
  -H "Authorization: Bearer $ASSISTLOOP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "content": "Hello" }'

Read the response

Successful responses wrap the payload in data, with request metadata under meta:

{
  "data": {
    "id": "a1b2c3d4-e5f6-4708-9a1b-2c3d4e5f6071",
    "content": "Hello",
    "role": "visitor",
    "action_required": false,
    "action": null,
    "created_at": "2026-09-05T10:16:00.000000Z"
  },
  "meta": { "request_id": "b7f0b9c2-1a2b-4c3d-8e9f-0a1b2c3d4e5f" }
}

Conventions

  • JSON everywhere. Requests and responses use JSON, except file uploads, which use multipart/form-data. Responses are always JSON.
  • UUIDs as identifiers. Organizations, agents, conversations, messages, webhook endpoints, sources, and AI models are addressed by their UUID — never by a numeric database ID.
  • Consistent envelopes. Successful responses wrap the payload in data, with request metadata under meta. Errors use an error object (see below).
  • Request tracing. Every response carries an X-Request-ID header, and the same value is echoed in meta.request_id. Include it when reporting an issue.

Response format

Single resource

{
  "data": {
    "id": "0c2e0b8a-6c1e-4f7e-9a3a-1b2c3d4e5f60",
    "name": "Support Bot"
  },
  "meta": {
    "request_id": "b7f0b9c2-1a2b-4c3d-8e9f-0a1b2c3d4e5f"
  }
}

Collection (paginated)

{
  "data": [ { "id": "..." }, { "id": "..." } ],
  "meta": {
    "current_page": 1,
    "per_page": 25,
    "total": 42,
    "last_page": 2,
    "request_id": "b7f0b9c2-1a2b-4c3d-8e9f-0a1b2c3d4e5f"
  },
  "links": {
    "first": "https://api.assistloop.ai/api/public/v1/agents/.../sources?page=1",
    "last":  "https://api.assistloop.ai/api/public/v1/agents/.../sources?page=2",
    "prev":  null,
    "next":  "https://api.assistloop.ai/api/public/v1/agents/.../sources?page=2"
  }
}

Error

{
  "error": {
    "code": "insufficient_scope",
    "message": "Token is missing required scope: agent:create",
    "details": []
  },
  "meta": {
    "request_id": "b7f0b9c2-1a2b-4c3d-8e9f-0a1b2c3d4e5f"
  }
}

See Errors for the full list of status codes and error codes.

Resource overview