---
title: "Integrations"
description: "Call a Lookio assistant from n8n, Make, Zapier or any tool that sends HTTP requests, with an API key, one request, and the answer with its sources."
canonical: "https://lookio.app/docs/developers/integrations"
updated: "2026-11-08"
---

# Integrations

Any tool that sends HTTP requests can ask a Lookio assistant. You need an API key, the id of the assistant, and one `POST` request.

```mermaid title="A typical automation: a support ticket gets a draft answer"
flowchart LR
  T["New ticket<br/>(help desk, form, email)"] --> W["Your automation<br/>n8n, Make, Zapier"]
  W -- "POST /v1/assistants/{id}/query" --> L["Lookio"]
  L -- "answer, citations, credit_cost" --> W
  W --> D["Draft reply<br/>in the help desk"]
```

## Before you start

1. **Create an API key**

   In the app, open **Developer tools**, then **Create key**. Choose the **Ask questions** preset. Copy the key: Lookio shows it once. See [API keys](/docs/guides/api-keys).
2. **Copy the assistant's id**

   Open the assistant. Its id, such as `ast_kw9tvh2ze2ar`, is at the top of its sheet. The **API** button gives the whole request.

## The request

|        | Value                                                     |
| ------ | --------------------------------------------------------- |
| Method | `POST`                                                    |
| URL    | `https://api.lookio.app/v1/assistants/ASSISTANT_ID/query` |
| Header | `Authorization: Bearer sk_live_…`                         |
| Header | `Content-Type: application/json`                          |
| Body   | `{"question": "…", "end_user": "…"}`                      |

The answer is in `data.answer`, the passages in `data.citations` and the price in `data.credit_cost`. Use `end_user` to name the person who asks, for example the customer id of a ticket. You then find their conversations in [Logs](/docs/guides/logs).

## In your tool

**n8n**

Add an **HTTP Request** node.

1. **Method**: `POST`. **URL**: the URL above.
2. **Authentication**: Generic credential, **Header Auth**. Name `Authorization`, value `Bearer sk_live_…`.
3. **Send Body**: on, **JSON**, with:

```json
{
  "question": "{{ $json.subject }}\n\n{{ $json.body }}",
  "end_user": "{{ $json.customer_id }}"
}
```

The next node reads `{{ $json.data.answer }}`.

**Make**

Add an **HTTP** module, **Make a request**.

1. **URL**: the URL above. **Method**: `POST`.
2. **Headers**: `Authorization` with `Bearer sk_live_…`.
3. **Body type**: Raw, **Content type** JSON, and the body with your question.
4. Turn on **Parse response**. The next modules read `data.answer` and `data.citations`.

**Zapier**

Add a **Webhooks by Zapier** action, **Custom Request**.

1. **Method**: `POST`. **URL**: the URL above.
2. **Data**: the JSON body with your question.
3. **Headers**: `Authorization` with `Bearer sk_live_…`, and `Content-Type` with `application/json`.

The next steps read `data__answer`.

**Any HTTP client**

```bash
curl https://api.lookio.app/v1/assistants/ASSISTANT_ID/query \
  -H "Authorization: Bearer $LOOKIO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: ticket-4821" \
  -d '{"question": "Can I change my plan mid-month?", "end_user": "cus_1042"}'
```

## Good practice

**Send an Idempotency-Key**

Automation tools retry after a timeout. Send an `Idempotency-Key` made from the event, such as the ticket id. Then a retry is not charged twice. See [Conventions](/docs/developers/conventions#idempotency).

**Give the request time**

An answer takes a few seconds, more in Deep mode. Set the HTTP timeout of your tool to 60 seconds or more.

**Keep a thread with `conversation_id`**

For a follow-up in the same ticket, send the previous answer's `conversation_id`. Lookio reads the history itself. See [Conversations and end users](/docs/guides/conversations-and-end-users).

**Forward your agents' thumbs**

If a person reviews the draft, send their thumbs up or down to Lookio. It shows in Logs, next to the answer. See [Feedback on answers](/docs/guides/answer-feedback).

**Limit the key**

Give the automation its own key, with the **Ask questions** preset and only the assistants it needs. You can then revoke it alone.

> **Note**
>
> You can also add resources from an automation. Use `POST /v1/resources` for text or a web page. Use `POST /v1/resources/file` for the bytes of a file. See [Create a resource](/docs/api/resources/create-resource).
