Интеграция с Тбанк - получение списка транзакций по расчетному счету ЮЛ, ИП
Если у вас счет в Тбанк, то можно довольно быстро настроить загрузку данных о транзакциях по счету в свою учетную систему для дальнейшей обработки.
Как это сделать:
1. Получаем токен АПИ Банка - в кабинете Тбизнес - Все сервисы - Интеграции - Интеграция по АПИ - Получить токен.
2. Делаем тестовый запрос на /asapi на основе документации - https://developer.tbank.ru/docs/api/get-api-v-1-statement

3. Как удалось получить нормальный JSON отклик, то распарсиваем его через такой код:
declare @s nvarchar(max) = '... здесь большой JSON по операциям ....'
select
* FROM OPENJSON(@s, '$.operations')
WITH (
operationDate datetime '$.operationDate',
operationId nvarchar(512) '$.operationId',
accountNumber nvarchar(512) '$.accountNumber',
typeOfOperation nvarchar(512) '$.typeOfOperation',
category nvarchar(512) '$.category',
operationAmount decimal(18,2) '$.operationAmount',
description nvarchar(512) '$.description',
payPurpose nvarchar(512) '$.payPurpose',
payer_acct nvarchar(512) '$.payer.acct',
payer_inn nvarchar(512) '$.payer.inn',
payer_name nvarchar(512) '$.payer.name',
receiver_acct nvarchar(512) '$.receiver.acct',
receiver_inn nvarchar(512) '$.receiver.inn',
receiver_name nvarchar(512) '$.receiver.name',
rrn nvarchar(512) '$.rrn'
) t1
4. Создаем таблицу tbank_operations - таблица нужна чисто для хранения транзакций Тбанка и не является универсальной.
CREATE TABLE [dbo].[tbank_operations](
[id] [int] IDENTITY(1,1) NOT NULL,
[operationDate] [datetime] NULL,
[operationId] [nvarchar](512) NULL,
[accountNumber] [nvarchar](512) NULL,
[typeOfOperation] [nvarchar](512) NULL,
[category] [nvarchar](512) NULL,
[operationAmount] [decimal](18, 2) NULL,
[description] [nvarchar](512) NULL,
[payPurpose] [nvarchar](512) NULL,
[payer_acct] [nvarchar](512) NULL,
[payer_inn] [nvarchar](512) NULL,
[payer_name] [nvarchar](512) NULL,
[receiver_acct] [nvarchar](512) NULL,
[receiver_inn] [nvarchar](512) NULL,
[receiver_name] [nvarchar](512) NULL,
[rrn] [nvarchar](512) NULL,
CONSTRAINT [PK_tbank_operations] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
5. Теперь создаем исходящий метод API, который будет запрашивать данные в Тбанк и сохранять их в таблице. Код - tblank_getOperations.
Request процедура:
CREATE PROCEDURE [dbo].[api_tbank_getoperations_request]
@parameters ExtendedDictionaryParameter READONLY,
@username nvarchar(32)
AS
BEGIN
-- детали https://developer.tbank.ru/docs/api/get-api-v-1-statement
declare @token nvarchar(256) = dbo.as_setting('tbank.token', '')
declare @accountNumber nvarchar(max) = '...наш расчетный счет'
declare @fromDate nvarchar(max) = isnull((select value2 from @parameters where [Key] = 'fromDate'), '') -- 2026-01-20
declare @toDate nvarchar(max) = isnull((select value2 from @parameters where [Key] = 'toDate'), '') -- 2026-01-20
if(@fromDate='' or @token='') BEGIN
select 0 Result, '' Msg
RETURN
end
-- SELECT 1 Msg, Result, Url (адрес, куда будет идти запрос)
select '' Msg, 1 Result, 'https://business.tbank.ru/openapi/api/v1/statement?accountNumber='+ @accountNumber+
'&from='+@fromDate+'T00:00:00Z'+
iif(len(@toDate)>0, '&to='+@toDate+'T00:00:00Z', '')
Url
-- SELECT 2 PARAMETERS - параметры, которые будут передаваться во внешний источник
select 'Authorization' name, 'Bearer ' + @token value, 'header' [type]
END
В response процедуре сохраняем в таблицу те, что еще не были (по operationId):
CREATE PROCEDURE [dbo].[api_tbank_getoperations_response]
@response nvarchar(max),
@parameters ExtendedDictionaryParameter READONLY,
@username nvarchar(32)
AS
BEGIN
-- описание формата https://developer.tbank.ru/docs/api/get-api-v-1-statement
declare @s nvarchar(max) = @response
insert into tbank_operations(operationDate,
operationId,
accountNumber,
typeOfOperation,
category,
operationAmount,
description,
payPurpose,
payer_acct,
payer_inn,
payer_name,
receiver_acct,
receiver_inn,
receiver_name,
rrn)
select operationDate,
operationId,
accountNumber,
typeOfOperation,
category,
operationAmount,
description,
payPurpose,
payer_acct,
payer_inn,
payer_name,
receiver_acct,
receiver_inn,
receiver_name,
rrn
FROM OPENJSON(@s, '$.operations')
WITH (
operationDate datetime '$.operationDate',
operationId nvarchar(512) '$.operationId',
accountNumber nvarchar(512) '$.accountNumber',
typeOfOperation nvarchar(512) '$.typeOfOperation',
category nvarchar(512) '$.category',
operationAmount decimal(18,2) '$.operationAmount',
description nvarchar(512) '$.description',
payPurpose nvarchar(512) '$.payPurpose',
payer_acct nvarchar(512) '$.payer.acct',
payer_inn nvarchar(512) '$.payer.inn',
payer_name nvarchar(512) '$.payer.name',
receiver_acct nvarchar(512) '$.receiver.acct',
receiver_inn nvarchar(512) '$.receiver.inn',
receiver_name nvarchar(512) '$.receiver.name',
rrn nvarchar(512) '$.rrn'
) t1
where operationId not in (select o.operationId from tbank_operations o)
declare @cnt int = (select count(*) from tbank_operations)
-- SELECT 1
select '' Msg, 1 Result, cast(@cnt as nvarchar) + 'шт. в базе' Response
-- SELECT 2 Внешние действия
END
6. Проверяем как работает метод через инструмент вызова внешнего действия на /asapi

Таким образом можно пополнить базу транзакциями за преждние периоды.
7. В /syssp делаем периодическую задачу, которая раз в день (можно и чаще) будет вызывать метод АПИ для обновления данных в таблице за последние 1-2 дня.
Код периодической задачи:
CREATE PROCEDURE [dbo].[sync_tbank_updateOperations]
@code nvarchar(128),
@result bit output,
@msg nvarchar(max) output
AS
BEGIN
declare @fromDate nvarchar(max) = FORMAT(dateadd(day, -2, getdate()), 'yyyy-MM-dd')
declare @toDate nvarchar(max) = FORMAT(dateadd(day, -1, getdate()), 'yyyy-MM-dd')
select 'apirequest' type, 'tbank_getoperations' code,
'fromDate' p1_name, @fromDate p1_value,'toDate' p2_name, @toDate p2_value
set @result = 1
set @msg = 'ok'
END
Таким образом в базе данных оседают данные по всем транзакциям.
Отдельно можно настроить веб-хук для получения уведомления от Тбанк о новой транзакции. Либо можно просто вызывать обновление каждые 10 минут (тогда метод надо немного переделать в плане fromDate и toDate - чтобы передавалить также и часы, минуты).
Далее эти данные можно вывести в таблице пользователю с фильтрами по дате, типу операции, по ИНН и т.д.
Google поиск по нашей документации
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта