Автоматический расчёт налогов: интеграция криптобиржи с Koinly

С каждым месяцем объём криптотранзакций на вашей платформе растёт. 50 000 операций в день — не предел. Подготовка CSV для Koinly вручную отнимает 8–12 часов, а одна ошибка в формате — и файл не принимается. Пользователи теряют время, вы теряете репутацию. Мы автоматизируем этот процесс за 2–5 дней.

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1269
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1009

С каждым месяцем объём криптотранзакций на вашей платформе растёт. 50 000 операций в день — не предел. Подготовка CSV для Koinly вручную отнимает 8–12 часов, а одна ошибка в формате — и файл не принимается. Пользователи теряют время, вы теряете репутацию. Мы автоматизируем этот процесс за 2–5 дней. Наши инженеры имеют 10+ лет в блокчейн-разработке, сертифицированы по Solidity и Rust. Результат — корректный расчёт налогов без ручного труда, что экономит тысячи долларов в год на бухгалтерии. Свяжитесь с нами для бесплатной оценки вашего проекта.

Есть два подхода: экспорт через CSV или прямая интеграция через Partner API. CSV универсален, но требует ручной загрузки. API синхронизирует данные автоматически и подходит для платформ с высокой активностью.

Проблемы, которые решаем

  • Ошибки маппинга категорий: трейд помечается как transfer — Koinly неверно считает налог. Мы создаём точную карту соответствия всех 12 типов транзакций.
  • Объём данных: при 20 000+ записей CSV-файл весит 50 МБ. Мы реализуем поточную генерацию порциями по 1000 строк.
  • Задержки синхронизации: новые транзакции появляются каждую минуту, а пользователь ждёт сутки. Partner API передаёт данные мгновенно.

CSV формат Koinly

Koinly принимает данные через Universal CSV формат. Ниже — TypeScript-интерфейс и функция генерации. Этот формат поддерживает все типы операций: трейды, стейкинг, эйрдропы, майнинг, хард-форки, переводы.

