Halifax Open Data Branch Locator API
Public, unauthenticated OBIE Open Data API returning a directory of all Halifax branches in the UK. Confirmed live (HTTP 200, JSON) at the v2.2 base.
Public, unauthenticated OBIE Open Data API returning a directory of all Halifax branches in the UK. Confirmed live (HTTP 200, JSON) at the v2.2 base.
{
"swagger": "2.0",
"info": {
"version": "v1.3",
"title": "Open Data API",
"description": "Latest Swagger specification for OpenData"
},
"host": "developer.openbanking.org.uk",
"basePath": "/reference-implementation/open-banking/v1.3",
"schemes": ["https"],
"produces": ["application/prs.openbanking.opendata.v1.3+json"],
"tags": [{
"name": "Branch",
"description": "Endpoint for getting Branch data"
}, {
"name": "ATM",
"description": "Endpoint for getting ATM data"
}, {
"name": "PCA",
"description": "Endpoint for getting Personal Current Account data"
}, {
"name": "BCA",
"description": "Endpoint for getting Business Current Account data"
}, {
"name": "SME",
"description": "Endpoint for getting Unsecured SME Loan data"
}, {
"name": "CCC",
"description": "Endpoint for getting Commercial Credit Card data"
}],
"paths": {
"/branches": {
"get": {
"tags": ["Branch"],
"description": "Gets a list of all `Branch` objects.",
"parameters": [{
"name": "If-Modified-Since",
"type": "string",
"description": "Used for conditional request, to retrieve data only if modified since a given date",
"in": "header",
"required": false
}, {
"name": "If-None-Match",
"type": "string",
"description": "Used for conditional request, to retrieve data only if the given Etag value does not match",
"in": "header",
"required": false
}],
"responses": {
"200": {
"description": "Successful response with a list of `Branch` data",
"headers": {
"Strict-Transport-Security": {
"type": "string",
"description": "HTTPS strict transport security header",
"default": "max-age=31536000"
},
"Etag": {
"type": "string",
"description": "A unique ID identifying whether this resource has changed"
},
"Cache-Control": {
"type": "string",
"description": "Describes how long this response can be cached",
"default": "max-age=28800"
},
"X-Frame-Options": {
"type": "string",
"description": "Prevent this request from being loaded in any iframes",
"default": "DENY"
},
"X-Content-Type-Options": {
"type": "string",
"description": "Ensures each page has a content type and prevents browsers from doing MIME type sniffing",
"default": "nosniff"
}
},
"schema": {
"type": "object",
"properties": {
"meta": {
"title": "Meta data",
"type": "object",
"properties": {
"LastUpdated": {
"type": "string",
"format": "date-time"
},
"TotalResults": {
"type": "integer"
},
"Agreement": {
"type": "string",
"enum": ["Use of the APIs and any related data will be subject to the terms of the Open Licence and subject to terms and conditions"]
},
"License": {
"description": "Open Banking License",
"type": "string",
"format": "uri",
"enum": ["https://www.openbanking.org.uk/open-licence"]
},
"TermsOfUse": {
"description": "Open Banking Terms of Use",
"type": "string",
"format": "uri",
"enum": ["https://www.openbanking.org.uk/terms"]
}
},
"required": ["LastUpdated", "TotalResults", "Agreement", "License", "TermsOfUse"],
"additionalProperties": false
},
"data": {
"type": "array",
"items": {
"title": "Branch",
"type": "object",
"properties": {
"Organisation": {
"description": "Organisation",
"type": "object",
"properties": {
"ParentOrganisation": {
"description": "Parent organisation",
"type": "object",
"properties": {
"LEI": {
"description": "The LEI ID of the organisation",
"type": "string",
"pattern": "^[A-Z0-9]{18,18}[0-9]{2,2}$"
},
"BIC": {
"description": "The BIC from the organisation",
"type": "string",
"pattern": "[A-Z]{6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3})?"
},
"OrganisationName": {
"description": "Organisation Name",
"type": "object",
"properties": {
"LegalName": {
"description": "Legal Name of the organisation",
"type": "string",
"minLength": 1,
"maxLength": 35
}
},
"required": ["LegalName"],
"additionalProperties": false
}
},
"required": ["OrganisationName"],
"additionalProperties": false
},
"Brand": {
"description": "Brand",
"type": "object",
"properties": {
"TrademarkIPOCode": {
"description": "The Intellectual Property Office (IPO) is the official body responsible for intellectual property (IP) rights including patents, designs, trademarks and copyright. (Code: UK or EU only)",
"type": "string",
"enum": ["UK", "EU"]
},
"TrademarkID": {
"description": "The trademark number that has been registered with the Intellectual Property Office. Note: The 2 letter IPO prefix should be omitted",
"type": "string",
"minLength": 1,
"maxLength": 35
}
},
"required": ["TrademarkIPOCode", "TrademarkID"],
"additionalProperties": false
}
},
"required": ["ParentOrganisation", "Brand"],
"additionalProperties": false
},
"BranchName": {
"description": "Name by which a party is known and which is usually used to identify that party",
"type": "string",
"minLength": 1,
"maxLength": 35
},
"BranchIdentification": {
"description": "Unique and unambiguous identification of a retail branch of a financial institution",
"type": "string",
"minLength": 1,
"maxLength": 35
},
"BranchType": {
"description": "Information on the type of branch",
"type": "string",
"enum": ["Physical", "Mobile"]
},
"Address": {
"description": "Postal Address",
"type": "object",
"properties": {
"StreetName": {
"description": "Name of a street or thoroughfare",
"type": "string",
"minLength": 1,
"maxLength": 70
},
"BuildingNumberOrName": {
"description": "Number or Name that identifies the position of a building on a street",
"type": "string",
"minLength": 1,
"maxLength": 350
},
"PostCode": {
"description": "Identifier consisting of a group of letters and/or numbers that is added to a postal address to assist the sorting of mail",
"type": "string",
"minLength": 1,
"maxLength": 16
},
"OptionalAddressField": {
"description": "Directions for customers",
"type": "string",
"minLength": 1,
"maxLength": 350
},
"TownName": {
"description": "Name of a built-up area, with defined boundaries, and a local government",
"type": "string",
"minLength": 1,
"maxLength": 35
},
"CountrySubDivision": {
"description": "Identifies a subdivision of a country such as state, region, county",
"type": "string",
"minLength": 1,
"maxLength": 35
},
"Country": {
"description": "Nation with its own government",
"type": "string",
"pattern": "[A-Z]{2}"
}
},
"required": ["Country"],
"additionalProperties": false
},
"BranchDescription": {
"description": "Description of the branch",
"type": "string",
"minLength": 1,
"maxLength": 140
},
"BranchPhoto": {
"description": "Image related to the branch",
"type": "string",
"format": "uri"
},
"TelephoneNumber": {
"description": "Collection of information that identifies a phone number, as defined by telecom services.",
"type": "string",
"pattern": "^[+][0-9]{1,3}-[0-9()+-]{1,30}$"
},
"AlternatePhone": {
"type": "array",
"items": {
"description": "Alternative Phone Number",
"type": "object",
"properties": {
"AlternateTelephoneNumber": {
"description": "Collection of information that identifies a phone number, as defined by telecom services.",
"type": "string",
"pattern": "^[+][0-9]{1,3}-[0-9()+-]{1,30}$"
},
"AlternateTelephoneNumberDescription": {
"description": "Description of the telephone number",
"type": "string",
"minLength": 1,
"maxLength": 35
}
},
"additionalProperties": false
}
},
"FaxNumber": {
"description": "Collection of information that identifies a FAX number, as defined by telecom services.",
"type": "array",
"items": {
"description": "Collection of information that identifies a phone number, as defined by telecom services.",
"type": "string",
"pattern": "^[+][0-9]{1,3}-[0-9()+-]{1,30}$"
}
},
"GeographicLocation": {
"description": "Geographic Coordinates",
"type": "object",
"properties": {
"Latitude": {
"description": "The Latitude measured in decimal format according to ISO 213",
"type": "string",
"pattern": "^-?\\d{1,3}\\.\\d{1,8}$"
},
"Longitude": {
"description": "The longitude measured in decimal format according to ISO 213",
"type": "string",
"pattern": "^-?\\d{1,3}\\.\\d{1,8}$"
}
},
"required": ["Latitude", "Longitude"],
"additionalProperties": false
},
"DaysOfTheWeek": {
"description": "Description on when the mobile branch is available. e.g. The weekend of Glastonbury festival; or Mondays and during the shrimp season also Wednesdays",
"type": "string",
"minLength": 1,
"maxLength": 35
},
"StopName": {
"description": "Name of the stop of the mobile branch",
"type": "string",
"minLength": 1,
"maxLength": 15
},
"ArrivalTime": {
"description": "Time that the mobile branch is scheduled to arrive",
"type": "string",
"pattern": "^(([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].\\d{3})|(^24:00:00\\.000)(?:Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$"
},
"DepartureTime": {
"description": "Time that the mobile branch is scheduled to depart",
"type": "string",
"pattern": "^(([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].\\d{3})|(^24:00:00\\.000)(?:Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$"
},
"ParkingLocation": {
"description": "Place where the mobile branch is located, such as between the news agent and the church.",
"type": "string",
"minLength": 1,
"maxLength": 50
},
"OpeningTimes": {
"description": "Branch Opening Times",
"type": "array",
"items": {
"type": "object",
"properties": {
"OpeningDay": {
"description": "Day of the week",
"enum": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", "Public and Bank Holiday"],
"type": "string",
"minLength": 1,
"maxLength": 35
},
"OpeningTime": {
"description": "ISOTime, local time hh:mm:ss.sss or time in utc hh:mm:ss.sssZ or time with timezone hh:mm:ss.sss+hh:mm hh:mm:ss.sss-hh:mm",
"type": "string",
"pattern": "^(([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].\\d{3})|(^24:00:00\\.000)(?:Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$"
},
"ClosingTime": {
"description": "ISOTime, local time hh:mm:ss.sss or time in utc hh:mm:ss.sssZ or time with timezone hh:mm:ss.sss+hh:mm hh:mm:ss.sss-hh:mm",
"type": "string",
"pattern": "^(([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].\\d{3})|(^24:00:00\\.000)(?:Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$"
},
"UnavailableStartTime": {
"description": "ISOTime, local time hh:mm:ss.sss or time in utc hh:mm:ss.sssZ or time with timezone hh:mm:ss.sss+hh:mm hh:mm:ss.sss-hh:mm",
"type": "string",
"pattern": "^(([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].\\d{3})|(^24:00:00\\.000)(?:Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$"
},
"UnavailableFinishTime": {
"description": "ISOTime, local time hh:mm:ss.sss or time in utc hh:mm:ss.sssZ or time with timezone hh:mm:ss.sss+hh:mm hh:mm:ss.sss-hh:mm",
"type": "string",
"pattern": "^(([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].\\d{3})|(^24:00:00\\.000)(?:Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$"
}
},
"required": ["OpeningDay", "OpeningTime", "ClosingTime"]
},
"minItems": 1,
"additionalProperties": false
},
"PlannedBranchClosure": {
"type": "array",
"items": {
"description": "Planned branch closure",
"type": "object",
"properties": {
"StartDate": {
"description": "Date when a branch is due to close temporarily or permanently",
"type": "string",
"pattern": "^[0-9]{4}-(0[1-9]|(1[0|1|2]))-((0[1-9])|((1|2)[0-9])|(30|31))$"
},
"EndDate": {
"description": "Date when a branch is due to re-open following temporary closure",
"type": "string",
"pattern": "^[0-9]{4}-(0[1-9]|(1[0|1|2]))-((0[1-9])|((1|2)[0-9])|(30|31))$"
}
},
"additionalProperties": false
}
},
"AccessibilityTypes": {
"description": "Information about the accessibility",
"type": "string",
"enum": ["AudioCashMachine", "AutomaticDoors", "ChairAccess", "DriveThru", "ExternalRamp", "InductionLoop", "InternalRamp", "LevelAccess", "LowerLevelCounter", "WheelchairAccess"]
},
"BranchSelfServeServiceName": {
"type": "array",
"items": {
"description": "Information about self service branch services",
"type": "string",
"enum": ["AccountVerificationService", "AssistedServiceCounter", "BusinessDepositTerminal", "CashChequeDepositMachineCoin", "CashChequeDepositMachineNoCoin", "ExternalAtmAudio", "ExternalAtmNoAudio", "ExternalQuickServicePoint", "InternalAtmAudio", "InternalAtmNoAudio", "InternalQuickServicePoint", "LodgementDevice", "OnlineBankingPoint", "QuickDeposit", "SaturdayCounterService", "SelfServiceAccountOpening", "StatementPrinter"]
},
"uniqueItems": true
},
"BranchOtherSelfServices": {
"description": "Self Services not described in BranchSelfServeServiceName",
"type": "array",
"items": {
"description": "maxLength 350 text",
"type": "string",
"minLength": 1,
"maxLength": 350
}
},
"BranchMediatedServiceName": {
"description": "Information about mediated branch facilities",
"type": "array",
"items": {
"description": "Information about mediated branch facilities",
"type": "string",
"enum": ["BureauDeChange", "BusinessCounter", "CardIssuanceFacility", "CounterServices", "DriveThru", "MortgageAdvisor", "NightSafe", "OnDemandCurrency", "PremierCounter", "VideoBanking", "WheelChairAccess"]
},
"uniqueItems": true
},
"BranchOtherMediatedServices": {
"description": "Mediated Services not described in BranchMediatedServiceName",
"type": "array",
"items": {
"description": "maxLength 350 text",
"type": "string",
"minLength": 1,
"maxLength": 350
}
},
"BranchFacilitiesName": {
"description": "Information about branch facilities",
"type": "array",
"items": {
"description": "Information about branch facilities",
"type": "string",
"enum": ["BusinessITSupport", "CollectionLockers", "MeetingRooms", "Parking", "Wifi"]
},
"uniqueItems": true
},
"CustomerSegment": {
"description": "Customer segment which the branch is able to service",
"type": "array",
"items": {
"description": "Customer segment which the branch is able to service",
"type": "string",
"enum": ["Business", "Corporate", "Personal", "Premier", "Private", "Select", "SME", "Wealth"]
},
"uniqueItems": true
},
"BranchOtherFacilities": {
"description": "Any other facilities not mentioned in BranchFacilitiesName",
"type": "array",
"items": {
"description": "maxLength 350 text",
"type": "string",
"minLength": 1,
"maxLength": 350
}
},
"ATMAtBranch": {
"description": "Indicated whether an ATM is at the branch",
"type": "boolean"
}
},
"required": ["Organisation", "BranchIdentification", "BranchType", "CustomerSegment", "Address", "TelephoneNumber", "OpeningTimes", "ATMAtBranch"],
"additionalProperties": false
}
}
},
"required": ["meta", "data"],
"additionalProperties": false
}
},
"400": {
"description": "You have sent a request which could not be understood.",
"headers": {
"Strict-Transport-Security": {
"type": "string",
"description": "HTTPS strict transport security header"
},
"X-Frame-Options": {
"type": "string",
"description": "Prevent this request from being loaded in any iframes",
"default": "DENY"
},
"X-Content-Type-Options": {
"type": "string",
"description": "Ensures each page has a content type and prevents browsers from doing MIME type sniffing",
"default": "nosniff"
},
"Status Code": {
"type": "integer",
"description": "The HTTP status code defining the error",
"default": 400
}
},
"schema": {
"title": "400 Error object",
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": ["400"]
},
"title": {
"type": "string",
"enum": ["Bad request"]
},
"description": {
"type": "string",
"enum": ["You have sent a request which could not be understood."]
}
},
"required": ["status", "title", "description"],
"additionalProperties": false
}
},
"408": {
"description": "Your client has failed to submit a request, and a timeout has occurred.",
"headers": {
"Strict-Transport-Security": {
"type": "string",
"description": "HTTPS strict transport security header"
},
"X-Frame-Options": {
"type": "string",
"description": "Prevent this request from being loaded in any iframes",
"default": "DENY"
},
"X-Content-Type-Options": {
"type": "string",
"description": "Ensures each page has a content type and prevents browsers from doing MIME type sniffing",
"default": "nosniff"
},
"Status Code": {
"type": "integer",
"description": "The HTTP status code defining the error",
"default": 400
}
},
"schema": {
"title": "408 Error object",
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": ["408"]
},
"title": {
"type": "string",
"enum": ["Client timeout"]
},
"description": {
"type": "string",
"enum": ["Your client has failed to submit a request, and a timeout has occurred."]
}
},
"required": ["status", "title", "description"],
"additionalProperties": false
}
},
"429": {
"description": "You have requested this resource too often. Slow down.",
"headers": {
"Strict-Transport-Security": {
"type": "string",
"description": "HTTPS strict transport security header"
},
"X-Frame-Options": {
"type": "string",
"description": "Prevent this request from being loaded in any iframes",
"default": "DENY"
},
"X-Content-Type-Options": {
"type": "string",
"description": "Ensures each page has a content type and prevents browsers from doing MIME type sniffing",
"default": "nosniff"
},
"Status Code": {
"type": "integer",
"description": "The HTTP status code defining the error",
"default": 400
}
},
"schema": {
"title": "429 Error object",
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": ["429"]
},
"title": {
"type": "string",
"enum": ["Too many requests"]
},
"description": {
"type": "string",
"enum": ["You have requested this resource too often. Slow down."]
}
},
"required": ["status", "title", "description"],
"additionalProperties": false
}
},
"500": {
"description": "An error occurred on the server. No further information is available.",
"headers": {
"Strict-Transport-Security": {
"type": "string",
"description": "HTTPS strict transport security header"
},
"X-Frame-Options": {
"type": "string",
"description": "Prevent this request from being loaded in any iframes",
"default": "DENY"
},
"X-Content-Type-Options": {
"type": "string",
"description": "Ensures each page has a content type and prevents browsers from doing MIME type sniffing",
"default": "nosniff"
},
"Status Code": {
"type": "integer",
"description": "The HTTP status code defining the error",
"default": 400
}
},
"schema": {
"title": "500 Error object",
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": ["500"]
},
"title": {
"type": "string",
"enum": ["Internal server error"]
},
"description": {
"type": "string",
"enum": ["An error occurred on the server. No further information is available."]
}
},
"required": ["status", "title", "description"],
"additionalProperties": false
}
},
"503": {
"description": "The service is temporarily unavailable.",
"headers": {
"Strict-Transport-Security": {
"type": "string",
"description": "HTTPS strict transport security header"
},
"X-Frame-Options": {
"type": "string",
"description": "Prevent this request from being loaded in any iframes",
"default": "DENY"
},
"X-Content-Type-Options": {
"type": "string",
"description": "Ensures each page has a content type and prevents browsers from doing MIME type sniffing",
"default": "nosniff"
},
"Status Code": {
"type": "integer",
"description": "The HTTP status code defining the error",
"default": 400
}
},
"schema": {
"title": "503 Error object",
"type": "object",
"properties": {
"status": {
# --- truncated at 32 KB (410 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/halifax/refs/heads/main/openapi/openbanking-opendata-standard-swagger.json