> ## Documentation Index
> Fetch the complete documentation index at: https://docs.exode.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Счета

> Выгрузка счетов школы с суммами, типами, статусами оплаты и UTM-метками

**type:** `QUERY_EXPORT_TYPE_INVOICE_MANAGE_FIND_MANY`

Выгружает список счетов школы с суммами, типами, статусами оплаты и связанными платежами.

Это тип отчёта для метода [`query-export/generate`](/ru/exode-api/school/query-export/generate): передайте его
в поле `type`, а описанные ниже поля — в `variables`.

<Info>
  Набор фильтров совпадает с методом [Список счетов](/ru/exode-api/school/invoice/list). Итоговый контракт
  `variables` валидирует сервис экспорта — неизвестные поля игнорируются.
</Info>

***

### Переменные (`variables`)

<ParamField body="filter" type="object">
  Параметры фильтрации.

  <Expandable title="Свойства filter">
    <ParamField body="invoiceIds" type="integer[]">
      Фильтр по ID счетов.
    </ParamField>

    <ParamField body="userIds" type="integer[]">
      Фильтр по ID пользователей (плательщиков).
    </ParamField>

    <ParamField body="productIds" type="integer[]">
      Фильтр по ID продуктов.
    </ParamField>

    <ParamField body="types" type="string[]">
      Фильтр по типам счёта. Массив из значений: `Regular`, `InstallmentInit`, `InstallmentPay`,
      `SubscriptionInit`, `SubscriptionPay`.
    </ParamField>

    <ParamField body="search" type="string">
      Поиск по тексту, до 50 символов.
    </ParamField>

    <ParamField body="totalAmountRange" type="object">
      Диапазон суммы счёта. Свойства `from` и `to` — числа.
    </ParamField>

    <ParamField body="createdAtDateRange" type="object">
      Диапазон дат создания счёта. Свойства `from` и `to` — даты в формате ISO 8601.
    </ParamField>

    <ParamField body="payment" type="object">
      Вложенный фильтр по связанному платежу (статус, провайдер и т.д.).
    </ParamField>

    <ParamField body="utmParams" type="object">
      Фильтр по UTM-меткам счёта. Поле `value` — массив пар `{ key, value }` (непустые строки).
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="sort" type="object">
  Параметры сортировки. Значения: `ASC` (по возрастанию) или `DESC` (по убыванию).

  <Expandable title="Свойства sort">
    <ParamField body="id" type="string">Сортировка по ID. `ASC` | `DESC`.</ParamField>
    <ParamField body="createdAt" type="string">Сортировка по дате создания. `ASC` | `DESC`.</ParamField>
    <ParamField body="updatedAt" type="string">Сортировка по дате обновления. `ASC` | `DESC`.</ParamField>
    <ParamField body="status" type="string">Сортировка по статусу счёта. `ASC` | `DESC`.</ParamField>
    <ParamField body="totalAmount" type="string">Сортировка по сумме. `ASC` | `DESC`.</ParamField>
    <ParamField body="paidAtOrCreatedAt" type="string">Сортировка по дате оплаты (или создания). `ASC` | `DESC`.</ParamField>
    <ParamField body="userLastOnlineAt" type="string">Сортировка по последней активности плательщика. `ASC` | `DESC`.</ParamField>
    <ParamField body="paymentActualStatus" type="string">Сортировка по фактическому статусу платежа. `ASC` | `DESC`.</ParamField>
  </Expandable>
</ParamField>

### Колонки отчёта

ID пользователя, Фамилия Имя, Способ входа, Номер телефона, Почта, Telegram, ID платежа, Дата изменения платежа,
ID курса, Название курса, ID тарифа, Тариф, Тип платежа, Способ оплаты, Статус, Сумма платежа, Валюта.