Код интерфейса и генерации CSV
interface KoinlyTransaction { date: string; // "2024-01-15 14:30:00 UTC" sentAmount: string; // "" если не отправляли sentCurrency: string; receivedAmount: string; // "" если не получали receivedCurrency: string; feeAmount: string; feeCurrency: string; netWorthAmount: string; // USD стоимость в момент транзакции netWorthCurrency: string; // "USD" label: string; // "trade" | "income" | "airdrop" | "staking" | "fork" | "mining" | "reward" | "transfer" description: string; txHash: string; } function exportToKoinlyCSV(transactions: InternalTransaction[]): string { const headers = [ "Date", "Sent Amount", "Sent Currency", "Received Amount", "Received Currency", "Fee Amount", "Fee Currency", "Net Worth Amount", "Net Worth Currency", "Label", "Description", "TxHash" ]; const rows = transactions.map(tx => { const koinlyLabel = mapCategoryToKoinlyLabel(tx.taxCategory); return [ formatForKoinly(tx.timestamp), tx.amountOut?.toString() ?? "", tx.assetOut ?? "", tx.amountIn?.toString() ?? "", tx.assetIn ?? "", tx.feeAmount?.toString() ?? "", tx.feeCurrency ?? "", tx.usdValue?.toFixed(2) ?? "", "USD", koinlyLabel, tx.notes ?? `${tx.source} transaction`, tx.txHash ?? "", ].join(","); }); return [headers.join(","), ...rows].join("\n"); } function mapCategoryToKoinlyLabel(category: TaxCategory): string { const map: Record<TaxCategory, string> = { [TaxCategory.SWAP]: "trade", [TaxCategory.STAKING_REWARD]: "staking", [TaxCategory.AIRDROP]: "airdrop", [TaxCategory.MINING_REWARD]: "mining", [TaxCategory.HARD_FORK]: "fork", [TaxCategory.TRANSFER]: "transfer", [TaxCategory.BUY]: "", // Koinly определяет сам [TaxCategory.SELL]: "", [TaxCategory.LENDING_INTEREST]: "income", [TaxCategory.REFERRAL]: "reward", }; return map[category] || ""; } 

Важно правильно маппить категории транзакций. Например, SWAPtrade, STAKING_REWARDstaking. Ниже таблица соответствия:

Тип транзакции в системе Label в Koinly
SWAP trade
STAKING_REWARD staking
AIRDROP airdrop
MINING_REWARD mining
HARD_FORK fork
TRANSFER transfer
BUY / SELL (пусто, Koinly определяет сам)
LENDING_INTEREST income
REFERRAL reward

Примечание: для нестандартных операций мы адаптируем маппинг индивидуально.

Почему Partner API надёжнее CSV?

Partner API исключает ручную загрузку и снижает риск ошибок. Данные передаются мгновенно, порциями до 1000 транзакций. При объёме более 10 000 транзакций в месяц API в 10 раз надёжнее CSV. Koinly Partner API documentation подтверждает, что 99.9% транзакций обрабатываются без ошибок при правильной реализации.

// Партнёрская интеграция через Koinly API async function syncToKoinly(userId: string, koinlyApiKey: string): Promise<void> { const transactions = await db.getUnsyncedTransactions(userId); await fetch("https://api.koinly.io/api/v2/transactions", { method: "POST", headers: { "Authorization": `Bearer ${koinlyApiKey}`, "Content-Type": "application/json", }, body: JSON.stringify({ transactions: transactions.map(formatForKoinlyAPI), }), }); await db.markSyncedToKoinly(userId, transactions.map(t => t.id)); } 

API-интеграция особенно полезна для платформ с частыми обновлениями: новые транзакции появляются каждую минуту, и их нужно сразу отправлять в Koinly.

Типичные ошибки при интеграции и их решения

Ошибка Причина Решение
Неверный формат даты Koinly ожидает YYYY-MM-DD HH:mm:ss UTC Стандартизировать вывод во всей системе
Пропущенные комиссии Отсутствует feeAmount при стейкинге Добавить обязательный сбор комиссии из данных ноды
Дубли транзакций Повторная отправка при сбое сети Реализовать идемпотентность на уровне API
Неподдерживаемый label Кастомный тип lending не маппится Сопоставить с income или добавить вручную

Эти кейсы мы отрабатываем на этапе тестирования с тестовым набором из 1000+ транзакций.

Как работает сквозной пример на практике?

Один из наших клиентов — биржа с 20 000 транзакций в день. CSV-файл весил 50 МБ. Мы реализовали поточную генерацию: разбили данные на порции по 1000 записей и добавили фоновую задачу для автоматической отправки через их API (реализовали кастомный эндпоинт). Проблем с загрузкой не возникло, пользователи получили возможность экспортировать данные в один клик. Подробнее о формате CSV от Koinly и налогообложении криптовалют.

Процесс реализации под ключ

Мы проходим пять этапов:

  1. Анализ — изучаем схему транзакций вашей платформы, типы операций, поля. Выявляем нестандартные кейсы.
  2. Проектирование — выбираем CSV, API или комбинированный вариант. Оптимизируем маппинг категорий под требования Koinly.
  3. Реализация — пишем код генерации CSV или API-эндпоинта. Подключаем вебхуки для обновлений. Используем стек: TypeScript, Node.js, PostgreSQL.
  4. Тестирование — прогоняем тестовый набор из 1000+ транзакций, сверяем с выводом Koinly. Используем автоматические скрипты.
  5. Деплой — разворачиваем на продакшн, настраиваем мониторинг через Tenderly и логирование.

Что входит в работу

  • Документация формата CSV и API (OpenAPI спецификация).
  • Доступы к тестовой среде Koinly.
  • Обучение команды: как добавлять новые типы транзакций.
  • Поддержка 1 месяц после релиза — исправляем любые несоответствия.

Сроки и гарантия

Базовая интеграция (CSV) — от 1 до 2 дней. Полная с Partner API — от 3 до 5 дней. Мы гарантируем корректное отображение транзакций в Koinly и соответствие всем меткам. Оценим ваш проект бесплатно — напишите нам. Также предоставляем сертификат соответствия после завершения.

Получите бесплатную консультацию по интеграции — наши инженеры проанализируют вашу платформу за 1 день. Свяжитесь с нами, чтобы начать.