Skip to main content

Create an order


POST /api/integrator/order

This POST method is used to create an individual order in the Keepz system.

Request details

When sending request to Keepz, these four parameters must always be included in the body.

{
"identifier": "string",
"encryptedData": "string",
"encryptedKeys": "string",
"aes": true
}

identifier

  • Unique ID of the integrator in the Keepz system.
  • Provided by Keepz during the integration process.

encryptedData

  • Contains the actual request payload encrypted using a randomly generated symmetric key and IV (Initialization Vector).

encryptedKeys

  • Contains the AES key and IV used to encrypt encryptedData.

aes

  • Boolean flag indicating that the request uses AES-based symmetric encryption (needed for backward compatibility with older encryption methods).

For details on the encryption process, see the Encryption Guide documentation.

Parameters

The following parameters form the actual order payload. They must be included inside the encryptedData parameter, which is encrypted and passed in the request as shown above.

ParameterTypeRequiredDescriptionPossible valuesNote
amountnumberAmount of requested fundsMust be >0
receiverIdstring (UUID v4 format)Identifier of the money recipient in the Keepz system. Provided to the integrator by a Keepz representative.
receiverTypestringType of the money recipient in the Keepz system.BRANCH
integratorIdstring (UUID v4 format)Unique ID of the integrator in the Keepz system. Provided to the integrator by a Keepz representative.
integratorOrderIdstring (UUID v4 format)Unique ID of order in the integrator’s system.
currencystringCurrency displayed to the sender. GEL by default.GEL, USD, EUR
acquiringCurrencystringCurrency in which the payment is acquired (i.e., the currency withdrawn from the sender’s card).GEL, USD, EURThis field can only be sent by integrators who have been granted explicit permission by Keepz. For all others, it is configured on the Keepz side and not included in the request.
distributionCurrencystringCurrency in which funds are transferred to the receiver.GEL, USD, EURThis field can only be sent by integrators who have been granted explicit permission by Keepz. For all others, it is configured on the Keepz side and not included in the request.
tipReceiverIdstring (UUID v4 format)Identifier of the tip recipient in the Keepz system.This field can only be sent by integrators who have been granted explicit permission by Keepz, have tipping configured for their integration, and have been provided the tipReceiverId by a Keepz representative.
tipReceiverTypestringType of tip receiver in the Keepz system.BRANCH,USERThis field can only be sent by integrators who have been granted explicit permission by Keepz, have tipping configured for their integration, and have been provided the tipReceiverId by a Keepz representative.
successRedirectUristringThe web address of the business to redirect the user after successful payment.This field can only be sent by integrators who want a unique URL for each order and have been granted explicit permission by Keepz. Otherwise, you can provide a single default URL during integration, and Keepz will configure it for your account.
failRedirectUristringThe web address of the business to redirect the user if payment fails.This field can only be sent by integrators who want a unique URL for each order and have been granted explicit permission by Keepz. Otherwise, you can provide a single default URL during integration, and Keepz will configure it for your account.
callbackUristringThe web address of the business, which will be automatically called by the Keepz upon completion of the payment to provide the business with the payment details.This field can only be sent by integrators who want a unique URL for each order and have been granted explicit permission by Keepz. Otherwise, you can provide a single default URL during integration, and Keepz will configure it for your account. For details on the callback, see the documentation.
directLinkProviderstringBank card payment provider.BOG, TBC, CREDO, DEFAULTIf this parameter is not sent, the checkout page URL will be returned, where the sender can manually choose the payment method.If this parameter is sent, the payment method is pre-selected as bank card, and the user is redirected directly to the bank’s payment page.The integrator can pass the exact provider (e.g., BOG) to select a specific bank card provider. If the integrator only wants to pre-select the payment method without specifying the bank, they can send the value DEFAULT. In this case, the system will use the default bank configured in Keepz for the recipient. This field can only be sent by integrators who have been granted explicit permission by Keepz.
openBankingLinkProviderstringOpen banking payment provider.TBC, BOG, CREDO, LBIf this parameter is not sent, the checkout page URL will be returned, where the sender can manually choose the payment method. If this parameter is sent, it means the payment method is open banking, and the value specifies the provider bank (e.g., TBC). The user will be redirected directly to that bank’s open banking flow. This field can only be sent by integrators who have been granted explicit permission by Keepz.
cryptoPaymentProviderstringCryptocurrency payment provider.CITYPAYIf this parameter is not sent, the checkout page URL will be returned, where the sender can manually choose the payment method. If this parameter is sent, it means the payment method is cryptocurrency, processed through CityPay, and the value(e.g.CITYPAT_WALLET) specifies the method. The user will be redirected directly to the selected crypto payment flow. This field can only be sent by integrators who have been granted explicit permission by Keepz.
installmentPaymentProviderstringInstallment payment provider.CREDOIf this parameter is not sent, the checkout page URL will be returned, where the sender can manually choose the payment method.If this parameter is sent, it means the payment method is installment, and the value specifies the provider (e.g., CREDO). The user will be redirected directly to that provider’s installment payment flow. This field can only be sent by integrators who have been granted explicit permission by Keepz.
personalNumberstringPayer’s national identification number (for a physical or legal person).Mandatory only if installmentPaymentProvider is provided. For Georgian citizens, the value must be either exactly 9 digits or exactly 11 digits.
isForeignbooleanIndicates if the payer is a foreign citizen.TRUE,FALSEMandatory only if installmentPaymentProvider is provided.
validUntilstringDate and time until the order remains valid for payment.If provided, the order can be retried for successful payment multiple times until the specified expiration date and time. Format: "yyyy-MM-dd HH:mm:ss" (e.g., "2025-08-15 18:30:00"). This field can only be sent by integrators who have been granted explicit permission by Keepz.
languagestringLanguage for payment page.EN, IT, KAIf not provided, the default language configured in Keepz for the recipient will be used.
commissionTypestringSpecifies who pays the commission for the transaction.SENDER, RECEIVER, BOTH
saveCardbooleanWhether to save the payer’s card for future use.TRUE,FALSEIf set to true, the card will be securely tokenized after a successful payment. The tokenized card identifier (cardToken) will be included in the cardInfo object of the payment callback. This token can later be used in the cardToken field of future orders to charge the saved card without requiring the customer to re-enter card details.This field can only be used if directLinkProvider is provided and integrator have been granted explicit permission by Keepz.
cardTokenstring(UUID v4 format)Tokenized card identifier for saved payments.Returned in the cardInfo object of the payment callback when saveCard: true is passed during order creation. The integrator can provide this token in the cardToken field to charge the saved card without requiring the customer to re-enter card details. This field can only be used by integrators who have been granted explicit permission by Keepz.
subscriptionPlanobjectDetails for creating a recurring payment schedule when saving a card.This object can only be sent by integrators who have been granted explicit permission by Keepz. When provided, the system automatically charges the saved card according to the defined schedule. saveCard must be set to true, and amount must be 0. Object details are provided in the dedicated section below.
splitDetailsarray of objectsDefines how the order amount is split between multiple recipients.Details are provided in the dedicated section below.
orderPropertiesobjectAdditional contextual fields required for specific order payment types.Details are provided in the dedicated section below.

