# Promsvyazbank

Promsvyazbank (PSB) is a Russian bank. Its customers have a dedicated option — an
**account transfer within PSB**: the payer sends money to the recipient's account in the same
bank. PSB can also be the payer bank for any other method.

Send the name from the [bank directory](banks.md) in `bank_code` — **`Промсвязьбанк`**
(case-insensitive). `geo_code` is `RU` (default), `currency` is `RUB`.

## What is available { #options }

| Option | `payment_method` | `bank_code` | `is_intrabank` | What the payer gets |
| --- | --- | --- | --- | --- |
| [Account transfer within PSB](#account-intrabank) | `account_transfer` | `Промсвязьбанк` | `true` | a PSB account number, sometimes a link into the PSB app |
| Account transfer from PSB to any bank | `account_transfer` | `Промсвязьбанк` | `false` | an account number, see [Account transfer](account.md) |
| Card transfer within PSB | `card_transfer` | `Промсвязьбанк` | `true` | a PSB card number, see [Card payments](card.md) |
| SBP or card from PSB | `sbp`, `card_transfer` | `Промсвязьбанк` | `false` | a phone or card of any bank |
| Cross-border transfer from PSB | `cross_border_sbp`, `cross_border_card` | `Промсвязьбанк` | `false` | a requisite in another country, see [Cross-border transfer](cross-border.md) |

[`GET /api/v1/project/limits`](sbp.md#contract-limits) shows which of these your project has
enabled: look for a record with the same `payment_method`, `is_intrabank` and
`bank_code: "Промсвязьбанк"` — or `bank_code: null`, which applies to any bank. No record means
`422 payment_not_covered`; ask your manager to enable the option.

## Account transfer within PSB { #account-intrabank }

The payer is a PSB customer. They get the recipient's PSB account number and transfer within the
bank from their app.

### Create a payment { #create }

`POST /api/v1/payments`, [signed](signing.md) the same way as for SBP.

```json
{
  "merchant_payment_id": "order-psb-1001",
  "amount": "30000.00",
  "payment_method": "account_transfer",
  "bank_code": "Промсвязьбанк",
  "is_intrabank": true
}
```

`bank_code` and `is_intrabank: true` go together: without `bank_code` the bank is unknown and
an intrabank transfer cannot be matched. Other fields:
[SBP payments → Request fields](sbp.md#request-fields).

### Response { #response }

```json
{
  "id": "9c4e2f1a-6b7d-4c8e-a1f2-3b4c5d6e7f80",
  "merchant_payment_id": "order-psb-1001",
  "status": "processing",
  "amount": 30000,
  "initial_amount": 30000,
  "currency": "RUB",
  "geo_code": "RU",
  "payment_method": "account_transfer",
  "bank_code": "Промсвязьбанк",
  "is_intrabank": true,
  "requisite": "40817810000000000001",
  "requisite_bank": "Промсвязьбанк",
  "holder_name": "Иван С.",
  "deeplink_url": "intent://...#Intent;scheme=...;end",
  "created_at": "2026-10-14T09:30:00Z",
  "updated_at": "2026-10-14T09:30:01Z"
}
```

- `requisite` is the recipient's PSB account number (20 digits);
- `holder_name` and `requisite_bank` are the recipient and bank the payer checks the transfer
  against;
- `deeplink_url` is a link that opens the PSB app with the transfer. It is not always present:
  today it is issued mostly for Android. More fields may appear — ignore unknown ones.

Other response fields and the `merchant_information` calculation are as for SBP:
[Response](sbp.md#response) and [`merchant_information` calculation](sbp.md#merchant-information).

### What to show the payer { #payer-screen }

- **Account number** — the whole `requisite` with a "Copy" button.
- **Recipient and bank** — `holder_name` and `requisite_bank`.
- **"Open in the PSB app" button** — only if `deeplink_url` is present. Open the link as is; do
  not change or build it yourself. Show the account number even when there is a link: if the app
  does not open, the payer transfers manually.
- **Amount** — exactly `amount`, in one transfer.
- **Deadline** — a countdown from `created_at` for your project's payment lifetime (15 minutes by
  default).

!!! tip "For PSB customers only"
    Offer this option when the payer chose PSB. For a customer of another bank, create the
    payment with their bank or without `is_intrabank`.

### Statuses and result { #result }

As for account transfers: [Statuses](sbp.md#statuses) and [Getting the result](sbp.md#result).

## Common mistakes { #edge-cases }

- **`422 bank_not_found`** — the bank name is not from the directory. Send `Промсвязьбанк`.
- **`422 payment_not_covered`** — the option is not in the contract (see
  [What is available](#options)).
- **`422 payment_not_routable`** — no matching PSB account right now. Retry later with a new
  payment, or create one without `is_intrabank`.
- **No `deeplink_url`** — this is normal: show the account number.

## See also { #see-also }

- [Account transfer](account.md) — the `account_transfer` method in full.
- [Payment methods](methods.md) — all methods and countries.
- [Banks](banks.md) — the name directory for `bank_code`.