Skip to content

ATMs — API Guide v2.1

The ATM API exposes a single endpoint that returns all ATM records published by the LFI. This is open data — no customer consent is required. The Hub calls your Ozone Connect GET /atm endpoint whenever a TPP or public consumer requests ATM data for your institution.

API Sequence Flow

Click to expand

GET /atm

Request headers

HeaderRequiredDescription
o3-provider-idYesIdentifier for your LFI registered in the Hub
o3-caller-org-idYesOrganisation ID of the TPP making the underlying request
o3-caller-client-idYesOIDC client ID of the TPP application
o3-caller-software-statement-idYesSoftware statement ID of the TPP application
o3-api-uriYesThe parameterised URL of the API being called by the TPP
o3-api-operationYesThe HTTP method of the operation carried out by the TPP (e.g. GET)
o3-ozone-interaction-idYesHub-generated interaction ID. Equals o3-caller-interaction-id if the TPP provided one
o3-caller-interaction-idNoInteraction ID passed in by the TPP, if present

Response

Content-Type: application/json

Return 200 with a data array containing one record per ATM. Return an empty array if no ATMs are registered — do not return 404.

data[] — ATM record

Required fields
FieldTypeDescription
LFIIdstringYour LFI identifier as registered in the Hub (1–36 characters)
LFIBrandIdstringBrand identifier for the LFI (1–140 characters)
ATMIdstringUnique identifier for the ATM (1–36 characters)
SupportedCurrenciesstring[]ISO 4217 currency codes the ATM dispenses or accepts (at least one required)
LocationobjectPhysical location of the ATM — see below
Location

Both PostalAddress and GeoLocation are required.

FieldTypeRequiredDescription
PostalAddressobjectYesStructured postal address — see below
GeoLocationobjectYesGPS coordinates — see below
LocationCategorystring[]NoOne or more of: BranchExternal, BranchInternal, BranchLobby, RetailerOutlet, RemoteUnit, DriveThru, Other
SiteobjectNoIdentification and Name of the site
PostalAddress
FieldTypeRequiredDescription
AddressLinestring[]Yes1–7 free-form address lines
TownNamestringNoCity or town
CountrySubDivisionstringNoUAE emirate: AbuDhabi, Dubai, Sharjah, Ajman, UmmAlQuwain, RasAlKhaimah, Fujairah
CountrystringNoISO 3166-1 alpha-2 country code (e.g. AE)
StreetNamestringNoStreet name
BuildingNumberstringNoBuilding number
BuildingNamestringNoBuilding name
FloorstringNoFloor within the building
DistrictNamestringNoDistrict or neighbourhood
PostBoxstringNoPO box
AddressTypestringNoBusiness or Other
GeoLocation
FieldTypeRequiredDescription
LatitudestringYesLatitude of the ATM
LongitudestringYesLongitude of the ATM
Optional fields
FieldTypeDescription
SupportedLanguagesstring[]Languages supported on the ATM interface
Servicesstring[]Services available: Balance, BillPayments, CashDeposits, CharityDonation, ChequeDeposits, CashWithdrawal, EnvelopeDeposit, FastCash, MobileBankingRegistration, MobilePaymentRegistration, MobilePhoneTopUp, OrderStatement, PINActivation, PINChange, PINUnblock, MiniStatement, Other, or a namespaced extension value
Accessibilitystring[]Accessibility features: AudioCashMachine, AutomaticDoors, ExternalRamp, InductionLoop, InternalRamp, LevelAccess, LowerLevelCounter, WheelchairAccess, Other
IsAccess24HourbooleanWhether the ATM is accessible 24 hours
AvailabilityobjectStatus (Available, Unavailable, UnderMaintenance) and OperatingHours (array of Days, OpenTime, CloseTime)
MinimumPossibleAmountobjectMinimum transaction amount (Amount and Currency)
MaximumPossibleAmountobjectMaximum transaction amount (Amount and Currency)
BranchobjectAssociated branch identifier (SchemeName: BICFI or Other, and Identification)
ATMFeearrayFee records — each requires Type; optionally includes Amount, Percentage, ApplicableNetworks, Conditions
Notesstring[]Free-text notes about the ATM
LinksobjectFeesUri — URL to a full fee schedule
ATMFee.Type values

Withdrawal, BalanceInquiry, MiniStatement, PINChange, CashDeposit, CardlessWithdrawal, InternationalWithdrawal, CrossBankWithdrawal, OverLimit, DeclinedTransaction, EmergencyCashWithdrawal, ForeignATMUsage, ServiceDenial, FastCashWithdrawal, NetworkSurcharge, ForeignExchange, DomesticCrossBank, InternationalCrossBank, Other

meta

FieldTypeRequiredDescription
LastUpdatedDateTimestring (date-time)YesTimestamp of the most recent update to the ATM data
TotalRecordsintegerYesTotal number of ATM records returned

Example response

json
{
  "data": [
    {
      "LFIId": "lfi-001",
      "LFIBrandId": "First National Bank UAE",
      "ATMId": "atm-dxb-001",
      "SupportedLanguages": ["en", "ar"],
      "Services": ["CashWithdrawal", "Balance", "MiniStatement", "PINChange"],
      "Accessibility": ["WheelchairAccess", "AudioCashMachine"],
      "IsAccess24Hour": true,
      "Availability": {
        "Status": "Available"
      },
      "SupportedCurrencies": ["AED"],
      "MinimumPossibleAmount": {
        "Amount": "20",
        "Currency": "AED"
      },
      "MaximumPossibleAmount": {
        "Amount": "5000",
        "Currency": "AED"
      },
      "Location": {
        "LocationCategory": ["BranchExternal"],
        "PostalAddress": {
          "AddressLine": ["Sheikh Zayed Road", "Al Quoz"],
          "TownName": "Dubai",
          "CountrySubDivision": "Dubai",
          "Country": "AE"
        },
        "GeoLocation": {
          "Latitude": "25.1972",
          "Longitude": "55.2796"
        }
      },
      "ATMFee": [
        {
          "Type": "CrossBankWithdrawal",
          "Amount": {
            "Amount": "2.00",
            "Currency": "AED"
          }
        }
      ]
    }
  ],
  "meta": {
    "LastUpdatedDateTime": "2025-03-01T08:00:00Z",
    "TotalRecords": 1
  }
}

Error responses

Only return an error when the Hub's request itself is invalid or a server condition prevents you from responding. All error bodies must include errorCode and errorMessage.

400 — Bad request
errorCodeWhen to use
Body.InvalidFormatRequest is malformed or does not match the schema
Resource.InvalidFormatA request parameter is present but syntactically invalid
GenericRecoverableErrorRecoverable validation error not covered above — Hub may retry
GenericErrorUnrecoverable validation error not covered above
403 — Forbidden
errorCodeWhen to use
AccessToken.InvalidScopeThe Hub's token does not include the required scope
GenericRecoverableErrorRecoverable access failure not covered above
GenericErrorUnrecoverable access failure not covered above
500 — Internal server error
errorCodeWhen to use
GenericRecoverableErrorTransient server error — Hub may retry after a delay
GenericErrorUnrecoverable server error