openapi: 3.1.0 info: title: Merchant API version: 1.0.0 x-logo: url: https://uzumbank.uz/_nuxt/img/uzumbank-logo-light.f4c13a0.svg href: / description: > **Merchant API** allows partners to accept payments through the Uzum Bank mobile application. When a customer pays for a service, Uzum Bank sends [webhooks](#tag/Webhooks) to your server — HTTP POST requests containing payment data. To integrate, implement webhook handlers on your side and generate responses according to this specification. #### ⚙️ Key features - Payment eligibility check - Payment transaction creation (initiation) - Transaction confirmation - Transaction cancellation - Transaction status checks #### 🚀 **Quick start** - [Payment flow](#section/Payment-Flow) - [Request format](#section/Request-Format) - [Authorization](#section/Authorization) - [Error Codes](#section/Error-Codes) - [Webhooks](#tag/Webhooks) --- # Payment Flow The payment acceptance process through the Uzum Bank mobile application consists of three main steps: 1. Checking payment eligibility — [`/check`](#operation/check) 2. Creating a transaction — [`/create`](#operation/create) 3. Confirming the payment — [`/confirm`](#operation/confirm) The full scenario below describes the actions performed by Uzum Bank and the responses that the partner must return at each step. . 1. The customer selects a service in the Uzum Bank application and enters the data required for payment, such as an account number, phone number, or order number. 2. Uzum Bank sends the [`/check`](#operation/check) webhook to the partner to verify whether the payment can be accepted for the provided data. Customer data is passed in the `params` object. 3. The partner validates the data and returns: - `status: OK` if the payment can continue; - `status: FAILED` and `errorCode` if the payment cannot be accepted. 4. If the check is successful, Uzum Bank sends the [`/create`](#operation/create) webhook with the transaction identifier `transId`, amount `amount`, and payment parameters. 5. The partner creates the transaction on its side and returns: - `status: CREATED` if the transaction is created; - `status: FAILED` and `errorCode` if the transaction cannot be created. 6. After the transaction is created successfully, Uzum Bank debits the customer's payment instrument and sends the [`/confirm`](#operation/confirm) webhook to the partner. 7. The partner provides the service to the customer, moves the transaction to its final state, and returns: - `status: CONFIRMED` if the service was provided successfully; - `status: FAILED` and `errorCode` if confirmation is not possible. 8. If a server error or timeout occurs on the partner side while processing [`/confirm`](#operation/confirm), Uzum Bank sends the [`/status`](#operation/status) webhook to retrieve the actual transaction state. The request is repeated up to 10 times until the partner returns `CONFIRMED` or `FAILED`. # State Model A transaction can be in one of three states. . If you do not receive the transaction confirmation request within 30 minutes of its creation, the transaction is considered unsuccessful. In this case, set the transaction status to `FAILED` on your side. # Request Format Uzum Bank uses the HTTPS protocol to deliver webhooks to the partner. Requests are sent via the `POST` method in `application/json` format, and responses are also expected in `application/json` format. # Authorization Authorization is done via the HTTP Authorization header, which must be present in every request. The header is generated using the "Basic" scheme and user credentials encoded in base64 format: `Authorization: Basic `. The user credentials, including the username and password, are provided by our team. To form the header: 1. Create a string from the username and password, separated by a colon, for example: `"myLogin:myPassword"`; 2. Encode the string in base64, the result might be `YWxhZGRpbjpvcGVuc2VzYW1l`; 3. Insert the result into the header; make sure there is a space between the word `"Basic"` and the encoded credentials. The header will look like: | Header | Value | |--------------------|------------------------------| | Authorization | Basic YWxhZGRpbjpvcGVuc2VzYW1l | # Error Codes If a webhook cannot be processed successfully, return HTTP `400` and a JSON error object with the `errorCode` field. The `errorCode` value is returned as a string. | Error Code | Error Description | Comments | Methods | |------------|-------------------|----------|---------| | `10001` | Access denied | Authorization error. Check the `Authorization` header and issued credentials. | `/check`, `/create`, `/confirm`, `/reverse`, `/status` | | `10002` | JSON parsing error | The request body is not valid JSON or does not match the expected structure. | `/check`, `/create`, `/confirm`, `/reverse`, `/status` | | `10003` | Invalid operation | Incorrect HTTP method. All webhooks expect `POST`. | `/check`, `/create`, `/confirm`, `/reverse`, `/status` | | `10005` | Missing required parameters | One or more required parameters are missing or empty. | `/check`, `/create`, `/confirm`, `/reverse`, `/status` | | `10006` | Invalid `serviceId` | The service identifier is unknown or not available to the partner. | `/check`, `/create` | | `10007` | Additional payment attribute not found | For example: account number, phone number, or order number. | `/check`, `/create` | | `10008` | Payment already made | The payment for the specified additional attributes has already been successfully processed. | `/check`, `/create` | | `10009` | Payment cancelled | The payment for the specified additional attributes has been cancelled. | `/check`, `/create` | | `10010` | Transaction with the specified `transId` has already been created | Return this code when transaction creation is repeated with the same `transId`. | `/create` | | `10011` | Invalid amount | The payment amount does not match the expected amount or cannot be accepted. | `/create` | | `10012` | Payment amount is below the minimum | The amount is lower than the minimum allowed for the service. | `/create` | | `10013` | Payment amount exceeds the maximum | The amount is higher than the maximum allowed for the service. | `/create` | | `10014` | Transaction not found | The transaction with the specified `transId` does not exist in the partner system. | `/confirm`, `/reverse`, `/status` | | `10015` | Transaction cancelled | A cancelled transaction cannot be confirmed. | `/confirm` | | `10016` | Transaction with the specified `transId` has already been confirmed | Repeated confirmation call for an already confirmed transaction. | `/confirm` | | `10017` | Transaction cannot be cancelled | The transaction cannot be cancelled in its current state. | `/reverse` | | `10018` | Transaction with the specified `transId` has already been cancelled | Repeated cancellation call for an already cancelled transaction. | `/reverse` | | `99999` | Internal server error | The Uzum Bank service is temporarily unavailable or cannot process the request. Try again later. | `/check`, `/create`, `/confirm`, `/reverse`, `/status` | tags: - name: Webhooks description: > These are the requests that Uzum Bank sends to the partner during the payment process according to the Merchant API protocol. security: - BasicAuth: [] webhooks: /check: post: summary: Verifying Payment Possibility description: > The `/check` webhook is used to verify the possibility of processing a payment and to retrieve additional information about the payment or the user. tags: - Webhooks operationId: check requestBody: $ref: '#/components/requestBodies/CheckRequest' responses: '200': $ref: '#/components/responses/CheckResponseSuccess' '400': $ref: '#/components/responses/CheckResponseError' /create: post: summary: Creating Payment Transaction description: > The `/create` webhook is used to create a payment transaction in the partner's system. tags: - Webhooks operationId: create requestBody: $ref: '#/components/requestBodies/CreateRequest' responses: '200': $ref: '#/components/responses/CreateResponseSuccess' '400': $ref: '#/components/responses/CreateResponseError' /confirm: post: summary: Confirming Payment Transaction description: > The `/confirm` webhook is used to confirm the payment transaction after the service has been successfully paid for. tags: - Webhooks operationId: confirm requestBody: $ref: '#/components/requestBodies/ConfirmRequest' responses: '200': $ref: '#/components/responses/ConfirmResponseSuccess' '400': $ref: '#/components/responses/ConfirmResponseError' /reverse: post: summary: Cancelling Payment Transaction description: > The `/reverse` webhook is used to cancel a payment transaction in the partner's system. tags: - Webhooks operationId: reverse requestBody: $ref: '#/components/requestBodies/ReverseRequest' responses: '200': $ref: '#/components/responses/ReverseResponseSuccess' '400': $ref: '#/components/responses/ReverseResponseError' /status: post: summary: Checking Payment Transaction Status description: > The `/status` webhook is used to check the status of a payment transaction in the partner's system. tags: - Webhooks operationId: status requestBody: $ref: '#/components/requestBodies/StatusRequest' responses: '200': $ref: '#/components/responses/StatusResponseSuccess' '400': $ref: '#/components/responses/StatusResponseError' components: securitySchemes: BasicAuth: type: http scheme: basic requestBodies: CheckRequest: description: | JSON object with request parameters. required: true content: application/json: schema: $ref: '#/components/schemas/CheckRequest' CreateRequest: description: | JSON object with request parameters. required: true content: application/json: schema: $ref: '#/components/schemas/CreateRequest' ConfirmRequest: description: | JSON object with request parameters. required: true content: application/json: schema: $ref: '#/components/schemas/ConfirmRequest' ReverseRequest: description: | JSON object with request parameters. required: true content: application/json: schema: $ref: '#/components/schemas/ReverseRequest' StatusRequest: description: | JSON object with request parameters. required: true content: application/json: schema: $ref: '#/components/schemas/StatusRequest' responses: CheckResponseSuccess: description: | Successful response. content: application/json: schema: $ref: '#/components/schemas/Check' CheckResponseError: description: | Error response. content: application/json: schema: $ref: '#/components/schemas/CheckError' CreateResponseSuccess: description: | Successful response. content: application/json: schema: $ref: '#/components/schemas/Create' CreateResponseError: description: | Error response. content: application/json: schema: $ref: '#/components/schemas/CreateError' ConfirmResponseSuccess: description: | Successful response. content: application/json: schema: $ref: '#/components/schemas/Confirm' ConfirmResponseError: description: | Error response. content: application/json: schema: $ref: '#/components/schemas/ConfirmError' ReverseResponseSuccess: description: | Successful response. content: application/json: schema: $ref: '#/components/schemas/Reverse' ReverseResponseError: description: | Error response. content: application/json: schema: $ref: '#/components/schemas/ReverseError' StatusResponseSuccess: description: | Successful response. content: application/json: schema: $ref: '#/components/schemas/Status' StatusResponseError: description: | Error response. content: application/json: schema: $ref: '#/components/schemas/StatusError' schemas: CheckRequest: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 timestamp: description: | Time of request (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361456728 params: description: > An object with additional payment properties, such as the account number `account`. type: object example: account: 123456789 required: - serviceId - timestamp - params Check: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 timestamp: description: | Time of payment verification (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361457021 status: description: | Payment verification status. type: string enum: - OK example: OK data: description: > User and payment data (can be an empty object). The `data` object consists of key-value pairs. The key name is arbitrary, for example: `account` or `fio`. The value is an object with a single property `value` (type `string`). type: object example: account: value: '123456789' fio: value: Ivanov Ivan Ivanovich required: - serviceId - timestamp - status CheckError: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 timestamp: description: | Time of payment verification (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361457021 status: description: | Payment verification status. type: string enum: - FAILED example: FAILED errorCode: description: > Error code for payment eligibility verification. Possible values are described in the "Error Codes" section. type: string example: '10007' required: - errorCode CreateRequest: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 timestamp: description: | Time of request (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361456728 transId: description: | Transaction ID of the payment created in Uzum Bank. type: string format: uuid example: 5c398d7e-76b6-11ee-96da-f3a095c6289d params: description: > An object with additional payment properties, such as the account number `account`. type: object example: account: 123456789 amount: description: | Payment amount in tiyin (the smallest currency unit). type: integer format: int64 example: 2500000 required: - serviceId - timestamp - transId - params - amount Create: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 transId: description: | Transaction ID of the payment created in Uzum Bank. type: string format: uuid example: 5c398d7e-76b6-11ee-96da-f3a095c6289d status: description: | Payment transaction status. type: string enum: - CREATED example: CREATED transTime: description: > Time of payment transaction creation (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361458054 data: description: > User and payment data (can be an empty object). The `data` object consists of key-value pairs. The key name is arbitrary, for example: `account` or `fio`. The value is an object with a single property `value` (type `string`). type: object example: account: value: '123456789' fio: value: Ivanov Ivan Ivanovich amount: description: | Payment amount in tiyin (the smallest currency unit). type: integer format: int64 example: 2500000 required: - serviceId - transId - status - transTime - amount CreateError: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 transId: description: | Transaction ID of the payment created in Uzum Bank. type: string format: uuid example: 5c398d7e-76b6-11ee-96da-f3a095c6289d status: description: | Payment transaction status. type: string enum: - FAILED example: FAILED transTime: description: > Time of payment transaction creation (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361458054 errorCode: description: > Error code for payment transaction creation. Possible values are described in the "Error Codes" section. type: string example: '10013' required: - errorCode ConfirmRequest: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 timestamp: description: | Time of request (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361456728 transId: description: | Transaction ID of the payment created in Uzum Bank. type: string format: uuid example: 5c398d7e-76b6-11ee-96da-f3a095c6289d paymentSource: description: > Payment source indicator: UZCARD, HUMO, VISA, MASTERCARD, VISA_DOMESTIC, MASTERCARD_DOMESTIC, INSTALLMENT, CASHBACK, ACCOUNT, WALLET, VISAUZS, UZUM_DEBIT_VISA. type: string format: enum example: INSTALLMENT tariff: description: > `tariff` is available if the payment source symbol is `INSTALLMENT`; otherwise, it is `null`: "003" or "15-0-4" or `null`. type: string format: string example: '003' processingReferenceNumber: description: > Processing reference number. This field is sent only when paying with Uzcard, Humo, Visa Uzum Bank, or Visa Kapital Bank cards. Otherwise, the value of this field will be `null`. type: string format: string example: '000' phone: description: | Client phone number. type: string format: string example: '998901234567' cardType: description: > Client bank card type (1 - corporate bank card, 2 - private bank card). type: integer format: int32 example: 2 required: - serviceId - timestamp - transId - paymentSource - phone Confirm: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 transId: description: | Transaction ID of the payment created in Uzum Bank. type: string format: uuid example: 5c398d7e-76b6-11ee-96da-f3a095c6289d status: description: | Payment transaction status. type: string enum: - CONFIRMED example: CONFIRMED confirmTime: description: > Time of payment transaction confirmation (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361458054 data: description: > User and payment data (can be an empty object). The `data` object consists of key-value pairs. The key name is arbitrary, for example: `account` or `fio`. The value is an object with a single property `value` (type `string`). type: object example: account: value: '123456789' fio: value: Ivanov Ivan Ivanovich amount: description: | Payment amount in tiyin (the smallest currency unit). type: integer format: int64 example: 2500000 required: - serviceId - transId - status - confirmTime - amount ConfirmError: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 transId: description: | Transaction ID of the payment created in Uzum Bank. type: string format: uuid example: 5c398d7e-76b6-11ee-96da-f3a095c6289d status: description: | Payment transaction status. type: string enum: - FAILED example: FAILED confirmTime: description: > Time of payment transaction confirmation (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361458054 errorCode: description: > Error code for payment transaction confirmation. Possible values are described in the "Error Codes" section. type: string example: '10014' required: - errorCode ReverseRequest: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 timestamp: description: | Time of request (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361456728 transId: description: | Transaction ID of the payment created in Uzum Bank. type: string format: uuid example: 5c398d7e-76b6-11ee-96da-f3a095c6289d required: - serviceId - timestamp - transId Reverse: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 transId: description: | Transaction ID of the payment created in Uzum Bank. type: string format: uuid example: 5c398d7e-76b6-11ee-96da-f3a095c6289d status: description: | Payment transaction status. type: string enum: - REVERSED example: REVERSED reverseTime: description: > Time of payment transaction cancellation (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361458054 data: description: > User and payment data (can be an empty object). The `data` object consists of key-value pairs. The key name is arbitrary, for example: `account` or `fio`. The value is an object with a single property `value` (type `string`). type: object example: account: value: '123456789' fio: value: Ivanov Ivan Ivanovich amount: description: | Payment amount in tiyin (the smallest currency unit). type: integer format: int64 example: 2500000 required: - serviceId - transId - status - reverseTime - amount ReverseError: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 transId: description: | Transaction ID of the payment created in Uzum Bank. type: string format: uuid example: 5c398d7e-76b6-11ee-96da-f3a095c6289d status: description: | Payment transaction status. type: string enum: - FAILED example: FAILED reverseTime: description: > Time of payment transaction cancellation (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361458054 errorCode: description: > Error code for payment transaction cancellation. Possible values are described in the "Error Codes" section. type: string example: '10017' required: - errorCode StatusRequest: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 timestamp: description: | Time of request (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361456728 transId: description: | Transaction ID of the payment created in Uzum Bank. type: string format: uuid example: 5c398d7e-76b6-11ee-96da-f3a095c6289d required: - serviceId - timestamp - transId Status: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 transId: description: | Transaction ID of the payment created in Uzum Bank. type: string format: uuid example: 5c398d7e-76b6-11ee-96da-f3a095c6289d status: description: | Payment transaction status. type: string enum: - CREATED - CONFIRMED - REVERSED example: CONFIRMED transTime: description: > Time of payment transaction creation (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361458054 confirmTime: description: > Time of payment transaction confirmation (Unix timestamp in milliseconds). oneOf: - type: integer format: int64 - type: 'null' example: 1698361458054 reverseTime: description: > Time of payment transaction cancellation (Unix timestamp in milliseconds). oneOf: - type: integer format: int64 - type: 'null' example: null data: description: > User and payment data (can be an empty object). The `data` object consists of key-value pairs. The key name is arbitrary, for example: `account` or `fio`. The value is an object with a single property `value` (type `string`). type: object example: account: value: '123456789' fio: value: Ivanov Ivan Ivanovich amount: description: | Payment amount in tiyin (the smallest currency unit). type: integer format: int64 example: 2500000 required: - serviceId - transId - status - transTime StatusError: type: object properties: serviceId: description: | Service ID for which the payment is being made. type: integer format: int64 example: 101202 transId: description: | Transaction ID of the payment created in Uzum Bank. type: string format: uuid example: 5c398d7e-76b6-11ee-96da-f3a095c6289d status: description: | Payment transaction status. type: string enum: - FAILED example: FAILED transTime: description: > Time of payment transaction creation (Unix timestamp in milliseconds). type: integer format: int64 example: 1698361458054 confirmTime: description: > Time of payment transaction confirmation (Unix timestamp in milliseconds). oneOf: - type: integer format: int64 - type: 'null' example: 1698361458054 reverseTime: description: > Time of payment transaction cancellation (Unix timestamp in milliseconds). oneOf: - type: integer format: int64 - type: 'null' example: null errorCode: description: > Error code for payment transaction status retrieval. Possible values are described in the "Error Codes" section. type: string example: '10014' required: - errorCode