Developer Docs
v1.2
SOAP / WS-Security
Notification Service · v1.2

Notification Service API

A SOAP web service that lets agents subscribe to a customer's payment obligations (utility bills, fines, tariffs, and balance top-ups) tracked by UCC, and retrieve newly generated notifications so they can alert customers — for example, by SMS — when a debt appears.

How to read these docs The service is SOAP 1.1, defined by a WSDL contract — not REST/JSON. Every operation below shows the SOAP request/response shape and maps directly to the WSDL portType. If you're generating a client, point your SOAP toolkit (JAX-WS, wsimport, zeep, etc.) at the WSDL URL in Environments.

Five operations

Subscribe, batch subscribe, unsubscribe, batch unsubscribe, and poll for generated notifications. No push/webhook mode — agents pull on their own schedule.

Nightly processing

UCC re-checks every active subscription roughly once a day and generates a new notification only when there's something to report.

Signed & encrypted

Every SOAP envelope must be encrypted and signed per WS-Security, using an X.509 certificate registered with UCC.

Cursor-based polling

getNotifications uses a LastId cursor, so agents only ever fetch what's new.

How it works

A subscribed notification is a standing instruction telling UCC "let me know about this service + customer combination." UCC's processing engine periodically checks that combination and, when it finds something worth reporting, produces a notification — the actual event record your agent fetches and acts on (e.g. by texting the customer that they have a bill due).

Subscription types

Every subscription is registered against a service that supports one of the following patterns:

TypeBehaviorTypical example
CHECK_DEBT Standard case — a debt appears on a given date and stays flat until paid. Utility bill (e.g. Telmico)
GET_SEVERAL_DEBTS Grouped case — multiple distinct debts can appear over time for the same subscriber. Traffic police fines by personal number
TARIFF_PRE_PAYMENT Notifies ahead of a recurring tariff charge. Subscription-style tariffs
FIXED_PAYMENT Generates a notification for a fixed amount on a defined schedule (CronExpression). Fixed recurring payment plans
BALANCE_PRE_PAYMENT Provider returns remaining balance; UCC notifies once it drops below a trigger amount. Reserved for provider-initiated payment flows. Prepaid mobile/internet balance (e.g. Silknet, Caucasus)
CHECK_DATE_EXPIRATION_REMAINDER Notifies ahead of a fixed expiration date, independent of any amount. Document/license renewal reminders

Prerequisites on UCC's side

A service must be enabled for notifications in UCC's internal configuration before any agent can subscribe to it — this is reflected by notificationSubscriptionAllowed: true on that service when you sync your service catalog. If you try to subscribe to a service that hasn't been enabled, the call fails with SUBSCRIPTION_NOT_SUPPORTED. Ask your UCC integration contact to confirm which services are notification-enabled before building against them.

Authentication & security

Notification Service does not use a separate API key or OAuth token. Instead, every SOAP envelope must be encrypted and signed per the WS-Security specification, using an X.509 certificate registered with UCC for your agent account.

RequirementAlgorithm
Key encryptionhttp://www.w3.org/2001/04/xmlenc#rsa-1_5
Symmetric encryptionhttp://www.w3.org/2001/04/xmlenc#aes128-cbc
Encryption canonicalizationhttp://www.w3.org/2001/10/xml-exc-c14n#
Token referencekeyIdentifier (SKI)
Signaturehttp://www.w3.org/2000/09/xmldsig#rsa-sha1
Signature canonicalizationhttp://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.

Signed & encrypted envelope — generic WS-Security shapeCopy
The request/response bodies shown throughout this reference are the decrypted, logical content of the SOAP body for readability — in transit, the body is encrypted as described above.

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.

  • 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.
  • 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.
Keystore configuration Alias names and the keystore/key password are local to your own system — UCC never sees or requires a specific value for either. Pick whatever your own naming and secrets-management conventions call for. The only thing UCC actually needs from you is the public certificate file itself.

SOAP conventions

Every operation lives under a single WSDL namespace and has its own SOAPAction. If you're generating a client from the WSDL, these are handled for you automatically — this table is for anyone wiring up requests by hand.

