{"openapi":"3.0.3","info":{"title":"Amypay Account API","version":"1.1.0","description":"API личного аккаунта: балансы, история, вывод и переводы. Server-to-server bearer authentication; no CORS grants or merchant management."},"servers":[{"url":"/api/account/v1"}],"paths":{"/balances":{"get":{"operationId":"account_balances","summary":"balances","description":"Required token scope: balances:read. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP.","x-required-scope":"balances:read","security":[{"accountBearer":[]}],"parameters":[],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Balances"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"withdrawal_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/history":{"get":{"operationId":"account_history","summary":"history","description":"Required token scope: history:read. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP.","x-required-scope":"history:read","security":[{"accountBearer":[]}],"parameters":[{"name":"before_id","in":"query","schema":{"type":"string","pattern":"^[1-9][0-9]{0,17}$"},"description":"from inclusive, to exclusive (Unix seconds); newest IDs first."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"description":"from inclusive, to exclusive (Unix seconds); newest IDs first."},{"name":"currency","in":"query","schema":{"type":"string","pattern":"^[A-Za-z0-9_]{1,32}$"},"description":"from inclusive, to exclusive (Unix seconds); newest IDs first."},{"name":"type","in":"query","schema":{"type":"string","pattern":"^[A-Za-z0-9_]{1,32}$"},"description":"from inclusive, to exclusive (Unix seconds); newest IDs first."},{"name":"from","in":"query","schema":{"type":"string","pattern":"^[1-9][0-9]{0,17}$"},"description":"from inclusive, to exclusive (Unix seconds); newest IDs first."},{"name":"to","in":"query","schema":{"type":"string","pattern":"^[1-9][0-9]{0,17}$"},"description":"from inclusive, to exclusive (Unix seconds); newest IDs first."}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/History"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"withdrawal_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/withdrawal-methods":{"get":{"operationId":"account_methods","summary":"methods","description":"Required token scope: withdrawals:read. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP.","x-required-scope":"withdrawals:read","security":[{"accountBearer":[]}],"parameters":[],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Methods"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"withdrawal_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/withdrawals/quote":{"post":{"operationId":"account_quote","summary":"quote","description":"Required token scope: withdrawals:read. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP.","x-required-scope":"withdrawals:read","security":[{"accountBearer":[]}],"parameters":[],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Quote"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"withdrawal_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteInput"}}}}}},"/withdrawals":{"post":{"operationId":"account_create","summary":"create","description":"Required token scope: withdrawals:write. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP.","x-required-scope":"withdrawals:write","security":[{"accountBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{16,128}$"},"description":"Unique per account and operation type, shared across token rotation. Never reuse for another payload. Retain with the exact confirmed payload for retries."}],"responses":{"201":{"description":"Committed result snapshot, also returned on replay. Transfers complete synchronously with status done.","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}},"Idempotency-Replayed":{"schema":{"type":"string","enum":["true","false"]}},"Location":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Withdrawal"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"withdrawal_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInput"}}}}}},"/withdrawals/{id}":{"get":{"operationId":"account_status","summary":"status","description":"Required token scope: withdrawals:read. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP.","x-required-scope":"withdrawals:read","security":[{"accountBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,17}$"}}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Withdrawal"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"withdrawal_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/withdrawals/{id}/cancel":{"post":{"operationId":"account_cancel","summary":"cancel","description":"Required token scope: withdrawals:write. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP.","x-required-scope":"withdrawals:write","security":[{"accountBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[1-9][0-9]{0,17}$"}}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Withdrawal"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"withdrawal_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{}}}}}}},"/transfers/recipient":{"post":{"operationId":"account_transferRecipient","summary":"Проверка получателя по адресу кошелька","description":"Required token scope: transfers:read. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP. Lookup принимает wallet_tag. Quote/create принимают либо wallet_tag, либо app_id + connection_id + currency, никогда оба варианта. Связь принадлежит приложению владельца токена, требует действующего согласия. Linked quote не возвращает персональные данные. Создание требует текущей 2FA. Котировка связана с владельцем, операцией, кошельком получателя, валютой, курсом, комиссией и параметрами, а для связи с версией согласия. amount = полное списание; expected_net = зачисление. Не передавайте recipient и expires_at при создании. Успешные Account API переводы не увеличивают amount/velocity риск. Уже высокий риск, ручные блокировки, средства, комиссии и суточный денежный лимит сохраняются. Клиентского skip-risk/source поля нет. Обычные web/mobile переводы и внешние выводы не освобождены от риска. При неизвестном результате повторяйте тот же payload и ключ, не заменяйте quote; новый расчёт и новый ключ допустимы после известного окончательного отказа.","x-required-scope":"transfers:read","security":[{"accountBearer":[]}],"parameters":[],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/TransferRecipient"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"recipient_unavailable (lookup/quote)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key / invalid_recipient / recipient_unavailable / transfer_unavailable / daily_limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited: независимые owner-бюджеты recipient 120/мин, quote 120/мин, create 60/мин; веб-бюджеты не расходуются. Повторы также расходуют лимит; это не гарантия завершённых переводов.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferRecipientInput"}}}}}},"/connections/wallets":{"post":{"operationId":"account_connectionWallets","summary":"connectionWallets","description":"Required token scope: transfers:read. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP.","x-required-scope":"transfers:read","security":[{"accountBearer":[]}],"parameters":[],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/PayoutWallets"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"withdrawal_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionInput"}}}}}},"/transfers/quote":{"post":{"operationId":"account_transferQuote","summary":"Расчёт перевода на 120 секунд","description":"Required token scope: transfers:read. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP. Lookup принимает wallet_tag. Quote/create принимают либо wallet_tag, либо app_id + connection_id + currency, никогда оба варианта. Связь принадлежит приложению владельца токена, требует действующего согласия. Linked quote не возвращает персональные данные. Создание требует текущей 2FA. Котировка связана с владельцем, операцией, кошельком получателя, валютой, курсом, комиссией и параметрами, а для связи с версией согласия. amount = полное списание; expected_net = зачисление. Не передавайте recipient и expires_at при создании. Успешные Account API переводы не увеличивают amount/velocity риск. Уже высокий риск, ручные блокировки, средства, комиссии и суточный денежный лимит сохраняются. Клиентского skip-risk/source поля нет. Обычные web/mobile переводы и внешние выводы не освобождены от риска. При неизвестном результате повторяйте тот же payload и ключ, не заменяйте quote; новый расчёт и новый ключ допустимы после известного окончательного отказа.","x-required-scope":"transfers:read","security":[{"accountBearer":[]}],"parameters":[],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/TransferQuote"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"recipient_unavailable (lookup/quote)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key / invalid_recipient / recipient_unavailable / transfer_unavailable / daily_limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited: независимые owner-бюджеты recipient 120/мин, quote 120/мин, create 60/мин; веб-бюджеты не расходуются. Повторы также расходуют лимит; это не гарантия завершённых переводов.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferQuoteInput"}}}}}},"/transfers":{"post":{"operationId":"account_transferCreate","summary":"Перевод другому пользователю","description":"Required token scope: transfers:write. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP. Lookup принимает wallet_tag. Quote/create принимают либо wallet_tag, либо app_id + connection_id + currency, никогда оба варианта. Связь принадлежит приложению владельца токена, требует действующего согласия. Linked quote не возвращает персональные данные. Создание требует текущей 2FA. Котировка связана с владельцем, операцией, кошельком получателя, валютой, курсом, комиссией и параметрами, а для связи с версией согласия. amount = полное списание; expected_net = зачисление. Не передавайте recipient и expires_at при создании. Успешные Account API переводы не увеличивают amount/velocity риск. Уже высокий риск, ручные блокировки, средства, комиссии и суточный денежный лимит сохраняются. Клиентского skip-risk/source поля нет. Обычные web/mobile переводы и внешние выводы не освобождены от риска. При неизвестном результате повторяйте тот же payload и ключ, не заменяйте quote; новый расчёт и новый ключ допустимы после известного окончательного отказа.","x-required-scope":"transfers:write","security":[{"accountBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{16,128}$"},"description":"Unique per account and operation type, shared across token rotation. Never reuse for another payload. Retain with the exact confirmed payload for retries."}],"responses":{"201":{"description":"Committed result snapshot, also returned on replay. Transfers complete synchronously with status done.","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}},"Idempotency-Replayed":{"schema":{"type":"string","enum":["true","false"]}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Transfer"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"recipient_unavailable (lookup/quote)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key / invalid_recipient / recipient_unavailable / transfer_unavailable / daily_limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited: независимые owner-бюджеты recipient 120/мин, quote 120/мин, create 60/мин; веб-бюджеты не расходуются. Повторы также расходуют лимит; это не гарантия завершённых переводов.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferCreateInput"}}}}}},"/profile":{"get":{"operationId":"account_profile","summary":"profile","description":"Required token scope: profile:read. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP.","x-required-scope":"profile:read","security":[{"accountBearer":[]}],"parameters":[],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Profile"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"withdrawal_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"operationId":"account_profileUpdate","summary":"profileUpdate","description":"Required token scope: profile:write. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP.","x-required-scope":"profile:write","security":[{"accountBearer":[]}],"parameters":[],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Profile"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"withdrawal_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}}}},"/notification-preferences":{"get":{"operationId":"account_preferences","summary":"preferences","description":"Required token scope: notifications:read. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP.","x-required-scope":"notifications:read","security":[{"accountBearer":[]}],"parameters":[],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Preferences"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"withdrawal_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"operationId":"account_preferencesUpdate","summary":"preferencesUpdate","description":"Required token scope: notifications:write. No merchant or mobile tokens. Unknown fields are rejected. Базовые бюджеты: IP 600/мин для всех запросов, токен 300/мин; вывод quote/create/cancel отдельно 10/мин на владельца. Администратор задаёт глобальные и персональные бюджеты 1–6000, персональные не обходят IP. Все токены владельца делят бюджет действия независимо от IP.","x-required-scope":"notifications:write","security":[{"accountBearer":[]}],"parameters":[],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/Preferences"}},"required":["ok","data"]}}}},"400":{"description":"invalid_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"invalid_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"insufficient_scope / ip_not_allowed / two_factor_required / risk_restricted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"withdrawal_not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"idempotency_conflict / operation_in_progress / quote_changed / duplicate_recent / withdrawal_not_cancelable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"payload_too_large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"unsupported_media_type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"invalid_fields / invalid_amount / invalid_quote / invalid_destination / invalid_bank / insufficient_funds / method_unavailable / amount_out_of_range / invalid_source_wallet / quote_unavailable / operation_failed / authorization_changed / invalid_name / invalid_preferences / invalid_filters / invalid_idempotency_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Conservative full fixed-window wait: 60 seconds, not exact remaining time. Keep the same idempotency key and payload on retry."}}},"500":{"description":"internal_error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Preferences"}}}}}},"/oauth/payout/authorize":{"get":{"servers":[{"url":"/"}],"operationId":"payout_authorize","summary":"Explicit web consent, not bearer login","security":[],"description":"Requires trusted Amypay session login and completed login 2FA. No automatic consent. state must be unpredictable, bound to the client session and checked on callback. HTTPS exact registered redirect only. Consent POST uses a server-held intent and session CSRF, not client credentials.","parameters":[{"name":"client_id","in":"query","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"}},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","format":"uri"}},{"name":"response_type","in":"query","required":true,"schema":{"type":"string","enum":["code"]}},{"name":"scope","in":"query","required":true,"schema":{"type":"string","enum":["payoutwallets:read"]}},{"name":"state","in":"query","required":true,"schema":{"type":"string","minLength":16,"maxLength":256}},{"name":"code_challenge","in":"query","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"}},{"name":"code_challenge_method","in":"query","required":true,"schema":{"type":"string","enum":["S256"]}}],"responses":{"200":{"description":"HTML consent page"},"302":{"description":"Session login"},"400":{"description":"OAuth error; never redirects an invalid redirect_uri","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"OAuth error; never redirects an invalid redirect_uri","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/oauth/payout/consent":{"post":{"servers":[{"url":"/"}],"operationId":"payout_consent","security":[],"description":"Trusted web form only. Session login and CSRF required. Never submit directly from an integration.","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","additionalProperties":false,"properties":{"_csrf":{"type":"string"},"intent":{"type":"string"},"decision":{"type":"string","enum":["approve","deny"]}},"required":["_csrf","intent","decision"]}}}},"responses":{"302":{"description":"Exact registered callback with code or access_denied and echoed state"},"400":{"description":"OAuth error; never redirects an invalid redirect_uri","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}},"419":{"description":"CSRF rejected"}}}},"/oauth/payout/token":{"post":{"servers":[{"url":"/"}],"operationId":"payout_token","security":[{"payoutBasic":[]}],"description":"Server only. No query parameters or secrets in URL. Basic client_id:client_secret. Code TTL 60s; one successful exchange. No refresh tokens. Revoke removes only the presented access token; disconnect in settings withdraws consent.","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","additionalProperties":false,"properties":{"grant_type":{"type":"string","enum":["authorization_code"]},"code":{"type":"string"},"redirect_uri":{"type":"string"},"code_verifier":{"type":"string","pattern":"^[A-Za-z0-9._~-]{43,128}$"}},"required":["grant_type","code","redirect_uri","code_verifier"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"access_token":{"type":"string"},"token_type":{"type":"string","enum":["Bearer"]},"expires_in":{"type":"integer","enum":[1800]},"scope":{"type":"string","enum":["payoutwallets:read"]}},"required":["access_token","token_type","expires_in","scope"]}}}},"400":{"description":"OAuth error; never redirects an invalid redirect_uri","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"OAuth error; never redirects an invalid redirect_uri","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"OAuth error; never redirects an invalid redirect_uri","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/oauth/payout/revoke":{"post":{"servers":[{"url":"/"}],"operationId":"payout_revoke","security":[{"payoutBasic":[]}],"description":"Server only. No query parameters or secrets in URL. Basic client_id:client_secret. Code TTL 60s; one successful exchange. No refresh tokens. Revoke removes only the presented access token; disconnect in settings withdraws consent.","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","additionalProperties":false,"properties":{"token":{"type":"string"}},"required":["token"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{}}}}},"400":{"description":"OAuth error; never redirects an invalid redirect_uri","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}},"401":{"description":"OAuth error; never redirects an invalid redirect_uri","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"OAuth error; never redirects an invalid redirect_uri","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/oauth/payout/wallets":{"get":{"servers":[{"url":"/"}],"operationId":"payout_wallets","security":[{"payoutBearer":[]}],"description":"One app/connection only. No PII, balances, history or financial permissions. Access expires after 30 minutes. For persisted consent use Account API connections/wallets with the owner token and transfers:read.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayoutWallets"}}}},"401":{"description":"OAuth error; never redirects an invalid redirect_uri","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"OAuth error; never redirects an invalid redirect_uri","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"securitySchemes":{"accountBearer":{"type":"http","scheme":"bearer","bearerFormat":"amy_account_<24 hex public ID>.<64 hex secret>","description":"Создайте токен в настройках аккаунта на сайте, не через API. Для управления API включите двухфакторную защиту. После входа повторный пароль/код не требуются. Создание любых токенов, продление, отзыв и управление приложениями требуют включённой 2FA владельца, активной сессии и CSRF. По умолчанию срок 30 дней; можно явно выбрать «Бессрочно». Секрет показывается один раз. Владелец может продлить неотозванный конечный токен без замены Bearer, прав или IP. Отозванный токен не восстанавливается. Уже бессрочный не требует продления. Существующие токены не изменяются: нефинансовые права работают без 2FA, финансовые проверки остаются прежними. Bearer-запросы не требуют пароля или одноразового кода."},"payoutBasic":{"type":"http","scheme":"basic","description":"Separate confidential client_id:client_secret. Never Account API token."},"payoutBearer":{"type":"http","scheme":"bearer","bearerFormat":"amy_link_<opaque random>","description":"Fixed payoutwallets:read only; invalid in Account API."}},"schemas":{"ConnectionInput":{"type":"object","additionalProperties":false,"properties":{"app_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"connection_id":{"type":"string","pattern":"^[a-f0-9]{32}$"}},"required":["app_id","connection_id"]},"PayoutWallets":{"type":"object","additionalProperties":false,"properties":{"subject":{"type":"string","pattern":"^[a-f0-9]{32}$"},"connection_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"wallets":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"wallet_tag":{"type":"string"},"currency":{"type":"string"}},"required":["wallet_tag","currency"]}}},"required":["subject","connection_id","wallets"]},"Error":{"type":"object","additionalProperties":false,"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["ok","error"]},"Profile":{"type":"object","additionalProperties":false,"properties":{"first_name":{"type":"string","maxLength":100},"last_name":{"type":"string","maxLength":100}},"required":["first_name","last_name"]},"Preferences":{"type":"object","additionalProperties":false,"properties":{"email_notifications":{"type":"boolean"},"preferences":{"type":"object","additionalProperties":false,"properties":{"login_new_ip":{"type":"boolean","description":"Вход с нового устройства"},"withdraw_created":{"type":"boolean","description":"Заявка на вывод создана"},"withdraw_done":{"type":"boolean","description":"Вывод обработан"},"password_changed":{"type":"boolean","description":"Пароль изменён"},"order_paid":{"type":"boolean","description":"Заказ оплачен"},"transfer_in":{"type":"boolean","description":"Входящий перевод"},"deposit_done":{"type":"boolean","description":"Пополнение зачислено"},"p2p_deal":{"type":"boolean","description":"P2P-сделка завершена"},"service_order":{"type":"boolean","description":"Заявка на услугу"},"sbp_qr_payment":{"type":"boolean","description":"Оплата по СБП QR"}},"required":["login_new_ip","withdraw_created","withdraw_done","password_changed","order_paid","transfer_in","deposit_done","p2p_deal","service_order","sbp_qr_payment"]}},"required":["email_notifications","preferences"]},"TransferRecipientInput":{"type":"object","additionalProperties":false,"properties":{"wallet_tag":{"type":"string","maxLength":40,"pattern":"^AMY[0-9]{8,20}[A-Z0-9_]{2,20}$"}},"required":["wallet_tag"]},"TransferRecipient":{"type":"object","additionalProperties":false,"properties":{"wallet_tag":{"type":"string"},"currency":{"type":"string"},"decimals":{"type":"integer"},"display_name":{"type":"string"},"masked_email":{"type":"string"},"saved":{"type":"boolean"}},"required":["wallet_tag","currency","decimals","display_name","masked_email","saved"]},"TransferQuoteInput":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"wallet_tag":{"type":"string","maxLength":40,"pattern":"^AMY[0-9]{8,20}[A-Z0-9_]{2,20}$"},"amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Десятичная строка, точность из recipient.decimals (RUB: 2). Сумма полного списания, комиссия удерживается из неё. До 14 цифр в минимальных единицах."},"comment":{"type":"string","maxLength":255}},"required":["wallet_tag","amount"]},{"type":"object","additionalProperties":false,"properties":{"app_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"connection_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"currency":{"type":"string"},"amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Десятичная строка, точность из recipient.decimals (RUB: 2). Сумма полного списания, комиссия удерживается из неё. До 14 цифр в минимальных единицах."},"comment":{"type":"string","maxLength":255}},"required":["app_id","connection_id","currency","amount"]}]},"TransferCreateInput":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"wallet_tag":{"type":"string","maxLength":40,"pattern":"^AMY[0-9]{8,20}[A-Z0-9_]{2,20}$"},"amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Десятичная строка, точность из recipient.decimals (RUB: 2). Сумма полного списания, комиссия удерживается из неё. До 14 цифр в минимальных единицах."},"comment":{"type":"string","maxLength":255},"currency":{"type":"string"},"quote_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"expected_fee":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Non-negative fee decimal string returned by quote. Zero is valid."},"expected_net":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Десятичная строка, точность из recipient.decimals (RUB: 2). Сумма полного списания, комиссия удерживается из неё. До 14 цифр в минимальных единицах."}},"required":["wallet_tag","amount","currency","quote_id","expected_fee","expected_net"]},{"type":"object","additionalProperties":false,"properties":{"app_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"connection_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"currency":{"type":"string"},"amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Десятичная строка, точность из recipient.decimals (RUB: 2). Сумма полного списания, комиссия удерживается из неё. До 14 цифр в минимальных единицах."},"comment":{"type":"string","maxLength":255},"quote_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"expected_fee":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Non-negative fee decimal string returned by quote. Zero is valid."},"expected_net":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Десятичная строка, точность из recipient.decimals (RUB: 2). Сумма полного списания, комиссия удерживается из неё. До 14 цифр в минимальных единицах."}},"required":["app_id","connection_id","currency","amount","quote_id","expected_fee","expected_net"]}]},"TransferQuote":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"wallet_tag":{"type":"string","maxLength":40,"pattern":"^AMY[0-9]{8,20}[A-Z0-9_]{2,20}$"},"amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Десятичная строка, точность из recipient.decimals (RUB: 2). Сумма полного списания, комиссия удерживается из неё. До 14 цифр в минимальных единицах."},"comment":{"type":"string","maxLength":255},"currency":{"type":"string"},"quote_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"expected_fee":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Non-negative fee decimal string returned by quote. Zero is valid."},"expected_net":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Десятичная строка, точность из recipient.decimals (RUB: 2). Сумма полного списания, комиссия удерживается из неё. До 14 цифр в минимальных единицах."},"expires_at":{"type":"integer","format":"int64","description":"Unix seconds"},"recipient":{"$ref":"#/components/schemas/TransferRecipient"}},"required":["wallet_tag","amount","comment","currency","quote_id","expected_fee","expected_net","expires_at","recipient"]},{"type":"object","additionalProperties":false,"properties":{"app_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"connection_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"currency":{"type":"string"},"amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Десятичная строка, точность из recipient.decimals (RUB: 2). Сумма полного списания, комиссия удерживается из неё. До 14 цифр в минимальных единицах."},"comment":{"type":"string","maxLength":255},"quote_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"expected_fee":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Non-negative fee decimal string returned by quote. Zero is valid."},"expected_net":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Десятичная строка, точность из recipient.decimals (RUB: 2). Сумма полного списания, комиссия удерживается из неё. До 14 цифр в минимальных единицах."},"expires_at":{"type":"integer","format":"int64","description":"Unix seconds"},"recipient":{"type":"object","additionalProperties":false,"properties":{"connection_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"currency":{"type":"string"}},"required":["connection_id","currency"]}},"required":["app_id","connection_id","currency","amount","comment","quote_id","expected_fee","expected_net","expires_at","recipient"]}]},"Transfer":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"wallet_tag":{"type":"string"},"currency":{"type":"string"},"amount":{"type":"string","pattern":"^-?[0-9]+(?:\\.[0-9]+)?$","description":"Decimal string, never a JSON number."},"fee":{"type":"string","pattern":"^-?[0-9]+(?:\\.[0-9]+)?$","description":"Decimal string, never a JSON number."},"net_amount":{"type":"string","pattern":"^-?[0-9]+(?:\\.[0-9]+)?$","description":"Decimal string, never a JSON number."},"status":{"type":"string","enum":["done"]},"created_at":{"type":"integer","format":"int64","description":"Unix seconds"}},"required":["id","wallet_tag","currency","amount","fee","net_amount","status","created_at"]},"QuoteInput":{"type":"object","additionalProperties":false,"properties":{"method_code":{"type":"string","maxLength":255},"source_currency":{"type":"string"},"amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Positive decimal string. Method precision applies; RUB is whole units. At most 14 significant minor-unit digits."},"destination":{"type":"string","maxLength":255},"bank_code":{"type":"string"}},"required":["method_code","source_currency","amount","destination"]},"CreateInput":{"type":"object","additionalProperties":false,"properties":{"method_code":{"type":"string","maxLength":255},"source_currency":{"type":"string"},"amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Positive decimal string. Method precision applies; RUB is whole units. At most 14 significant minor-unit digits."},"destination":{"type":"string","maxLength":255},"bank_code":{"type":"string"},"quote_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"expected_fee":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Non-negative fee decimal string returned by quote. Zero is valid."},"expected_payout":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Positive decimal string. Method precision applies; RUB is whole units. At most 14 significant minor-unit digits."}},"required":["method_code","source_currency","amount","destination","quote_id","expected_fee","expected_payout"]},"Quote":{"type":"object","additionalProperties":false,"properties":{"method_code":{"type":"string","maxLength":255},"source_currency":{"type":"string"},"amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Positive decimal string. Method precision applies; RUB is whole units. At most 14 significant minor-unit digits."},"destination":{"type":"string","maxLength":255},"bank_code":{"type":"string"},"expected_fee":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Non-negative fee decimal string returned by quote. Zero is valid."},"expected_payout":{"type":"string","pattern":"^(0|[1-9][0-9]{0,11})(?:\\.[0-9]{1,8})?$","description":"Positive decimal string. Method precision applies; RUB is whole units. At most 14 significant minor-unit digits."},"quote_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"expires_at":{"type":"integer","format":"int64","description":"Unix seconds"},"currency":{"type":"string"}},"required":["method_code","source_currency","amount","destination","bank_code","expected_fee","expected_payout","quote_id","expires_at","currency"]},"Withdrawal":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"status":{"type":"string","description":"Existing withdrawal status, e.g. pending, approved, paid, rejected, canceled."},"method_code":{"type":"string"},"currency":{"type":"string"},"source_currency":{"type":"string"},"amount":{"type":"string","pattern":"^-?[0-9]+(?:\\.[0-9]+)?$","description":"Decimal string, never a JSON number."},"fee":{"type":"string","pattern":"^-?[0-9]+(?:\\.[0-9]+)?$","description":"Decimal string, never a JSON number."},"payout":{"type":"string","pattern":"^-?[0-9]+(?:\\.[0-9]+)?$","description":"Decimal string, never a JSON number."},"created_at":{"type":"integer","format":"int64","description":"Unix seconds"},"processed_at":{"type":"integer","format":"int64","description":"Unix seconds","nullable":true}},"required":["id","status","method_code","currency","source_currency","amount","fee","payout","created_at","processed_at"]},"Balances":{"type":"object","additionalProperties":false,"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"currency":{"type":"string"},"balance":{"type":"string","pattern":"^-?[0-9]+(?:\\.[0-9]+)?$","description":"Decimal string, never a JSON number."},"held":{"type":"string","pattern":"^-?[0-9]+(?:\\.[0-9]+)?$","description":"Decimal string, never a JSON number."},"available":{"type":"string","pattern":"^-?[0-9]+(?:\\.[0-9]+)?$","description":"Decimal string, never a JSON number."}},"required":["currency","balance","held","available"]}}},"required":["items"]},"History":{"type":"object","additionalProperties":false,"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"type":{"type":"string"},"amount":{"type":"string","pattern":"^-?[0-9]+(?:\\.[0-9]+)?$","description":"Decimal string, never a JSON number."},"currency":{"type":"string"},"balance_after":{"type":"string","pattern":"^-?[0-9]+(?:\\.[0-9]+)?$","description":"Decimal string, never a JSON number."},"created_at":{"type":"integer","format":"int64","description":"Unix seconds"}},"required":["id","type","amount","currency","balance_after","created_at"]}},"next_before_id":{"type":"string","nullable":true}},"required":["items","next_before_id"]},"Methods":{"type":"object","additionalProperties":false,"properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"method_code":{"type":"string"},"title":{"type":"string"},"currency":{"type":"string"},"precision":{"type":"integer"},"source_currencies":{"type":"array","items":{"type":"string"}},"min_amount":{"type":"string","pattern":"^-?[0-9]+(?:\\.[0-9]+)?$","description":"Decimal string, never a JSON number."},"max_amount":{"type":"string","pattern":"^-?[0-9]+(?:\\.[0-9]+)?$","description":"Decimal string, never a JSON number."},"needs_bank":{"type":"boolean"},"destination_regex":{"type":"string","nullable":true}},"required":["method_code","title","currency","precision","source_currencies","min_amount","max_amount","needs_bank","destination_regex"]}},"banks":{"type":"object","additionalProperties":{"type":"string"}}},"required":["items","banks"]}}}}