Online Payments API
The United Clearing Center (UCC) payment gateway. Banks and other agents use it to verify a customer against a service provider, check their debt, execute the payment, reconcile totals at the end of the business day, and register clearing orders — all through UCC's Extended Services System (ESS).
execute operation (plus bulkExecute)
taking a serviceId and a key/value parameter set. Bank-level operations —
reconciliation, payment listing, clearing registration, catalog sync — are classic
UCC web service operations defined by their own WSDL. Everything is encrypted
and signed per WS-Security.
reconcile, getPayments,
registerClearingOrder, getServiceProviders), examples show
logical content — exact wire-level element names will be confirmed in an upcoming
revision and are flagged inline as subject to confirmation.
Four NCI services per provider
Every service provider publishes a payment service; verify, debt, and cancel are optional and depend on the provider's own interface.
Business-day reconciliation
At day end the bank sends its totals via reconcile. The day always closes — CLOSED_NORMAL on a match, CLOSED_IRREGULAR on a mismatch.
Clearing registration
Banks perform clearing themselves and publish clearing orders to UCC for informational purposes — strongly recommended only for reconciled operations.
Signed & encrypted
Every SOAP envelope must be encrypted and signed per WS-Security, using an X.509 certificate registered with UCC.
How it works
UCC sits between service consumers (banks) and service providers (SPs) — mobile operators, internet providers, utilities, and so on. For each SP incorporated into UCC, up to four general services are published. Only the payment service is always present; the rest depend on what the SP's own interface supports:
| Service | Presence | Purpose |
|---|---|---|
| Payment | Always | Perform a payment for goods or services provided by the SP. |
| Verify | Optional | Verify the customer's abonent code in the SP's system. |
| Debt | Optional | Retrieve the customer's current debt for the SP's service. |
| Cancel | Optional | Cancel an already-performed payment. |
Most SPs provide debt (or verify) plus payment. Which services exist for a given SP — and the NCI codes to call them with — comes from the catalog (see getServiceProviders).
Integration flow
- Sync the catalog. Call
getServiceProvidersto load every SP's metadata: services, NCI service codes, bank accounts, treasury codes, and commission tables. Cache it and refresh periodically. - Identify the customer. Call the SP's verify or debt service through NCI
with the customer's
abonentCodeto confirm identity and, for debt, fetch the outstanding balance. - Take the payment. Call the SP's payment service through NCI with the
amount, currency, abonent code, your own unique
agentPaymentId, and yourbusinessDayId. UCC returns itspaymentIdand yourcommission. - Correct same-day mistakes. If the SP supports it, cancel a payment via NCI — possible only while the associated business day is still open.
- Close the day. Call
reconcilewith your business day ID and summary totals. UCC compares them against its own records and closes the day. - Register clearing. Generate clearing orders on your side and publish them
via
registerClearingOrder, associating the covered payment IDs — strongly recommended only for reconciled operations.
UCCException with an
error code and message — see Errors & fault codes.
Authentication & security
Online Payments does not use a separate API key or OAuth token. Instead, every SOAP envelope — NCI and UCC web services alike — must be encrypted and signed per the WS-Security specification, using an X.509 certificate registered with UCC for your agent account.
| Requirement | Algorithm |
|---|---|
| Key encryption | http://www.w3.org/2001/04/xmlenc#rsa-1_5 |
| Symmetric encryption | http://www.w3.org/2001/04/xmlenc#aes128-cbc |
| Encryption canonicalization | http://www.w3.org/2001/10/xml-exc-c14n# |
| Token reference | keyIdentifier (SKI) |
| Signature | http://www.w3.org/2000/09/xmldsig#rsa-sha1 |
| Signature canonicalization | http://www.w3.org/2001/10/xml-exc-c14n# |
The envelope may optionally carry a WS-Security <Timestamp> element.
The shape below follows the generic OASIS WS-Security standard (not specific to UCC's spec) — included so the algorithms above make sense in context.
Certificate exchange
Trust between your system and UCC is mutual: each side generates its own X.509 key pair, signs its outgoing messages with its own private key, and gives the other side its public certificate for verification/decryption. Nobody issues a certificate on the other party's behalf — you generate yours, UCC generates theirs, and you exchange the public halves. One certificate pair covers your agent account — the same keys sign both NCI calls and UCC web service calls.
- Generate your key pair. Create an X.509 key pair on your side, using
whatever standard tooling your team already uses (OpenSSL, Java
keytool, or similar), and store it in a keystore of your choice. The keystore itself — its type, your alias names, its password — is entirely internal to you; none of it is shared with or dictated by UCC. - Send UCC only your public certificate. Export the public certificate (not the keystore, not the private key) and send it to your UCC integration contact. This is the only artifact that crosses the boundary in this direction.
- Import UCC's public certificate into your own keystore once you receive it from UCC, so your side can verify/decrypt what UCC signs.
- Test. Confirm the exchange worked by having UCC synchronize your agent
record on their side — your integration contact will run this check with you.
A signed
getServiceProviderscall (no parameters, read-only) is a convenient first end-to-end smoke test. - Renewal follows the same flow: generate a new key pair, send the new public certificate to UCC, and import UCC's public certificate again if UCC has also rotated theirs.
SOAP conventions
Two contracts, two conventions. NCI calls (verify / debt / payment / cancel)
all go through one generic gateway operation, execute, defined by the
NCI WSDL — the concrete action is selected by the serviceId you pass.
UCC web services (reconcile, getPayments,
registerClearingOrder, getServiceProviders) are ordinary
WSDL-defined SOAP operations on a separate contract.
1258555, provider
code MGT) — but every serviceId, amount, commission, bank
code, account number, and identifier is an invented placeholder. Real
serviceId values, accounts, and commission tables come exclusively from
your getServiceProviders catalog sync; bank
codes and other agent-specific values come from your onboarding data. Never copy
example values into a live call.
NCI gateway — verified against the WSDL
| Operation | SOAPAction (Standard) | SOAPAction (WCF) |
|---|---|---|
| execute | urn:execute | urn:executeWCF |
| bulkExecute | urn:bulkExecute | urn:bulkExecuteWCF |
Target namespace (both variants): http://nci.connector.ess.azry.com/ ·
document/literal binding. See NCI endpoint variants for
the differences between the two endpoints and full wire examples.
serviceId you pass to execute — the value of
verifyServiceCode, debtServiceCode,
payServiceCode, or cancelServiceCode from the
Service object. Never hard-code these values; always
source them from a fresh catalog sync.
UCC web services
NCI endpoint variants
UCC publishes the NCI gateway in two flavors. Both live in the same namespace,
expose the same two operations, and take the same logical model —
serviceId plus key/value parameters. They differ only at the transport
layer, and the one difference that matters is how errors come back. Pick the
variant that matches your stack and use it consistently; the examples below switch
together.
| Standard | WCF | |
|---|---|---|
| Endpoint path | /nci/NCIServiceBean | /nci/NCIServiceWCFBean |
| SOAPAction | urn:execute, urn:bulkExecute | urn:executeWCF, urn:bulkExecuteWCF |
| execute errors | SOAP Fault with typed EssFault detail | No SOAP Fault — faultEntry elements inside the normal response |
| Success payload | Parameter elements | outParameter elements |
| Best for | Java (JAX-WS, CXF) and most SOAP toolkits — idiomatic fault handling | .NET / WCF clients that don't consume Java-style custom fault details well |
NCIServiceWCFBean, a failed execute still returns a
normal SOAP response — your toolkit will not raise a fault/exception. You must
inspect every executeResponse for faultEntry elements
before trusting outParameter values. Skipping this check is the classic
way to silently lose errors on this endpoint.
execute — wire examples
errorKey carries the NCI error code (see
Errors & fault codes); invalidParameter, when
present, names the offending input parameter.
bulkExecute — batching (both variants)
bulkExecute wraps multiple executeRequest items in one
call. Per-item outcomes come back in-band in both variants: each
ExecuteResult carries either parameter values or
faultEntries — a SOAP Fault is not used here even on the standard
endpoint, and results are positional (the n-th result answers the n-th request).
Environments
| Contract | Service path |
|---|---|
| NCI — Standard | /nci/NCIServiceBean |
| NCI — WCF | /nci/NCIServiceWCFBean |
| UCC web services | Not yet published |
?wsdl to the full NCI endpoint URL to fetch the machine-readable
contract for client code generation. Generate against the variant you intend to
call — the two WSDLs are not interchangeable (see
NCI endpoint variants).
soap:address is a relative path
(/nci/NCIServiceBean / /nci/NCIServiceWCFBean), not a full
URL. Use the environment-specific host you were given rather than whatever
your SOAP toolkit infers from the WSDL location.
reconcile, getPayments,
registerClearingOrder, getServiceProviders) are a separate
contract — they are not exposed by the NCI WSDLs. Their service path will be
published in an upcoming revision; request current details from your UCC integration
contact. Message-level confidentiality and integrity are provided by WS-Security
encryption and signature regardless of transport.
Errors & fault codes
There are two error families. NCI error codes are returned by the per-provider
verify / debt / payment / cancel calls and use the com.azry.ess.error.*
namespace; they can vary from SP to SP — the table below lists only the important
codes common to all SPs. On the wire the code travels in the errorKey
field, delivered as a SOAP Fault (EssFault) on the standard NCI endpoint
or as an in-band faultEntry on the WCF endpoint — see
NCI endpoint variants. UCC error codes are thrown
by the UCC web services as a UCCException carrying an error code and
message.
NCI error codes
| Error code | Meaning & handling |
|---|---|
| General | General error — for example an RDBMS or misconfiguration problem. |
| Abonent_not_found | No abonent with the given code exists in the SP's system. Re-check the code with the customer. |
| Pre_payment_error | Thrown during payment, before the payment message was sent to the SP — for example, the SP was unreachable. The guide guarantees the payment was not performed, so resubmitting is safe. |
| Non_unique_agent_payment_id | A payment with this agentPaymentId already exists — thrown to prevent duplicate transfers. Use getPayment to check the status of the original. |
| Payment_network_failure | Communication error after the payment message may have reached the SP — the payment state is unknown. See the grey state. |
| Validation_failure | The payment input is not valid for the service. Fix the request; do not resubmit as-is. |
Full code values carry the com.azry.ess.error. prefix, e.g.
com.azry.ess.error.Abonent_not_found.
agentPaymentId — that risks a double charge. Park the transaction and
escalate.
UCC error codes (UCCException)
| Error code | Service | Meaning |
|---|---|---|
| SYSTEM_INTERNAL_ERROR | All | UCC internal system error (e.g. RDBMS or misconfiguration). |
| UNKNOWN_BUSINESS_DAY | reconcile | No business day found for the provided agent business ID. |
| UNKNOWN_SERVICE_PROVIDER | registerClearingOrder | No service provider found for the given code. |
| UNKNOWN_PAYMENT | registerClearingOrder, cancel | No payment found for the given agent payment ID. |
| ILLEGAL_CLEARING_PAYMENT | registerClearingOrder | Payment is already associated with another clearing order, or is in the wrong state (e.g. canceled). |
| ILLEGAL_CLEARING_CURRENCY | registerClearingOrder | Payment and clearing currencies do not match. |
| ILLEGAL_CLEARING_SP_CODE | registerClearingOrder | Payment and clearing service provider codes do not match. |
| WRONG_CLEARING_AMOUNT | registerClearingOrder | Clearing amount and payments summary amount do not match. |
| NON_UNIQUE_BANK_ORDER_NUMBER | registerClearingOrder | A clearing order with this bank order number is already registered. |
| COMMISSION_CALCULATION_ERROR | getCommission | No matching service commission record could be found. |
| WRONG_CANCEL_AMOUNT | cancel | Cancel amount does not match the original payment. |
| WRONG_CANCEL_CURRENCY | cancel | Cancel currency does not match the original payment. |
| PAYMENT_ALREADY_CANCELED | cancel | The payment is already canceled. |
| PAYMENT_BUSINESS_DAY_CLOSED | cancel | The payment's business day is already closed — reversal not possible. |
Fault structure
The guide defines UCCException as an error code plus a message. Branch
on the code, not the human-readable message. The exact XML shape of the fault
detail comes from the WSDL — the example below is illustrative:
Validates a customer's abonent code in the service provider's system. Optional —
published only if the SP's interface supports it. Invoke via NCI using the service's
verifyServiceCode.
Input parameters
| Parameter key | Type | Description |
|---|---|---|
| abonentCode | in | Abonent identifier in the SP system, e.g. 1258555 for a Telasi client required |
Output parameters
| Parameter key | Type | Description |
|---|---|---|
| abonentDescription | out | Optional composite description, e.g. Irakli Gobejishvili, Pekinis #12 |
Retrieves the customer's outstanding debt in the service provider's system.
Optional — published only if the SP's interface supports it. Invoke via NCI using
the service's debtServiceCode.
Input parameters
| Parameter key | Type | Description |
|---|---|---|
| abonentCode | in | Abonent identifier in the SP system required |
| payerIdNumber | in | Payer personal number, e.g. 00000000001 (added in v1.7) |
Output parameters
| Parameter key | Type | Description |
|---|---|---|
| abonentDebt | out | Abonent debt in the SP system |
| abonentDescription | out | Composite description, e.g. Irakli Gobejishvili, Pekinis #12 |
Executes the payment. Always published for every SP. Invoke via NCI using the
service's payServiceCode.
Input parameters
| Parameter key | Required | Description |
|---|---|---|
| amount | true | Payment amount |
| currency | true | Payment currency code (ISO 4217) |
| abonentCode | true | Abonent identifier in the SP system |
| agentPaymentId | true | Payment unique identifier provided by the service consumer (i.e. bank) |
| businessDayId | true | "Business day" unique identifier provided by the service consumer |
| paymentChannel | true | Payment channel, e.g. ATM, ServiceCenter, IBanking |
| paymentPoint | true | Payment point code, e.g. the bank's service center code |
| srcBankCode | true | Source bank code (service consumer bank code) |
| bankOrderDocumentNumber | false | Number of this payment order in the bank |
| paymentPurpose | false | The purpose of the payment |
| additionalInfo | false | Additional information |
| payerName | false | Name of the payer |
| payerIdentificationNumber | false | Personal number or identification number of the payer |
| treasuryCode | false | Treasury code of the payment (e.g. police payments carry one) |
| payerAccountNumber | — | Payment account number requiredness not stated in the guide |
| beneficiaryName | — | Beneficiary name requiredness not stated in the guide |
Output parameters
| Parameter key | Type | Description |
|---|---|---|
| paymentId | out | Payment unique identifier assigned by the UCC system |
| commission | out | Payment commission dedicated to the service consumer |
Possible NCI errors
Pre_payment_error Non_unique_agent_payment_id Payment_network_failure Validation_failure Abonent_not_found General
On the wire, these parameters travel as key/value pairs
inside a single execute call — see
NCI endpoint variants for the full envelope.
agentPaymentId is your deduplication key — choose a stable, unique value
per payment on your side. Resending the same ID triggers
Non_unique_agent_payment_id instead of a second transfer; check the
original's fate via getPayment before doing anything else.
Cancels an already-performed payment. Optional — published only if the SP's interface
supports it. Invoke via NCI using the service's cancelServiceCode.
Input parameters
| Parameter key | Type | Description |
|---|---|---|
| agentPaymentId | in | The unique identifier you provided during the original payment required |
| amount | in | Payment amount — for validation purposes |
| currency | in | Payment currency code (ISO 4217) — for validation purposes |
Possible UCC errors
UNKNOWN_PAYMENT WRONG_CANCEL_AMOUNT WRONG_CANCEL_CURRENCY PAYMENT_ALREADY_CANCELED PAYMENT_BUSINESS_DAY_CLOSED
The guide defines no output parameters for cancel — treat a fault-free response as
success and confirm final state via payment status (CANCELLING →
CANCELED). To be verified against the WSDL.
PAYMENT_BUSINESS_DAY_CLOSED once the
payment's business day has been closed by reconciliation — plan customer-facing
refund flows accordingly.
Closes a business day by exchanging summary totals with UCC. Send your business day ID plus the count and summary amount of successfully performed payments; UCC responds with its own expected figures and the resulting day status.
Request parameters
| Field | Type | Description |
|---|---|---|
| businessDayId | string(20) | Unique identifier of the bank's "business day" required |
| paymentAmount | float | Summary amount of successfully performed payments within the day. May contain payments in different currencies. |
| paymentsNumber | float | Number of successfully performed payments within the day. |
Response
| Field | Type | Description |
|---|---|---|
| return | ReconciliationResult | Day status plus UCC's expected totals — see ReconciliationResult |
Possible faults
UNKNOWN_BUSINESS_DAY SYSTEM_INTERNAL_ERROR
paymentsAmount / paymentsNumber and the result type
ReconcilationResult (sic), while its tables say
paymentAmount / expectedPaymentAmount and
"ReconsiliationResult". The examples above follow the diagrams; the WSDL will settle
the exact element names.
CLOSED_NORMAL if the figures match,
CLOSED_IRREGULAR if they don't. An irregular close triggers manual
investigation by UCC and bank staff, after which a UCC officer may move the day to
CLOSED_AFTER_REVISION.
Retrieves all payments associated with a business day — useful for investigating an irregular reconciliation or rebuilding your local ledger.
Request parameters
| Field | Type | Description |
|---|---|---|
| businessDayId | string(20) | The business day to list payments for — the single input parameter required |
Response
| Field | Type | Description |
|---|---|---|
| return | Payment[] | List of Payment objects associated with the business day |
Publishes a clearing order on the UCC server and associates payments to it. Clearing with SPs is performed by banks themselves — registration on UCC is for informational purposes, giving the SP a clear view of performed or upcoming funds transfers. It is strongly recommended to register clearing only for reconciled operations.
Request parameters
| Field | Type | Description |
|---|---|---|
| clearingOrder | ClearingOrder | The clearing order document — see ClearingOrder required |
| paymentIds | string(20)[] | UCC payment IDs covered by this clearing order (1..∞) required |
Possible faults
UNKNOWN_SERVICE_PROVIDER UNKNOWN_PAYMENT ILLEGAL_CLEARING_PAYMENT ILLEGAL_CLEARING_CURRENCY ILLEGAL_CLEARING_SP_CODE WRONG_CLEARING_AMOUNT NON_UNIQUE_BANK_ORDER_NUMBER
WRONG_CLEARING_AMOUNT means the clearing order's amount
must equal the summary amount of the referenced payments — recalculate before
resubmitting.
Returns the full catalog of service providers incorporated into UCC — company details, bank accounts, treasury codes, provided services with their NCI codes, and commission tables. Takes no parameters.
Response
| Field | Type | Description |
|---|---|---|
| return | ServiceProvider[] | List of ServiceProvider objects |
serviceComissions list on
each service is what the commission algorithm runs against.
Sync regularly so codes, accounts, and fees stay current.
Two further operations are referenced by the Integration Guide but not defined in it:
| Operation | Referenced by | Purpose (as referenced) |
|---|---|---|
| getPayment | Non_unique_agent_payment_id handling | Fetch the status of a single payment — the recommended way to resolve duplicate-ID responses. |
| getCommission | COMMISSION_CALCULATION_ERROR | Server-side commission calculation for a prospective payment. |
Payment
The full payment record as stored by UCC — returned by getPayments.
| Property | Type | Description |
|---|---|---|
| paymentId | string(20) | Payment unique identifier within the UCC system |
| agentPaymentId | string(20) | Payment unique identifier provided by the service consumer (i.e. bank) |
| serviceCode | string(10) | Service unique code within the service provider |
| serviceProviderCode | string(10) | Service provider unique code |
| abonentCode | string(40) | Customer's abonent code in the SP |
| businessDayId | string(20) | "Business day" unique identifier provided by the service consumer |
| amount | float | Payment amount |
| currency | string(3) | Payment currency code (ISO 4217) |
| commission | float | Payment commission dedicated to the service consumer |
| paymentTime | dateTime | Payment time |
| paymentChannel | string(20) | Payment channel, e.g. ATM, ServiceCenter, IBanking |
| paymentPoint | string(20) | Payment point code, e.g. the bank's service center code |
| paymentPurpose | string(150) | Payment purpose |
| additionalInfo | string(250) | Additional information |
| payerName | string(50) | Payer name |
| payerIdentificationNumber | string(50) | Legal entity identification code or individual person's personal number |
| treasuryCode | string(9) | Treasury code |
| clearingOrderDocumentNumber | string(20) | Bank's clearing order number |
| srcBankCode | string(10) | Source bank code (service consumer bank code) |
| dstBankCode | string(10) | Destination bank code (service provider bank code) |
| status | enum | See Payment statuses |
| errorCode | string(50) | Error code if the payment failed |
| errorMessage | string(200) | Error message if the payment failed |
ReconciliationResult
Returned by reconcile. (Spelled ReconcilationResult in the guide's schema diagram — verify against the WSDL.)
| Property | Type | Description |
|---|---|---|
| businessDayStatus | enum | See Business day statuses |
| expectedPaymentAmount | float | UCC's expected payments summary amount within the reconciled day (diagram: expectedPaymentsAmount) |
| expectedPaymentsNumber | float | UCC's expected payments count within the reconciled day |
ClearingOrder
The clearing order document passed to registerClearingOrder.
| Property | Type | Description |
|---|---|---|
| bankOrderDocumentNumber | string(20) | Unique identifier (number) of the clearing order document generated in the bank |
| serviceProviderCode | string(20) | Unique identifier of the service provider — destination of the funds transfer |
| amount | float | Amount of transfer |
| currency | string(3) | Currency of transfer |
| paymentPurpose | string(150) | Purpose of the payment |
| additionalInfo | string(250) | Additional information |
| payerName | string(50) | Payer name |
| payerIdentificationNumber | string(50) | Legal entity identification code or individual person's personal number |
| treasuryCode | string(9) | Treasury code |
| clearingTime | dateTime | Clearing order generation time |
| receiverBankCode | string(10) | Receiver bank code |
| receiverBankAccount | string(20) | Receiver bank account |
ServiceProvider
Top-level catalog record returned by getServiceProviders.
| Property | Type | Description |
|---|---|---|
| code | string(20) | Unique identifier of the SP, e.g. MGT for Magti |
| name | string(50) | Name of the SP |
| nameEn | string(50) | English name of the SP |
| shortName | string(20) | Short name of the SP |
| contactPerson | string(50) | Contact person |
| phone | string(50) | Phone number |
| fax | string(50) | Fax number |
| string(50) | ||
| address | string(100) | Address |
| registrationCode | string(9) | Registration code |
| serviceProviderAccounts | 0..∞ | List of SP accounts — see ServiceProviderAccount |
| services | 0..∞ | List of the SP's provided services — see Service |
ServiceProviderAccount
| Property | Type | Description |
|---|---|---|
| bankCode | string(10) | Bank code |
| bankAccountNumber | string(20) | Bank account number |
| bankAccountName | string(50) | Bank account name |
| active | bool | Indicates whether the account can still be used |
| TreasuryCodes | 1..∞ | List of treasury codes — see TreasuryCode |
TreasuryCode
| Property | Type | Description |
|---|---|---|
| code | string(9) | Treasury code |
| description | string(250) | Description of the treasury code |
Service
A single service provided by an SP. The four *ServiceCode fields are the
identifiers you pass to NCI to invoke the corresponding call.
| Property | Type | Description |
|---|---|---|
| serviceCode | string(10) | Unique identifier of the service within the SP, e.g. BAL for Magti Bali payment |
| description | string(50) | Textual description of the service |
| descriptionEn | string(50) | English textual description of the service |
| verifyServiceCode | — | NCI code for the verify service type not stated in the guide |
| debtServiceCode | string(20) | NCI code for the debt service |
| payServiceCode | string(20) | NCI code for the payment service |
| cancelServiceCode | string(20) | NCI code for the cancellation service |
| abonentDetailsPattern | string(50) | No description in the guide — confirm semantics with UCC |
| active | bool | Indicates whether the service can still be consumed |
| allAgentAccounts | bool | Indicates whether all SP accounts can be selected for the service |
| serviceAccounts | 1..∞ | Accounts selectable for this service — see ServiceProviderAccount |
| serviceIcon | byte(N) | Icon associated with the SP |
| serviceComissions | 1..∞ | List of ServiceCommission objects |
| oneTimePayment | bool | One-time payment — such a payment is not saved in the payment list |
| immediateTransaction | bool | Immediate transaction — payment clearing takes place immediately |
| additionalInfo | bool | Indicates whether the additional-information field will be present in the clearing order |
| transferCommissions | bool | If true, transfer commissions are included in the clearing |
| phoneAbonentCode | bool | Whether the abonent code is a phone number |
serviceComissions (one "m") while the schema
diagram shows tns:serviceCommissions. The diagram also shows
tns:transferCommissions. The WSDL will settle the wire names — until
then, expect either spelling.
ServiceCommission
A single row of a service's commission table — the input to the commission algorithm.
| Property | Type | Description |
|---|---|---|
| minAmount | float | Payment amount from (inclusive) |
| maxAmount | float | Payment amount to (exclusive) |
| currency | string(3) | Payment currency |
| serviceConsumerCode | string(10) | Service consumer (bank) code |
| paymentChannel | string(20) | Payment channel |
| commissionFixed | float | Fixed commission |
| commissionPercent | float | Commission percent |
| minCommission | float | Lower bound — the commission is never less than this |
| maxCommission | float | Upper bound — the commission is never greater than this |
Payment statuses
Lifecycle statuses of a payment within UCC:
| Status | Kind | Meaning |
|---|---|---|
| PERFORMING | Non-terminal | Payment in progress — e.g. request sent to the SP, no response yet. |
| PERFORMED | Terminal | Payment performed successfully. |
| REJECTED | Terminal | Payment rejected by the SP. |
| FAILED | Grey state | Communication failure — the payment's state in the SP is unknown. Manual investigation between SP and UCC staff is the only way to resolve it. |
| CANCELLING | Non-terminal | Cancellation in progress — request sent to the SP, no response yet. |
| CANCELED | Terminal | Cancellation performed successfully. |
Business day statuses
| Status | Meaning |
|---|---|
| OPENED | Day is active — payments and cancellations are accepted. |
| CLOSED_NORMAL | Exchanged summary data matched during reconciliation; day finalized. |
| CLOSED_IRREGULAR | Summary data mismatched; the day still closed, but manual investigation by UCC and bank staff follows. |
| CLOSED_AFTER_REVISION | Set by a UCC officer after the manual investigation completes. |
Payment lifecycle & the grey state
- PERFORMING. Your NCI payment call is in flight to the SP. If the call
returns normally you receive
paymentIdandcommissionand the payment lands inPERFORMED; an SP-side refusal lands it inREJECTED. - Failure before the SP.
Pre_payment_errorguarantees the payment message never left for the SP — nothing was performed, so you may safely resubmit (keep the sameagentPaymentIdonly if the original call produced no payment record; onNon_unique_agent_payment_id, check viagetPaymentfirst). - Failure after the SP — FAILED.
Payment_network_failuremeans the connection dropped and UCC cannot tell whether the SP performed the payment. The status is a genuine unknown; the guide prescribes manual investigation (telephone or email between SP and UCC staff) as the only resolution path. - Cancellation. Where the SP supports it, cancel moves the payment through
CANCELLINGtoCANCELED— but only while the business day is stillOPENED.
FAILED payment with a fresh agentPaymentId can
double-charge the customer if the original did reach the SP. Park it, surface it to
operations, and resolve through the manual investigation channel.
Business day & clearing
- Open a day. Choose a unique
businessDayIdand stamp it on every payment you take. The day isOPENEDfor as long as you keep transacting under it. - Keep totals as you go. You will need the count and summary amount of successfully performed payments for reconciliation.
- Reconcile at day end. Call
reconcile. The day closes no matter what:CLOSED_NORMALon a match,CLOSED_IRREGULARon a mismatch. UsegetPaymentsto pull UCC's view of the day when investigating an irregular close. - Clear reconciled operations. Generate clearing orders in your systems and
register them via
registerClearingOrder, listing the coveredpaymentIds. The guide strongly recommends clearing only reconciled operations.
immediateTransaction: true in the catalog are cleared
immediately — factor them out of your end-of-day clearing batch logic.
Commission calculation
For each consumed payment, UCC calculates the commission dedicated to the service consumer (i.e. the bank) from the service's commission table (shipped with the catalog — see ServiceCommission).
The record is matched on amount range, currency, payment channel, and consumer code.
If no record matches, paymentChannel is excluded from the query first,
then serviceConsumerCode — so provider-wide defaults act as fallbacks
for channel- or bank-specific rows. If no record can be found at all,
getCommission fails with COMMISSION_CALCULATION_ERROR.