OperationSOAPAction
addNotificationSubscriptionhttp://ucc.ess.azry.com/addNotificationSubscription
addBatchNotificationSubscriptionshttp://ucc.ess.azry.com/addBatchNotificationSubscriptions
deleteNotificationSubscriptionhttp://ucc.ess.azry.com/deleteNotificationSubscription
deleteBatchNotificationSubscriptionshttp://ucc.ess.azry.com/deleteBatchNotificationSubscriptions
getNotificationshttp://ucc.ess.azry.com/getNotifications

WSDL target namespace: http://ucc.ess.azry.com

Element qualification The schema marks most fields form="qualified", meaning they belong to the http://ucc.ess.azry.com namespace on the wire — not just the top-level operation element. If you're hand-building XML rather than using a WSDL-generated client, qualify elements explicitly, for example:
Fully namespace-qualified requestCopy

The other request/response examples throughout this reference omit the tns: prefix for readability — assume it applies unless you're generating your client straight from the WSDL, in which case your toolkit handles this for you.

Environments

EnvironmentEndpointWSDL
Test http://92.241.79.133:8080/notifications-service-v2/UCCNotificationsService ...UCCNotificationsService?WSDL
Production http://service.ucc.ge/notifications-service-v2/UCCNotificationsService ...UCCNotificationsService?WSDL
Legacy transport note The WSDL binding uses SOAP over HTTP. Message-level confidentiality and integrity are provided by WS-Security encryption and signature. Production network access and transport requirements must be confirmed with UCC before go-live.
Relative service address The WSDL's own soap:address is a relative path (/notifications-service-v2/UCCNotificationsService), not a full URL. Use the environment-specific host from the table above rather than whatever your SOAP toolkit infers from the WSDL location.
WSDL Append ?WSDL to either endpoint above to fetch the machine-readable contract for client code generation.

Errors & fault codes

Errors are returned as a standard SOAP Fault. Distinguish error cases using the fault code, not the fault string (which is intended for humans, not branching logic).

Fault codeMeaningThrown by
GENERAL_ERRORUnspecified error. Treat as retryable after investigation.Any operation
NON_UNIQUE_SUBSCRIPTIONagentSubscriptionId is already in use by another active subscription.addNotificationSubscription
SUBSCRIPTION_NOT_SUPPORTEDThe target service hasn't been enabled for notifications in UCC's configuration.addNotificationSubscription
NOTIFICATION_SERVICE_TYPE_NOT_SUPPORTEDThe service doesn't support the requested NotificationServiceType.addNotificationSubscription
DUPLICATE_SUBSCRIPTIONAn equivalent subscription (same service + abonent) already exists.addNotificationSubscription

Fault structure

The fault code isn't in the generic SOAP <faultstring> — it's in a typed detail block, UCCNotificationsServiceException. Parse this, not the human-readable string, for branching logic:

SOAP Fault detailCopy
addNotificationSubscription operation

Registers a new subscribed notification for a service + abonent (customer) pair.

Request parameters

FieldTypeDescription
NotificationSubscriptionNotificationSubscriptionSubscription parameters required

Response

FieldTypeDescription
returnAddNotificationSubscriptionResult{Id, AgentSubscriptionId}Id is UCC's internal subscription id

Possible faults

NON_UNIQUE_SUBSCRIPTION SUBSCRIPTION_NOT_SUPPORTED NOTIFICATION_SERVICE_TYPE_NOT_SUPPORTED DUPLICATE_SUBSCRIPTION

Request body (logical, pre-encryption)Copy
Response bodyCopy
Idempotency AgentSubscriptionId is your idempotency key. Choose a stable, unique value per subscription on your side — resending the same call with the same ID against an existing subscription returns NON_UNIQUE_SUBSCRIPTION rather than silently duplicating it.
deleteNotificationSubscription operation

Cancels an active subscription. UCC stops checking for new debts/events on this pair.

Request parameters

FieldTypeDescription
AgentSubscriptionIdStringAgent subscription unique id required
Request body (logical, pre-encryption)Copy
Response body — empty on successCopy

The WSDL defines this as an empty sequence — absence of a SOAP Fault is the success signal, there's no body to inspect.

Auto-expiry UCC also auto-cancels a subscription on its own if it produces no notifications for longer than the configured idle-period threshold, or once EndDate passes — so you don't strictly need to clean up short-lived subscriptions manually, but doing so keeps your subscription list accurate.
addBatchNotificationSubscriptions operation