<RequestExample>
  ```bash cURL theme={null}
  curl --location 'https://api.exode.biz/saas/v2/query-export/generate' \
    --header 'Seller-Id: {{ sellerId }}' \
    --header 'School-Id: {{ schoolId }}' \
    --header 'Content-Type: application/json' \
    --header 'Authorization: Bearer YOUR_TOKEN' \
    --data '{
      "type": "QUERY_EXPORT_TYPE_INVOICE_MANAGE_FIND_MANY",
      "variables": {
        "filter": {
          "types": ["Regular"],
          "createdAtDateRange": { "from": "2025-01-01T00:00:00Z", "to": "2025-12-31T23:59:59Z" }
        },
        "sort": {
          "paidAtOrCreatedAt": "DESC"
        }
      }
    }'
  ```

  ```javascript Node.js theme={null}
  const axios = require('axios');

  const exportInvoices = async () => {
    try {
      const response = await axios.post('https://api.exode.biz/saas/v2/query-export/generate', {
        type: 'QUERY_EXPORT_TYPE_INVOICE_MANAGE_FIND_MANY',
        variables: {
          filter: {
            types: ['Regular'],
            createdAtDateRange: { from: '2025-01-01T00:00:00Z', to: '2025-12-31T23:59:59Z' }
          },
          sort: {
            paidAtOrCreatedAt: 'DESC'
          }
        }
      }, {
        headers: {
          'Seller-Id': '{{ sellerId }}',
          'School-Id': '{{ schoolId }}',
          'Content-Type': 'application/json',
          'Authorization': 'Bearer YOUR_TOKEN'
        }
      });

      const { uuid } = response.data.payload;
      console.log('Execution UUID:', uuid);
    } catch (error) {
      console.error('Error:', error.response?.data || error.message);
    }
  };

  exportInvoices();
  ```

  ```php PHP theme={null}
  <?php

  $url = 'https://api.exode.biz/saas/v2/query-export/generate';
  $data = [
    'type' => 'QUERY_EXPORT_TYPE_INVOICE_MANAGE_FIND_MANY',
    'variables' => [
      'filter' => [
        'types' => ['Regular'],
        'createdAtDateRange' => ['from' => '2025-01-01T00:00:00Z', 'to' => '2025-12-31T23:59:59Z']
      ],
      'sort' => [
        'paidAtOrCreatedAt' => 'DESC'
      ]
    ]
  ];

  $headers = [
    'Seller-Id: {{ sellerId }}',
    'School-Id: {{ schoolId }}',
    'Content-Type: application/json',
    'Authorization: Bearer YOUR_TOKEN'
  ];

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  $response = curl_exec($ch);
  $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  curl_close($ch);

  if ($httpCode === 200 || $httpCode === 201) {
    $result = json_decode($response, true);
    echo "Execution UUID: " . $result['payload']['uuid'] . "\n";
  } else {
    echo "Error: HTTP $httpCode\n";
    echo $response;
  }
  ?>
  ```

  ```python Python theme={null}
  import requests

  url = 'https://api.exode.biz/saas/v2/query-export/generate'

  data = {
    'type': 'QUERY_EXPORT_TYPE_INVOICE_MANAGE_FIND_MANY',
    'variables': {
      'filter': {
        'types': ['Regular'],
        'createdAtDateRange': {'from': '2025-01-01T00:00:00Z', 'to': '2025-12-31T23:59:59Z'}
      },
      'sort': {
        'paidAtOrCreatedAt': 'DESC'
      }
    }
  }

  headers = {
    'Seller-Id': '{{ sellerId }}',
    'School-Id': '{{ schoolId }}',
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_TOKEN'
  }

  try:
    response = requests.post(url, json=data, headers=headers)
    response.raise_for_status()

    result = response.json()
    print(f"Execution UUID: {result['payload']['uuid']}")

  except requests.exceptions.RequestException as e:
    print(f'Error: {e}')
  ```

  ```bsl 1С theme={null}
  Типы = Новый Массив;
  Типы.Добавить("Regular");

  ДиапазонДат = Новый Структура;
  ДиапазонДат.Вставить("from", "2025-01-01T00:00:00Z");
  ДиапазонДат.Вставить("to", "2025-12-31T23:59:59Z");

  Фильтр = Новый Структура;
  Фильтр.Вставить("types", Типы);
  Фильтр.Вставить("createdAtDateRange", ДиапазонДат);

  Сортировка = Новый Структура;
  Сортировка.Вставить("paidAtOrCreatedAt", "DESC");

  Переменные = Новый Структура;
  Переменные.Вставить("filter", Фильтр);
  Переменные.Вставить("sort", Сортировка);

  Данные = Новый Структура;
  Данные.Вставить("type", "QUERY_EXPORT_TYPE_INVOICE_MANAGE_FIND_MANY");
  Данные.Вставить("variables", Переменные);

  // Serialize body to JSON
  ЗаписьJSON = Новый ЗаписьJSON;
  ЗаписьJSON.УстановитьСтроку();
  ЗаписатьJSON(ЗаписьJSON, Данные);
  ТелоЗапроса = ЗаписьJSON.Закрыть();

  Соединение = Новый HTTPСоединение("api.exode.biz", 443, , , , 30, Новый OpenSSLSecureConnection);

  Запрос = Новый HTTPЗапрос("/saas/v2/query-export/generate");
  Запрос.Заголовки.Вставить("Seller-Id", "{{ sellerId }}");
  Запрос.Заголовки.Вставить("School-Id", "{{ schoolId }}");
  Запрос.Заголовки.Вставить("Content-Type", "application/json");
  Запрос.Заголовки.Вставить("Authorization", "Bearer YOUR_TOKEN");
  Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);

  Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);

  Если Ответ.КодСостояния = 200 Тогда
      ЧтениеJSON = Новый ЧтениеJSON;
      ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
      Результат = ПрочитатьJSON(ЧтениеJSON);
      Сообщить("Экспорт запущен");
  Иначе
      Сообщить("Ошибка: HTTP " + Ответ.КодСостояния);
      Сообщить(Ответ.ПолучитьТелоКакСтроку());
  КонецЕсли;
  ```
</RequestExample>

<ResponseExample>
  ```json Success theme={null}
  {
    "success": true,
    "code": 200,
    "payload": {
      "total": 100,
      "completed": 100,
      "status": "Completed",
      "result": {
        "fileUrl": "https://static.exode.biz/generated/reports/79d46a97-a149-432b-bac7-45f6732b9115.xlsx",
        "fileName": "79d46a97-a149-432b-bac7-45f6732b9115.xlsx",
        "fileSize": 6748
      }
    }
  }
  ```
</ResponseExample>

***

*Обновлено: 2026-07-22 12:24 UTC*
