# API быстрые рецепты: копируйте, вставляйте, запускайте

_API · Чтение 7 мин · Обновлено 2026-10-22 · https://lanachat.ai/guides/ru/api-recipes/_

Восемь полных рецептов для задач, которые агентства автоматизируют в первую очередь. Каждый готов к копированию, в cURL и JavaScript (Node 20 или новее, без библиотек). Установите ваш токен один раз, как в [быстром старте](https://lanachat.ai/guides/ru/api-overview/), и каждый блок запускается как есть.

```bash
export LANACHAT_TOKEN="lc_live_8f2c1d0e9b7a4c6f"
```

JavaScript рецепты используют этот небольшой помощник. Вставьте его один раз в начало файла:

```js
const API = 'https://api.lanachat.ai/v1';

async function lanachat(method, path, body) {
  const res = await fetch(API + path, {
    method,
    headers: {
      Authorization: `Bearer ${process.env.LANACHAT_TOKEN}`,
      'Content-Type': 'application/json',
      ...(method === 'POST' ? { 'Idempotency-Key': crypto.randomUUID() } : {}),
    },
    body: body ? JSON.stringify(body) : undefined,
  });
  const data = await res.json();
  if (!res.ok) throw new Error(`${res.status} ${data.error.code}: ${data.error.message}`);
  return data;
}
```

## 1. Добавить автора и подключить её Telegram аккаунт

Требуется `can_setup` и токен **owner** для лицензии (шаг 4). Создайте автора, заполните её данные, добавьте аккаунт с токеном бота, затем выдайте аккаунту лицензию, чтобы он мог отвечать.

```bash
# 1. the creator
curl -X POST https://api.lanachat.ai/v1/creators \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
  -d '{"name": "Lea", "timezone": "Europe/Paris"}'

# 2. her identity (she must be 18 or older)
curl -X PUT https://api.lanachat.ai/v1/creators/cr_lea/identity \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Content-Type: application/json" \
  -d '{"first_name": "Lea", "date_of_birth": "2001-04-12", "nationality": "FR", "languages": ["fr", "en"]}'

# 3. her Telegram account
curl -X POST https://api.lanachat.ai/v1/accounts \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
  -d '{"creator_id": "cr_lea", "bot_token": "<bot token>", "market": "fr", "traffic": "instagram"}'

# 4. a licence from your stock
curl -X POST https://api.lanachat.ai/v1/billing/licences/assign \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
  -d '{"account_id": "acc_1001"}'
```

```js
const creator = await lanachat('POST', '/creators', { name: 'Lea', timezone: 'Europe/Paris' });
await lanachat('PUT', `/creators/${creator.id}/identity`, {
  first_name: 'Lea', date_of_birth: '2001-04-12', nationality: 'FR', languages: ['fr', 'en'],
});
const account = await lanachat('POST', '/accounts', {
  creator_id: creator.id, bot_token: process.env.BOT_TOKEN, market: 'fr', traffic: 'instagram',
});
await lanachat('POST', '/billing/licences/assign', { account_id: account.id });
console.log(account.id, account.health);   // "pending" until she confirms in Telegram
```

Аккаунт остаётся в состоянии `pending`, пока автор не подтвердит бизнес-связь в настройках Telegram. [Webhook](https://lanachat.ai/guides/ru/api-webhooks/) уведомит, когда статус изменится на `connected`: событие `account.health_changed`. Смотрите [Telegram аккаунты](https://lanachat.ai/guides/ru/api-telegram-accounts/) и [Биллинг](https://lanachat.ai/guides/ru/api-billing/).

## 2. Прочитать сегодняшние продажи

Требуется `can_sales_read`. `/stats` возвращает итоги дня, по ссылкам и источникам; Stars считаются по $0.013 за штуку в чистых продажах.

```bash
TODAY=$(date -u +%F)
curl "https://api.lanachat.ai/v1/stats?from=$TODAY&to=$TODAY" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
```

```js
const today = new Date().toISOString().slice(0, 10);
const stats = await lanachat('GET', `/stats?from=${today}&to=${today}`);
const stars = stats.days.reduce((sum, d) => sum + d.revenue_stars, 0);
console.log(`${stars} Stars today, about $${(stars * 0.013).toFixed(2)}`);
for (const l of stats.links) console.log(l.link_id, l.buyers, 'buyers', l.revenue_stars, 'Stars');
```

Добавьте `creator_id=cr_lea` для одного автора. Дни считаются по UTC. Чтобы получать каждую продажу сразу, используйте рецепт 6.

## 3. Отправить сообщение фанату

Требуется `can_chat`. Найдите разговор, затем отправьте сообщение. Сообщение, отправленное через API, считается отправленным человеком и переводит разговор под контроль человека, пока вы не вернёте его обратно (рецепт 4).

```bash
# conversations of Lea with unread messages
curl "https://api.lanachat.ai/v1/conversations?creator_id=cr_lea&unread=true" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

# send a text and a paid photo
curl -X POST https://api.lanachat.ai/v1/conversations/conv_1001_88231/messages \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
  -d '{"text": "Only for you, tonight", "media": [{"id": "med_5522", "stars": 250}]}'
```

```js
const { data: convs } = await lanachat('GET', '/conversations?creator_id=cr_lea&unread=true');
const conv = convs[0];
const msg = await lanachat('POST', `/conversations/${conv.id}/messages`, {
  text: 'Only for you, tonight',
  media: [{ id: 'med_5522', stars: 250 }],
});
console.log(msg.status);   // "queued", then "sent" and "read"
```

Добавьте `"send_at"` (ISO 8601, до 7 дней вперёд) для планирования. Смотрите [Разговоры](https://lanachat.ai/guides/ru/api-conversations/).

## 4. Взять разговор под контроль, затем вернуть ИИ

Требуется `can_chat`. Пока человек держит разговор, ИИ не отвечает этому фанату.

```bash
curl -X POST https://api.lanachat.ai/v1/conversations/conv_1001_88231/takeover \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Idempotency-Key: $(uuidgen)"

# ... your team replies ...

curl -X POST https://api.lanachat.ai/v1/conversations/conv_1001_88231/release \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Idempotency-Key: $(uuidgen)"
```

```js
const id = 'conv_1001_88231';
await lanachat('POST', `/conversations/${id}/takeover`);   // state: "human"
// ... your team replies ...
await lanachat('POST', `/conversations/${id}/release`);    // back to the AI
```

Разговор, остановленный по соображениям безопасности, нельзя вернуть ИИ: API вернёт `409`.

## 5. Создать трекинговую ссылку

Требуется `can_tracking`. Одна ссылка на рекламу или био, чтобы знать, что продаёт.

```bash
curl -X POST https://api.lanachat.ai/v1/links \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
  -d '{"name": "Insta bio · Lea", "slug": "lea-bio", "creator_id": "cr_lea", "source": "instagram", "destination": "pool"}'
```

```js
const link = await lanachat('POST', '/links', {
  name: 'Insta bio · Lea', slug: 'lea-bio', creator_id: 'cr_lea', source: 'instagram', destination: 'pool',
});
console.log(link.public_url);   // put this URL in her bio
```

Добавьте `"domain"` для использования одного из ваших проверенных доменов. Читайте клики, разговоры и покупателей через `GET /links/{id}` или `/stats`. Смотрите [Трекинг](https://lanachat.ai/guides/ru/api-tracking/).

## 6. Получать каждую продажу на сервер сразу

Требуется токен **owner** для добавления endpoint. LanaChat отправляет подписанный `POST` для каждой подтверждённой продажи и возврата.

```bash
curl -X POST https://api.lanachat.ai/v1/webhooks \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
  -d '{"url": "https://hooks.mia-agency.com/lanachat/webhook", "events": ["sale.completed", "sale.refunded"]}'
```

```js
import express from 'express';
import { createHmac, timingSafeEqual } from 'node:crypto';

// once: add the endpoint (keep the secret of the answer as LANACHAT_WEBHOOK_SECRET)
// await lanachat('POST', '/webhooks', { url: 'https://hooks.mia-agency.com/lanachat/webhook', events: ['sale.completed', 'sale.refunded'] });

// the receiver: check the signature, answer 200 fast, then work

function verify(raw, header, secret) {
  const parts = (header || '').split(',').map((p) => p.trim().split('='));
  const t = parts.find(([k]) => k === 't')?.[1];
  if (!t || !(Math.abs(Date.now() / 1000 - Number(t)) < 300)) return false;
  const want = createHmac('sha256', secret).update(t + '.').update(raw).digest('hex');
  return parts.some(([k, v]) => k === 'v1' && v.length === want.length && timingSafeEqual(Buffer.from(v), Buffer.from(want)));
}

const app = express();
app.post('/lanachat/webhook', express.raw({ type: 'application/json' }), (req, res) => {
  if (!verify(req.body, req.get('LanaChat-Signature'), process.env.LANACHAT_WEBHOOK_SECRET)) return res.sendStatus(400);
  res.sendStatus(200);
  const event = JSON.parse(req.body);
  if (event.type === 'sale.completed') console.log('Sale:', event.data.stars, 'Stars,', event.data.creator_id, event.data.sent_by);
  if (event.type === 'sale.refunded') console.log('Refund of', event.data.sale_id);
});
app.listen(3000);
```

Секрет подписи приходит один раз, в ответе первого вызова: сохраните его как `LANACHAT_WEBHOOK_SECRET`. Нажмите **Test** (`POST /webhooks/{id}/test`), чтобы получить `ping`. Python, повторные попытки и все события описаны в [Webhooks](https://lanachat.ai/guides/ru/api-webhooks/).

## 7. Загрузить фото в Vault и назначить цену

Требуется `can_setup`. Запросите URL для загрузки, отправьте файл туда, подтвердите, затем установите цену.

```bash
# 1. upload URL
curl -X POST https://api.lanachat.ai/v1/media/uploads \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
  -d '{"creator_id": "cr_lea", "file_name": "beach-01.jpg", "content_type": "image/jpeg", "size_bytes": 2483201}'

# 2. the file, to the "url" of the answer (no Authorization header there)
curl -X PUT "<url from step 1>" -H "Content-Type: image/jpeg" --data-binary @beach-01.jpg

# 3. confirm, 4. price it
curl -X POST https://api.lanachat.ai/v1/media/uploads/up_7781/complete \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Idempotency-Key: $(uuidgen)"
curl -X PATCH https://api.lanachat.ai/v1/media/med_5521 \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Content-Type: application/json" \
  -d '{"access": "paid", "stars": 300, "description": "Beach, golden hour, white bikini"}'
```

```js
import { readFile, stat } from 'node:fs/promises';

const file = 'beach-01.jpg';
const up = await lanachat('POST', '/media/uploads', {
  creator_id: 'cr_lea', file_name: file, content_type: 'image/jpeg', size_bytes: (await stat(file)).size,
});
const put = await fetch(up.url, { method: up.method, headers: up.headers, body: await readFile(file) });
if (!put.ok) throw new Error('Upload failed: ' + put.status);
const media = await lanachat('POST', `/media/uploads/${up.upload_id}/complete`);
await lanachat('PATCH', `/media/${media.id}`, { access: 'paid', stars: 300, description: 'Beach, golden hour, white bikini' });
```

Медиа находится в состоянии `processing`, затем `ready`: webhook `media.ready` уведомит вас о готовности. Смотрите [Vault](https://lanachat.ai/guides/ru/api-vault/).

## 8. Изменить brain, протестировать, опубликовать

Требуется `can_engine` и `can_publish` для последнего шага. Живой brain меняется только при публикации.

```bash
curl -X PATCH https://api.lanachat.ai/v1/brains/br_lea_main/draft \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Content-Type: application/json" \
  -d '{"settings": {"first_offer_after_messages": 6}}'

curl -X POST https://api.lanachat.ai/v1/playground/br_lea_main/message \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
  -d '{"text": "hey, are you real?", "fan": {"language": "en", "is_new": true}}'

curl -X POST https://api.lanachat.ai/v1/brains/br_lea_main/publish \
  -H "Authorization: Bearer $LANACHAT_TOKEN" -H "Idempotency-Key: $(uuidgen)"
```

```js
await lanachat('PATCH', '/brains/br_lea_main/draft', { settings: { first_offer_after_messages: 6 } });
const test = await lanachat('POST', '/playground/br_lea_main/message', {
  text: 'hey, are you real?', fan: { language: 'en', is_new: true },
});
console.log(test.reply.text, '|', test.explain);
// happy with the answer? publish
const live = await lanachat('POST', '/brains/br_lea_main/publish');
console.log('Live version', live.version);
```

Playground никогда не пишет фанату и не продаёт. Смотрите [AI Brains](https://lanachat.ai/guides/ru/api-ai-brains/).

## Похожие статьи

- [LanaChat API: быстрое начало, аутентификация и ошибки](https://lanachat.ai/guides/ru/api-overview/)
- [API: вебхуки, события и подписи](https://lanachat.ai/guides/ru/api-webhooks/)
- [API и MCP: подключение AI-ассистента](https://lanachat.ai/guides/ru/api-mcp/)