Batch version of addNotificationSubscription — registers multiple subscriptions in one call.

Request parameters

FieldTypeDescription
NotificationSubscriptionsList<NotificationSubscription>One or more subscriptions

Response

FieldTypeDescription
return.AddSubscriptionResults.AddSubscriptionResultList<AddNotificationSubscriptionResult>One result per submitted subscription, same order
Request body (logical, pre-encryption)Copy
Partial failure The batch call reports results per item rather than failing the whole batch on one bad entry — check each AddSubscriptionResult individually rather than assuming success from the absence of a SOAP Fault.
deleteBatchNotificationSubscriptions operation

Batch version of deleteNotificationSubscription.

Request parameters

FieldTypeDescription
AgentSubscriptionIdsList<String>One or more agent subscription ids to cancel
Request body (logical, pre-encryption)Copy
Response body — empty on successCopy

Same as the single-delete operation — empty sequence in the WSDL, no per-item result (unlike the batch add operation, which does report per item).

getNotifications operation

Fetches notifications generated since the last one your agent processed. This is a pull operation — poll it on your own schedule (UCC generates new notifications roughly once per day per subscription).

Request parameters

FieldIn/OutTypeDescription
LastIdInLongThe last notification id your agent has already fetched. Send 0 on first call.
returnOutList<Notification>Newly generated notifications since LastId — wire element is literally named return
Request bodyCopy
Response bodyCopy
Cursor discipline Persist the highest Id you've successfully processed and send it back as LastId on the next call. If a batch fails partway through processing on your side, replay from the last fully processed id rather than the last fetched id, to avoid dropping notifications.

Data types

NotificationSubscription