Complex Types Description

Subscription plan

ParameterTypeRequiredDescriptionPossible valuesNote
intervalstringThe unit of time between payments.MONTHLY, WEEKLY
intervalCountnumberNumber of intervals between payments.Example: interval = MONTHLY, intervalCount = 2 → one payment every 2 months. Example: interval = WEEKLY, intervalCount = 1 → one payment every week.
amountnumberPrice per interval.Must be greater than 0.
startDatestringFirst payment date.Must be today or a future date.If not provided, the first payment is processed immediately (default behavior).

Split details

Each object in the array represents one recipient and contains:

ParameterTypeRequiredDescriptionPossible valuesNote
receiverTypestringType of recipient in the Keepz system.BRANCH,USER,IBANBRANCH– a registered branch in Keepz. USER – a registered user in Keepz. IBAN – an external IBAN account (not registered in Keepz).
receiverIdentifierstringUnique identifier of the recipient.For BRANCH and USER, this is a UUID provided by Keepz. For IBAN, this is the IBAN number.
amountnumberAmount to send to this recipient.Must be greater than 0.

Order properties

orderProperties is an optional key–value map used to send extra order-specific information based on the configured order type (DEFAULT, TRAFFIC_FINE, TREASURY).

Structure

Key → An enumerated constant representing a specific additional property for the order. Possible values: PERSONAL_NUMBER, PAYER_NAME, PURPOSE, PERSONAL_NUMBER_OR_PASSPORT, IS_FOREIGN, SERVICE_PROVIDER_CODE, SERVICE_CODE, ENTITY_IDENTIFIER, CAR_IDENTIFIER, INVOICE_NUMBER_LABEL, DESCRIPTION, INTEGRATOR_PRODUCT_NAME, ABONENT_CODE

