Бизнес-карты (tbank.business_cards)¶
Управление корпоративными картами: выпуск и перевыпуск виртуальных карт, реквизиты, блокировка, лимиты (расходный и на снятие наличных, в том числе пакетно) и списки карт компании.
Хосты: большинство методов — на
business.tbank.ru/openapiпо Bearer-токену; перевыпуск, общий расходный лимит, пакетная установка лимитов и методыv3(списки заявок и карт компании) — наsecured-openapi.tbank.ruпо mTLS (cert).Суммы:
Decimalв рублях (пакетные лимитыv3— целые). Провод:camelCase.Клиенты:
tbank.business_cards.BusinessCardsClient(async) иtbank.business_cards.sync.BusinessCardsClient(sync).
Выпуск виртуальной карты¶
from tbank.business_cards import BusinessCardsClient
from tbank.business_cards.models import CreateApplicationRequest
from tbank.business_cards.enums import CardNetwork
client = BusinessCardsClient(
token="business-token",
cert=("client.pem", "client-key.pem"), # mTLS нужен для v3 и лимитов
)
app = await client.create_virtual_card_application(CreateApplicationRequest(
employee_identification_application_id="emp-app-1",
account_number="40802810000000000001",
card_network=CardNetwork.MIR,
))
status = await client.get_virtual_card_application(app.card_issue_application_id)
if status.ucid:
requisites = await client.get_virtual_card_requisites(status.ucid)
print(requisites.number, requisites.cvc, requisites.expiry_date.month)
Лимиты и блокировка¶
from decimal import Decimal
from tbank.business_cards.models import (
SetLimitRequest, BlockCardRequest, SetBatchLimitsRequest, BatchLimitItem, BatchLimitValue,
)
from tbank.business_cards.enums import InputLimitPeriod, CardBlockReason
# лимит на снятие наличных (Bearer) и общий расходный лимит (mTLS)
await client.set_cash_limit(ucid, SetLimitRequest(
limit_value=Decimal("50000"), limit_period=InputLimitPeriod.MONTH,
))
await client.set_spend_limit(ucid, SetLimitRequest(
limit_value=Decimal("200000"), limit_period=InputLimitPeriod.MONTH,
))
limits = await client.get_card_limits(ucid)
print(limits.spend_limit.limit_remain)
# пакетная установка лимитов (mTLS, до 10 000 карт)
await client.set_batch_limits(SetBatchLimitsRequest(limits=[
BatchLimitItem(ucid=ucid, spend_limit=BatchLimitValue(
limit_period=InputLimitPeriod.DAY, limit_value=100000)),
]))
# блокировка
await client.block_card(ucid, BlockCardRequest(reason=CardBlockReason.LOST))
Перевыпуск и списки¶
app = await client.reissue_virtual_card(ucid) # mTLS → correlationId
result = await client.get_reissue_result(app.correlation_id)
if result.status.value == "READY":
print(result.info.new_ucid)
await client.list_cards(account_number="40802810000000000001")
await client.list_company_cards() # v3, mTLS
await client.list_virtual_card_applications(limit=50, offset=0) # v3, mTLS
Клиент¶
- class tbank.business_cards.aio.BusinessCardsClient(token, *, base_url=None, secured_base_url=None, sandbox=False, cert=None, verify=True, retry=None, transport=None, secured_transport=None)[исходный код]¶
Базовые классы:
BaseAsyncClientАсинхронный клиент бизнес-карт: выпуск и перевыпуск виртуальных карт, реквизиты, блокировка, лимиты (в т.ч. пакетно) и списки карт.
Перевыпуск, общий расходный лимит, пакетная установка лимитов и методы v3 (список заявок и карт компании) идут на secured-хост и требуют mTLS-сертификата (cert); остальное — на обычном хосте по Bearer. Суммы — Decimal в рублях, провод — camelCase.
- Параметры:
token (str)
base_url (Optional[str])
secured_base_url (Optional[str])
sandbox (bool)
cert (Optional[CertTypes])
verify (VerifyTypes)
retry (Optional[RetryPolicy])
transport (Optional[AsyncTransport])
secured_transport (Optional[AsyncTransport])
- decimal_body: ClassVar[bool] = True¶
True → тело парсится с parse_float=Decimal (точные денежные суммы).
- async list_cards(*, account_number=None, offset=None, limit=None)[исходный код]¶
Список бизнес-карт компании.
- Параметры:
- Тип результата:
- async get_card(ucid)[исходный код]¶
Карточка бизнес-карты по её UCID.
- async get_virtual_card_requisites(ucid)[исходный код]¶
Реквизиты виртуальной карты (номер, CVC, срок действия).
- Параметры:
ucid (int)
- Тип результата:
- async block_card(ucid, request)[исходный код]¶
Заблокировать карту.
- Параметры:
ucid (int)
request (BlockCardRequest)
- Тип результата:
None
- async list_company_cards(*, account_number=None, offset=None, limit=None)[исходный код]¶
Список карт компании (v3, mTLS).
- Параметры:
- Тип результата:
- async create_virtual_card_application(request)[исходный код]¶
Создать заявку на выпуск виртуальной карты.
- Параметры:
request (CreateApplicationRequest)
- Тип результата:
- async get_virtual_card_application(application_id)[исходный код]¶
Статус заявки на выпуск виртуальной карты.
- Параметры:
application_id (str)
- Тип результата:
- async list_virtual_card_applications(*, limit, offset)[исходный код]¶
Список заявок на выпуск виртуальных карт (v3, mTLS).
- Параметры:
- Тип результата:
- async reissue_virtual_card(ucid)[исходный код]¶
Перевыпустить виртуальную карту (mTLS). Возвращает correlationId.
- Параметры:
ucid (int)
- Тип результата:
- async get_reissue_result(correlation_id)[исходный код]¶
Результат перевыпуска виртуальной карты.
- Параметры:
correlation_id (str)
- Тип результата:
- async get_card_limits(ucid)[исходный код]¶
Текущие лимиты карты (расходный и на снятие наличных).
- Параметры:
ucid (int)
- Тип результата:
- async set_cash_limit(ucid, request)[исходный код]¶
Установить лимит на снятие наличных.
- Параметры:
ucid (int)
request (SetLimitRequest)
- Тип результата:
None
- async set_spend_limit(ucid, request)[исходный код]¶
Установить общий расходный лимит (mTLS).
- Параметры:
ucid (int)
request (SetLimitRequest)
- Тип результата:
None
- async set_batch_limits(request)[исходный код]¶
Пакетно установить лимиты для списка карт (v3, mTLS).
- Параметры:
request (SetBatchLimitsRequest)
- Тип результата:
Модели¶
- class tbank.business_cards.models.BusinessCardModel[исходный код]¶
Базовые классы:
BaseModelБазовая модель домена: snake_case в Python, camelCase на проводе.
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.CardInfo(*, ucid, accountNumber, cardBin, cardLastFourDigits, isActive, status, embossedName)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.CardInfoSeq(*, offset, limit, totalNumber, cards=None)[исходный код]¶
Базовые классы:
BusinessCardModelСтраница карт (метод /api/v1/card).
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.ExpiryDate(*, year, month)[исходный код]¶
Базовые классы:
BusinessCardModel- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.VirtualCardRequisites(*, number, embossedName, cvc, expiryDate)[исходный код]¶
Базовые классы:
BusinessCardModelРеквизиты виртуальной карты (полный номер, CVC, срок).
- Параметры:
number (str)
embossedName (str)
cvc (str)
expiryDate (ExpiryDate)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.CompanyCard(*, ucid, accountNumber, cardBin, cardLastFourDigits, embossedName, isActive, isVirtual, status)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.CompanyCardsResponse(*, cards=<factory>, offset, limit, total=None)[исходный код]¶
Базовые классы:
BusinessCardModelСписок карт компании (метод /api/v3/company/card).
- Параметры:
cards (List[CompanyCard])
offset (int)
limit (int)
total (int | None)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.CreateApplicationRequest(*, employeeIdentificationApplicationId, accountNumber, cardNetwork)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
employeeIdentificationApplicationId (str)
accountNumber (str)
cardNetwork (CardNetwork)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.CreateApplicationResult(*, cardIssueApplicationId)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
cardIssueApplicationId (str)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.CardIssueApplicationStatusResult(*, cardIssueApplicationId, status, failedReason=None, ucid=None)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
cardIssueApplicationId (str)
status (CardIssueApplicationStatus)
failedReason (str | None)
ucid (int | None)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.VirtualCardApplication(*, cardIssueApplicationId, status, ucid=None)[исходный код]¶
Базовые классы:
BusinessCardModelЗаявка на виртуальную карту (метод /api/v3/card/virtual/issue/application).
- Параметры:
cardIssueApplicationId (str)
status (CardIssueApplicationStatus)
ucid (str | None)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.ReissueRequest(*, ucid)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
ucid (int)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.ReissueApplication(*, correlationId)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
correlationId (str)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.ReissuedVirtualCardInfo(*, oldUcid, newUcid, cardBin, cardLastFourDigits)[исходный код]¶
Базовые классы:
BusinessCardModel- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.ReissueVirtualCardResult(*, status, info=None)[исходный код]¶
Базовые классы:
BusinessCardModelРезультат перевыпуска: info заполнен только при status == READY.
- Параметры:
status (ReissueStatus)
info (ReissuedVirtualCardInfo | None)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.BlockCardRequest(*, reason, comment=None)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
reason (CardBlockReason)
comment (str | None)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.SetLimitRequest(*, limitValue, limitPeriod)[исходный код]¶
Базовые классы:
BusinessCardModelУстановка лимита (общий расходный или на наличные).
- Параметры:
limitValue (Annotated[Decimal, PlainSerializer(func=~tbank.business_cards.models.<lambda>, return_type=float, when_used=json)])
limitPeriod (InputLimitPeriod)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.SpendLimit(*, limitValue, limitRemain, limitPeriod)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
limitValue (Decimal)
limitRemain (Decimal)
limitPeriod (OutputLimitPeriod)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.CashLimit(*, limitValue, limitRemain, limitPeriod)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
limitValue (Decimal)
limitRemain (Decimal)
limitPeriod (OutputLimitPeriod)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.CardLimits(*, ucid, spendLimit, cashLimit)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
ucid (int)
spendLimit (SpendLimit)
cashLimit (CashLimit)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.BatchLimitValue(*, limitPeriod, limitValue)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
limitPeriod (InputLimitPeriod)
limitValue (int)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.BatchLimitItem(*, ucid, spendLimit=None, cashLimit=None)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
ucid (int)
spendLimit (BatchLimitValue | None)
cashLimit (BatchLimitValue | None)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.SetBatchLimitsRequest(*, limits)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
limits (List[BatchLimitItem])
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.BatchLimitResult(*, isSuccess, errorMessage=None)[исходный код]¶
Базовые классы:
BusinessCardModel- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.BatchLimitResultItem(*, ucid, spendLimit=None, cashLimit=None)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
ucid (int)
spendLimit (BatchLimitResult | None)
cashLimit (BatchLimitResult | None)
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tbank.business_cards.models.SetBatchLimitsResult(*, limits=<factory>)[исходный код]¶
Базовые классы:
BusinessCardModel- Параметры:
limits (List[BatchLimitResultItem])
- model_config = {'alias_generator': <function to_camel>, 'extra': 'ignore', 'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}¶
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
Перечисления¶
- class tbank.business_cards.enums.CardStatus(*values)[исходный код]¶
-
Статус бизнес-карты.
- NORM = 'NORM'¶
- CLOSED = 'CLOSED'¶
- BLOCKED = 'BLOCKED'¶
- class tbank.business_cards.enums.CardNetwork(*values)[исходный код]¶
-
Платёжная система карты.
- MASTERCARD = 'MASTERCARD'¶
- VISA = 'VISA'¶
- MIR = 'MIR'¶
- class tbank.business_cards.enums.CardBlockReason(*values)[исходный код]¶
-
Причина блокировки карты.
- LOST = 'LOST'¶
- STOLEN = 'STOLEN'¶
- BROKEN = 'BROKEN'¶
- FRAUD = 'FRAUD'¶
- CLIENT_INITIATED = 'CLIENTINITIATED'¶
- class tbank.business_cards.enums.CardIssueApplicationStatus(*values)[исходный код]¶
-
Статус заявки на выпуск виртуальной карты.
- NEW = 'NEW'¶
- IDENTIFICATION = 'IDENTIFICATION'¶
- ISSUING = 'ISSUING'¶
- CARD_ISSUED = 'CARD_ISSUED'¶
- FAILED_FATAL = 'FAILED_FATAL'¶
- FAILED_NON_FATAL = 'FAILED_NON_FATAL'¶
- class tbank.business_cards.enums.InputLimitPeriod(*values)[исходный код]¶
-
Период возобновления лимита (на запись).
- DAY = 'DAY'¶
- MONTH = 'MONTH'¶
- IRREGULAR = 'IRREGULAR'¶