PropertyTypeDescription
AgentSubscriptionIdStringAgent subscription unique id required
ServiceCodeStringService code required
AbonentCodeStringAbonent (customer-facing account) code required
StartDateDateTimeTime after which notifications will be generated
EndDateDateTimeTime until which notifications will be generated
NotificationServiceTypeNotificationServiceTypeType of notification being registered — see enum
PriorityLongLower value = generated before other notifications. 0 is the highest priority.
CustomerIdStringCustomer identifier in your (the agent's) system
AccountNumberStringCustomer account number in your system
MaxPaymentAmountDecimalCeiling amount. If a notification's amount exceeds this, behavior follows AmountLimitExceedAction.
AmountLimitExceedActionAmountLimitExceedActionWhat to do when MaxPaymentAmount is exceeded — see enum
CronExpressionStringSchedule, required for FIXED_PAYMENT type
PaymentAmountDecimalAmount used when generating notifications for FIXED_PAYMENT and BALANCE_PRE_PAYMENT
TriggerAmountDecimalBalance threshold that triggers generation for BALANCE_PRE_PAYMENT
ParamsNotificationServiceOverridableParamsOptional per-subscription overrides for the default processing windows — see type

NotificationServiceOverridableParams

Set on NotificationSubscription.Params to override the service-level defaults for this specific subscription. All fields optional — omit to inherit the default.

PropertyTypeDescription
DuplicateDebtIgnoreDaysLongSuppress a repeat notification for the same debt amount within this many days
DoNotFetchDebtAfterGenerationDaysLongPause re-checking this subscription for this many days after a notification is generated
MaxAllowedNoNotificationPeriodDaysLongAuto-expire the subscription if it generates nothing for this many days
TariffPaymentPeriodDaysLongPeriod length used for TARIFF_PRE_PAYMENT subscriptions
TariffPaymentControlDaysLongHow many days before the tariff period ends to generate the notification
OneDayNotificationsGenerationCountLongCap on how many notifications this subscription can generate in a single day
IgnoreOldDebtsDaysLongIgnore debts older than this many days when checking
DueDatesStringService-specific due-date configuration (format defined per service)

AddNotificationSubscriptionResult

PropertyTypeDescription
IdLongUCC's internal id for the created subscription
AgentSubscriptionIdStringEchoes back the id you submitted

Notification

PropertyTypeDescription
IdLongNotification id in UCC. Save it — you'll pass it back as LastId on future getNotifications calls.
AgentSubscriptionIdStringAgent subscription unique id
ServiceCodeStringService code
AbonentCodeStringAbonent code
GenerationTimeDateTimeTime the notification was generated
DueDateDateTimePayment due date, for service providers that return it
DebtDecimalCurrent amount to pay
MessageStringFree-text message, reserved for informative use
customerIdStringCustomer identifier in your system (lowercase on the wire)
accountNumberStringCustomer account number in your system (lowercase on the wire)
NotificationTypeNotificationTypeWhat kind of event this notification represents — see enum. Not to be confused with NotificationServiceType on the subscription.
AdditionalParamsMap<String,String>Always present per the WSDL (no minOccurs="0" on the element itself), but may contain zero entry items

NotificationType enum

Describes the notification event itself — distinct from NotificationServiceType, which describes the subscription that produced it.

ValueMeaning
DEBT_NOTIFICATIONA debt/event was found — the normal case
DEBT_ANNULMENTA previously notified debt was cancelled/annulled

NotificationServiceType enum

ValueMeaning
CHECK_DEBTPay debt amount
GET_SEVERAL_DEBTSSeveral distinct debts fetched per subscriber, e.g. police fines by personal number
TARIFF_PRE_PAYMENTTariff pre-payment
FIXED_PAYMENTFixed amount on a configured schedule
BALANCE_PRE_PAYMENTBalance pre-payment. Reserved for future use, where the service provider initiates the payment.
CHECK_DATE_EXPIRATION_REMAINDERNotifies ahead of a fixed expiration date (e.g. document/license renewal)

AmountLimitExceedAction enum

ValueMeaning
PROCESSGenerate the notification anyway, even past MaxPaymentAmount
IGNORESuppress the notification if MaxPaymentAmount is exceeded

Subscription lifecycle

UCC runs a nightly processing job across all active subscriptions. Understanding this loop makes retry and polling behavior on your side predictable.

  • Registered — you call addNotificationSubscription; UCC stores it with status Created, not yet run.
  • Checked — during its configured processing window, UCC checks the subscription for a debt/event once per day.
  • Generated, skipped, or flagged — the run resolves to one of: a notification was generated; no debt exists; the result was ignored (e.g. a duplicate within the configured suppression window, or the same amount fetched again); or the run hit a problem and is flagged for review.
  • Delivered — you retrieve the notification via getNotifications and advance your LastId cursor.
  • Expired or cancelled — the subscription ends when EndDate passes, you explicitly delete it, or it sits idle past the configured inactivity threshold with no notifications generated.

Duplicate suppression & timing controls

UCC applies default processing windows so agents don't get flooded with repeat notifications for the same underlying debt. Each can be overridden per subscription via NotificationSubscription.Params:

Override fieldEffect
DuplicateDebtIgnoreDaysIf the same subscription generates a notification for the same amount again within this window, it's suppressed.
DoNotFetchDebtAfterGenerationDaysAfter a notification is generated, UCC won't re-check that subscription again until this window elapses.
MaxAllowedNoNotificationPeriodDaysThe subscription auto-expires if it produces nothing for this many days.
IgnoreOldDebtsDaysDebts older than this are ignored when checking.
OneDayNotificationsGenerationCountCaps how many notifications this subscription can generate in a single day.

Best practices

  • Always send a non-empty AgentSubscriptionId. It's your only idempotency and lookup key for cancellation.
  • Store LastId durably before acting on notifications, or advance it only after your side has fully processed the batch — whichever order avoids silently dropping notifications on a crash.
  • Set MaxPaymentAmount deliberately. Pairing it with AmountLimitExceedAction: IGNORE is a simple way to avoid notifying customers about unexpectedly large or erroneous debts.
  • Confirm a service is notification-enabled with your UCC integration contact before subscribing — otherwise every call fails with SUBSCRIPTION_NOT_SUPPORTED.
  • Poll getNotifications on a schedule that matches UCC's nightly processing cadence (e.g. once every few hours) rather than continuously — new data won't appear faster than the processing window regenerates it.
UCC Developer Docs — Notification Service · Operations, types, and field names verified against the live WSDL (test & prod, confirmed identical) as of July 2026; narrative sections (lifecycle, concepts) sourced from internal spec v1.2 (2017-11-07). Certificates and enabled services are environment-specific — confirm with your UCC integration contact before going live.