Value → An object describing the field content and whether the payer can edit it:

ParameterTypeRequiredDescriptionPossible valuesNote
valuestringThe actual content or data for the given key.
isEditablebooleanIndicates whether the payer can modify this value during checkout. Defaults to false if not provided.

Field requirements

  • M – Mandatory: Request will be rejected if missing or invalid.

  • O – Optional: Can be sent if available.

  • M (H) – Hidden: Must be sent, not shown to payer.

  • O (H) – Optional but hidden from payer.

  • – Not used for this payment type.

FieldDEFAULTTREASURYTRAFFIC FINE
PERSONAL_NUMBER-M-
PAYER_NAME-M-
PURPOSE-M-
IS_FOREIGN-M-
SERVICE_PROVIDER_CODE--M (H)
SERVICE_CODE--M (H)
ENTITY_IDENTIFIER--M
CAR_IDENTIFIER--M
INVOICE_NUMBER_LABELO--
DESCRIPTIONO--
INTEGRATOR_PRODUCT_NAMEO (H)--

Notes for developers

  • You must send only the fields relevant for the given order payment type.

  • If a field is marked Mandatory (M) and is missing or invalid, the API will reject the request.

  • Hidden (H) fields are still required in the request but are never displayed to the payer.

  • The isEditable property only affects what the payer can modify during checkout; it does not bypass server-side validation.

Examples

The following examples demonstrate only the minimum required fields for each use case.

👉 Developers can always include any other supported optional parameters in the same request if needed.

Examples

How to save a card

{
"amount": 10,
"receiverId": "90434fa9-46df-4c44-a4d1-da742ac815da",
"receiverType": "BRANCH",
"integratorId": "ce3a3476-a542-4e5d-a957-72fcd0e35d2c",
"integratorOrderId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"saveCard": true,
"directLinkProvider": "CREDO"
}

How to pay with a saved card

{
"amount": 10,
"receiverId": "90434fa9-46df-4c44-a4d1-da742ac815da",
"receiverType": "BRANCH",
"integratorId": "ce3a3476-a542-4e5d-a957-72fcd0e35d2c",
"integratorOrderId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"cardToken": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

How to create a subscription plan

{
"amount": 0,
"receiverId": "90434fa9-46df-4c44-a4d1-da742ac815da",
"receiverType": "BRANCH",
"integratorId": "ce3a3476-a542-4e5d-a957-72fcd0e35d2c",
"integratorOrderId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"saveCard": true,
"subscriptionPlan": {
"interval": "MONTHLY",
"intervalCount": 1,
"amount": 10,
"startDate": "2025-10-18T10:00:00.000Z"
}
}

How to create split order

{
"amount": 100,
"receiverId": "90434fa9-46df-4c44-a4d1-da742ac815da",
"receiverType": "BRANCH",
"integratorId": "ce3a3476-a542-4e5d-a957-72fcd0e35d2c",
"integratorOrderId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"splitDetails": [
{
"receiverType": "BRANCH",
"receiverIdentifier": "90434fa9-46df-4c44-a4d1-da742ac815da",
"amount": 75
},
{
"receiverType": "IBAN",
"receiverIdentifier": "GE34BG0000001234567890",
"amount": 25
}
]
}

How to create order for open w

{
"amount": 100,
"receiverId": "90434fa9-46df-4c44-a4d1-da742ac815da",
"receiverType": "BRANCH",
"integratorId": "ce3a3476-a542-4e5d-a957-72fcd0e35d2c",
"integratorOrderId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"openBankingLinkProvider": "CREDO"
}

How to create order for card

{
"amount": 100,
"receiverId": "90434fa9-46df-4c44-a4d1-da742ac815da",
"receiverType": "BRANCH",
"integratorId": "ce3a3476-a542-4e5d-a957-72fcd0e35d2c",
"integratorOrderId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"directLinkProvider": "DEFAULT"
}

How to create order for crypto

{
"amount": 100,
"receiverId": "90434fa9-46df-4c44-a4d1-da742ac815da",
"receiverType": "BRANCH",
"integratorId": "ce3a3476-a542-4e5d-a957-72fcd0e35d2c",
"integratorOrderId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"cryptoPaymentProvider": "CITYPAY"
}

How to create order for installment

{
"amount": 100,
"receiverId": "90434fa9-46df-4c44-a4d1-da742ac815da",
"receiverType": "BRANCH",
"integratorId": "ce3a3476-a542-4e5d-a957-72fcd0e35d2c",
"integratorOrderId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"installmentPaymentProvider": "CREDO",
"personalNumber": "6100*******",
"isForeign": false
}

How to create an expiring order

{
"amount": 100,
"receiverId": "90434fa9-46df-4c44-a4d1-da742ac815da",
"receiverType": "BRANCH",
"integratorId": "ce3a3476-a542-4e5d-a957-72fcd0e35d2c",
"integratorOrderId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"validUntil": "2026-10-18T09:51:14.387Z"
}

How to create an TREASURY order

{
"amount": 10,
"receiverId": "90434fa9-46df-4c44-a4d1-da742ac815da",
"receiverType": "BRANCH",
"integratorId": "ce3a3476-a542-4e5d-a957-72fcd0e35d2c",
"integratorOrderId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"orderProperties": {
"PURPOSE": {
"value": "exmaple",
"isEditable": true
},
"IS_FOREIGN": {
"value": "false",
"isEditable": false
},
"PAYER_NAME": {
"value": "Giorgi maisuradze",
"isEditable": false
},
"PERSONAL_NUMBER": {
"value": "6100*******",
"isEditable": false
}
}
}

How to create a TRAFFIC FINE order

{
"amount": 10,
"receiverId": "90434fa9-46df-4c44-a4d1-da742ac815da",
"receiverType": "BRANCH",
"integratorId": "ce3a3476-a542-4e5d-a957-72fcd0e35d2c",
"integratorOrderId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"orderProperties": {
"SERVICE_PROVIDER_CODE": {
"value": "PATROL",
"isEditable": false
},
"SERVICE_CODE": {
"value": "PATROL",
"isEditable": false
},
"ENTITY_IDENTIFIER": {
"value": "TEST123",
"isEditable": false
},
"CAR_IDENTIFIER": {
"value": "TT000TT",
"isEditable": false
}
}
}

Response details

✅ Success Response

If the request is valid, the API returns an encrypted payload:

{
"encryptedData": "string",
"encryptedKeys": "string",
"aes": true
}

encryptedData

  • Contains the actual response payload encrypted using a randomly generated symmetric key and IV (Initialization Vector).

encryptedKeys

  • Contains the AES key and IV used to encrypt encryptedData.

aes

  • Boolean flag indicating that the request uses AES-based symmetric encryption (needed for backward compatibility with older encryption methods).

For details on the decryption process, see the Encryption Guide documentation.

Inside encryptedData, the following parameters are available after decryption:

ParameterTypeDescription
integratorOrderIdstring (UUID v4 format)Unique ID of order in the integrator’s system passed during order creation.
urlForQRstringThe checkout page URL where the customer is redirected to select a payment method and complete the transaction. If the integrator specifies a payment method in advance, the customer is taken directly to complete the payment with that method.

❌ Error Response

If an error occurs, the response is returned without encryption (plain JSON):

{
"message": "You do not have permission to save card!",
"statusCode": 6031,
"exceptionGroup": 3
}
ParameterTypeDescription
messagestringError message. Details are provided in the dedicated section below.
statusCodenumberError status code. Details are provided in the dedicated section below.
exceptionGroupnumberError group. Details are provided in the dedicated section below.

Details can be found at Error Code Description.

Scheme

The diagram below illustrates the complete flow of creating an order in the Keepz system, from initial request to payment completion.

img