Open Data API

API change history

The Open Data API allow API providers (e.g. banks, building societies and ATM providers) to develop API endpoints which can then be accessed by API users (e.g. third party developers) to build mobile and web applications for banking customers. The API allow providers to supply up to date, standardized, information about the latest available products and services.

Get ATMs information

Get ATMs information

Try it

Request

Request URL

Request parameters

  • (optional)
    string

    Format - date-time (as date-time in RFC3339). Used for conditional request, to retrieve data only if modified since a given date

  • (optional)
    string

    Used for conditional request, to retrieve data only if the given Etag value does not match

Request headers

  • string
    Subscription key which provides access to this API. Found in your Profile.
  • string
    OAuth 2.0 access token obtained from IdentityServer. Supported grant types: Authorization code.

Request body

Responses

200 OK

OK

Representations

[
  {
    "id": "string",
    "code": "string",
    "name": "string",
    "description": "string",
    "branchCode": "string",
    "atmid": "string",
    "locationCategory": "Airport",
    "address": {
      "street": "string",
      "buildingNumber": "string",
      "city": "string",
      "postalCode": "string",
      "country": "string"
    },
    "geographicLocation": "string",
    "accessibilityFeatures": [
      "AudioCashMachine"
    ],
    "supportedLanguages": [
      "string"
    ],
    "atmServices": [
      "Balance"
    ],
    "additionalATMServices": [
      "string"
    ],
    "currency": [
      "string"
    ],
    "minimumValueDispensed": "ΜΙΝ_5",
    "telephoneNumber": "string"
  }
]
{
  "type": "array",
  "items": {
    "required": [
      "address",
      "atmid",
      "atmServices",
      "currency",
      "id",
      "supportedLanguages",
      "telephoneNumber"
    ],
    "type": "object",
    "properties": {
      "id": {
        "type": "string",
        "description": "Unique Id for the ATM",
        "format": "uuid"
      },
      "code": {
        "maxLength": 32,
        "minLength": 1,
        "type": "string",
        "description": "Code by which this branch is known and which is usually used to identify that branch",
        "nullable": true
      },
      "name": {
        "maxLength": 256,
        "minLength": 1,
        "type": "string",
        "description": "Name by which this branch is known and which is usually used to identify that branch",
        "nullable": true
      },
      "description": {
        "maxLength": 512,
        "minLength": 1,
        "type": "string",
        "description": "Description of the branch",
        "nullable": true
      },
      "branchCode": {
        "maxLength": 32,
        "minLength": 1,
        "type": "string",
        "description": "Unique and unambiguous identification of a retail branch of a financial institution",
        "nullable": true
      },
      "atmid": {
        "maxLength": 32,
        "minLength": 1,
        "type": "string",
        "description": "ATM terminal device identification for the acquirer and the issuer - this is different from the Id (unique identifier) of the ATM",
        "nullable": true
      },
      "locationCategory": {
        "enum": [
          "Airport",
          "BankSpecialisedOutlet",
          "BranchExternal",
          "BranchInternal",
          "BranchLobby",
          "BureauDeChange",
          "CoachStation",
          "CommercialSpaceInternal",
          "ConvenienceStore",
          "ExhibitionCentre",
          "FactoryOrOffice",
          "FillingStation",
          "FinancialInstitution",
          "GovernmentOffice",
          "Hospital",
          "Hotel",
          "KioskPod",
          "LeisureCentre",
          "PleasurePark",
          "PublicHouse",
          "RailwayStation",
          "RemoteUnit",
          "RetailerDepartmentStore",
          "RetailerOutlet",
          "SeaportTerminal",
          "ServiceStation",
          "ShoppingCentreExternal",
          "ShoppingCentreInternal",
          "StorageDepot",
          "SupermarketExternal",
          "SupermarketInternal",
          "UndergroundRailwayStation",
          "UniversityOrCollege"
        ],
        "type": "string",
        "description": "ATMLocationCategory"
      },
      "address": {
        "required": [
          "country"
        ],
        "type": "object",
        "properties": {
          "street": {
            "type": "string",
            "description": "Gets or Sets Street",
            "nullable": true
          },
          "buildingNumber": {
            "type": "string",
            "description": "Gets or Sets BuildingNumber",
            "nullable": true
          },
          "city": {
            "type": "string",
            "description": "Gets or Sets City",
            "nullable": true
          },
          "postalCode": {
            "type": "string",
            "description": "Gets or Sets PostalCode",
            "nullable": true
          },
          "country": {
            "type": "string",
            "description": "Gets or Sets Country - ISO 3166 ALPHA2 country code",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Address representation"
      },
      "geographicLocation": {
        "pattern": "^-?\\d{1,3}\\.\\d{1,8},-?\\d{1,3}\\.\\d{1,8}$",
        "type": "string",
        "description": "Geographic Coordinates",
        "nullable": true
      },
      "accessibilityFeatures": {
        "type": "array",
        "items": {
          "enum": [
            "AudioCashMachine",
            "AutomaticDoors",
            "ChairAccess",
            "DriveThru",
            "ExternalRamp",
            "InductionLoop",
            "InternalRamp",
            "LevelAccess",
            "LowerLevelCounter",
            "WheelchairAccess"
          ],
          "type": "string",
          "description": "Information about the accessibility"
        },
        "description": "Information about the accessibility",
        "nullable": true
      },
      "supportedLanguages": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "Languages that the ATM supports",
        "nullable": true
      },
      "atmServices": {
        "type": "array",
        "items": {
          "enum": [
            "Balance",
            "BillPayments",
            "CashDeposits",
            "CashWithdrawal",
            "CharityDonation",
            "ChequeBookRequest",
            "ChequeDeposits",
            "FastCash",
            "MiniStatement",
            "MobileBankingRegistration",
            "MobilePaymentRegistration",
            "MobilePhoneTopUp",
            "OrderStatement",
            "PINActivation",
            "PINChange"
          ],
          "type": "string",
          "description": "Information about ATM services"
        },
        "description": "Information about ATM services",
        "nullable": true
      },
      "additionalATMServices": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "ATM Service Description",
        "nullable": true
      },
      "currency": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "Defines currency type available for dispense",
        "nullable": true
      },
      "minimumValueDispensed": {
        "enum": [
          "ΜΙΝ_5",
          "ΜΙΝ_10",
          "ΜΙΝ_20",
          "ΜΙΝ_50",
          "ΜΙΝ_100"
        ],
        "type": "string",
        "description": "ATMMinimumValueDispensed"
      },
      "telephoneNumber": {
        "pattern": "^[+][0-9]{1,3}-[0-9()+-]{1,30}$",
        "type": "string",
        "description": "Collection of information that identifies a phone number, as defined by telecom services.",
        "nullable": true
      }
    },
    "additionalProperties": false,
    "description": "ATM"
  }
}

400 Bad Request

Bad Request

Representations

{
  "errors": {},
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "extensions": {}
}
{
  "type": "object",
  "properties": {
    "errors": {
      "type": "object",
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "nullable": true,
      "readOnly": true
    },
    "type": {
      "type": "string",
      "nullable": true
    },
    "title": {
      "type": "string",
      "nullable": true
    },
    "status": {
      "type": "integer",
      "format": "int32",
      "nullable": true
    },
    "detail": {
      "type": "string",
      "nullable": true
    },
    "instance": {
      "type": "string",
      "nullable": true
    },
    "extensions": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": false
      },
      "nullable": true,
      "readOnly": true
    }
  },
  "additionalProperties": false
}

401 Unauthorized

Unauthorized

Representations

{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "extensions": {}
}
{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "nullable": true
    },
    "title": {
      "type": "string",
      "nullable": true
    },
    "status": {
      "type": "integer",
      "format": "int32",
      "nullable": true
    },
    "detail": {
      "type": "string",
      "nullable": true
    },
    "instance": {
      "type": "string",
      "nullable": true
    },
    "extensions": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": false
      },
      "nullable": true,
      "readOnly": true
    }
  },
  "additionalProperties": false
}

403 Forbidden

Forbidden

Representations

{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "extensions": {}
}
{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "nullable": true
    },
    "title": {
      "type": "string",
      "nullable": true
    },
    "status": {
      "type": "integer",
      "format": "int32",
      "nullable": true
    },
    "detail": {
      "type": "string",
      "nullable": true
    },
    "instance": {
      "type": "string",
      "nullable": true
    },
    "extensions": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": false
      },
      "nullable": true,
      "readOnly": true
    }
  },
  "additionalProperties": false
}

404 Not Found

Not found

Representations

{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "extensions": {}
}
{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "nullable": true
    },
    "title": {
      "type": "string",
      "nullable": true
    },
    "status": {
      "type": "integer",
      "format": "int32",
      "nullable": true
    },
    "detail": {
      "type": "string",
      "nullable": true
    },
    "instance": {
      "type": "string",
      "nullable": true
    },
    "extensions": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": false
      },
      "nullable": true,
      "readOnly": true
    }
  },
  "additionalProperties": false
}

405 Method Not Allowed

Method Not Allowed

Representations

{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "extensions": {}
}
{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "nullable": true
    },
    "title": {
      "type": "string",
      "nullable": true
    },
    "status": {
      "type": "integer",
      "format": "int32",
      "nullable": true
    },
    "detail": {
      "type": "string",
      "nullable": true
    },
    "instance": {
      "type": "string",
      "nullable": true
    },
    "extensions": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": false
      },
      "nullable": true,
      "readOnly": true
    }
  },
  "additionalProperties": false
}

406 Not Acceptable

Not Acceptable

Representations

{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "extensions": {}
}
{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "nullable": true
    },
    "title": {
      "type": "string",
      "nullable": true
    },
    "status": {
      "type": "integer",
      "format": "int32",
      "nullable": true
    },
    "detail": {
      "type": "string",
      "nullable": true
    },
    "instance": {
      "type": "string",
      "nullable": true
    },
    "extensions": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": false
      },
      "nullable": true,
      "readOnly": true
    }
  },
  "additionalProperties": false
}

408 Request Timeout

Request Timeout

409 Conflict

Conflict

Representations

{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "extensions": {}
}
{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "nullable": true
    },
    "title": {
      "type": "string",
      "nullable": true
    },
    "status": {
      "type": "integer",
      "format": "int32",
      "nullable": true
    },
    "detail": {
      "type": "string",
      "nullable": true
    },
    "instance": {
      "type": "string",
      "nullable": true
    },
    "extensions": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": false
      },
      "nullable": true,
      "readOnly": true
    }
  },
  "additionalProperties": false
}

415 Unsupported Media Type

Unsupported Media Type

429 Too many requests

Too Many Requests

Representations

{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "extensions": {}
}
{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "nullable": true
    },
    "title": {
      "type": "string",
      "nullable": true
    },
    "status": {
      "type": "integer",
      "format": "int32",
      "nullable": true
    },
    "detail": {
      "type": "string",
      "nullable": true
    },
    "instance": {
      "type": "string",
      "nullable": true
    },
    "extensions": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": false
      },
      "nullable": true,
      "readOnly": true
    }
  },
  "additionalProperties": false
}

500 Internal Server Error

Internal Server Error

503 Service Unavailable

Service Unavailable

Code samples

@ECHO OFF

curl -v -X GET "https://sandbox-api-gateway.chaniabank.gr/psd2/v1/opendata/atm?if_Modified_Since={string}&if_None_Match={string}"
-H "Ocp-Apim-Subscription-Key: {subscription key}"
-H "Authorization: {access token}"

--data-ascii "{body}" 
using System;
using System.Net.Http.Headers;
using System.Text;
using System.Net.Http;
using System.Web;

namespace CSHttpClientSample
{
    static class Program
    {
        static void Main()
        {
            MakeRequest();
            Console.WriteLine("Hit ENTER to exit...");
            Console.ReadLine();
        }
        
        static async void MakeRequest()
        {
            var client = new HttpClient();
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            // Request headers
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "{subscription key}");
            client.DefaultRequestHeaders.Add("Authorization", "{access token}");

            // Request parameters
            queryString["if_Modified_Since"] = "{string}";
            queryString["if_None_Match"] = "{string}";
            var uri = "https://sandbox-api-gateway.chaniabank.gr/psd2/v1/opendata/atm?" + queryString;

            var response = await client.GetAsync(uri);
        }
    }
}	
// // This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class JavaSample 
{
    public static void main(String[] args) 
    {
        HttpClient httpclient = HttpClients.createDefault();

        try
        {
            URIBuilder builder = new URIBuilder("https://sandbox-api-gateway.chaniabank.gr/psd2/v1/opendata/atm");

            builder.setParameter("if_Modified_Since", "{string}");
            builder.setParameter("if_None_Match", "{string}");

            URI uri = builder.build();
            HttpGet request = new HttpGet(uri);
            request.setHeader("Ocp-Apim-Subscription-Key", "{subscription key}");
            request.setHeader("Authorization", "{access token}");


            // Request body
            StringEntity reqEntity = new StringEntity("{body}");
            request.setEntity(reqEntity);

            HttpResponse response = httpclient.execute(request);
            HttpEntity entity = response.getEntity();

            if (entity != null) 
            {
                System.out.println(EntityUtils.toString(entity));
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }
}

<!DOCTYPE html>
<html>
<head>
    <title>JSSample</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>

<script type="text/javascript">
    $(function() {
        var params = {
            // Request parameters
            "if_Modified_Since": "{string}",
            "if_None_Match": "{string}",
        };
      
        $.ajax({
            url: "https://sandbox-api-gateway.chaniabank.gr/psd2/v1/opendata/atm?" + $.param(params),
            beforeSend: function(xhrObj){
                // Request headers
                xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key","{subscription key}");
                xhrObj.setRequestHeader("Authorization","{access token}");
            },
            type: "GET",
            // Request body
            data: "{body}",
        })
        .done(function(data) {
            alert("success");
        })
        .fail(function() {
            alert("error");
        });
    });
</script>
</body>
</html>
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
    NSString* path = @"https://sandbox-api-gateway.chaniabank.gr/psd2/v1/opendata/atm";
    NSArray* array = @[
                         // Request parameters
                         @"entities=true",
                         @"if_Modified_Since={string}",
                         @"if_None_Match={string}",
                      ];
    
    NSString* string = [array componentsJoinedByString:@"&"];
    path = [path stringByAppendingFormat:@"?%@", string];

    NSLog(@"%@", path);

    NSMutableURLRequest* _request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]];
    [_request setHTTPMethod:@"GET"];
    // Request headers
    [_request setValue:@"{subscription key}" forHTTPHeaderField:@"Ocp-Apim-Subscription-Key"];
    [_request setValue:@"{access token}" forHTTPHeaderField:@"Authorization"];
    // Request body
    [_request setHTTPBody:[@"{body}" dataUsingEncoding:NSUTF8StringEncoding]];
    
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData* _connectionData = [NSURLConnection sendSynchronousRequest:_request returningResponse:&response error:&error];

    if (nil != error)
    {
        NSLog(@"Error: %@", error);
    }
    else
    {
        NSError* error = nil;
        NSMutableDictionary* json = nil;
        NSString* dataString = [[NSString alloc] initWithData:_connectionData encoding:NSUTF8StringEncoding];
        NSLog(@"%@", dataString);
        
        if (nil != _connectionData)
        {
            json = [NSJSONSerialization JSONObjectWithData:_connectionData options:NSJSONReadingMutableContainers error:&error];
        }
        
        if (error || !json)
        {
            NSLog(@"Could not parse loaded json with error:%@", error);
        }
        
        NSLog(@"%@", json);
        _connectionData = nil;
    }
    
    [pool drain];

    return 0;
}
<?php
// This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
require_once 'HTTP/Request2.php';

$request = new Http_Request2('https://sandbox-api-gateway.chaniabank.gr/psd2/v1/opendata/atm');
$url = $request->getUrl();

$headers = array(
    // Request headers
    'Ocp-Apim-Subscription-Key' => '{subscription key}',
    'Authorization' => '{access token}',
);

$request->setHeader($headers);

$parameters = array(
    // Request parameters
    'if_Modified_Since' => '{string}',
    'if_None_Match' => '{string}',
);

$url->setQueryVariables($parameters);

$request->setMethod(HTTP_Request2::METHOD_GET);

// Request body
$request->setBody("{body}");

try
{
    $response = $request->send();
    echo $response->getBody();
}
catch (HttpException $ex)
{
    echo $ex;
}

?>
########### Python 2.7 #############
import httplib, urllib, base64

headers = {
    # Request headers
    'Ocp-Apim-Subscription-Key': '{subscription key}',
    'Authorization': '{access token}',
}

params = urllib.urlencode({
    # Request parameters
    'if_Modified_Since': '{string}',
    'if_None_Match': '{string}',
})

try:
    conn = httplib.HTTPSConnection('sandbox-api-gateway.chaniabank.gr')
    conn.request("GET", "/psd2/v1/opendata/atm?%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################

########### Python 3.2 #############
import http.client, urllib.request, urllib.parse, urllib.error, base64

headers = {
    # Request headers
    'Ocp-Apim-Subscription-Key': '{subscription key}',
    'Authorization': '{access token}',
}

params = urllib.parse.urlencode({
    # Request parameters
    'if_Modified_Since': '{string}',
    'if_None_Match': '{string}',
})

try:
    conn = http.client.HTTPSConnection('sandbox-api-gateway.chaniabank.gr')
    conn.request("GET", "/psd2/v1/opendata/atm?%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################
require 'net/http'

uri = URI('https://sandbox-api-gateway.chaniabank.gr/psd2/v1/opendata/atm')

query = URI.encode_www_form({
    # Request parameters
    'if_Modified_Since' => '{string}',
    'if_None_Match' => '{string}'
})
if query.length > 0
  if uri.query && uri.query.length > 0
    uri.query += '&' + query
  else
    uri.query = query
  end
end

request = Net::HTTP::Get.new(uri.request_uri)
# Request headers
request['Ocp-Apim-Subscription-Key'] = '{subscription key}'
# Request headers
request['Authorization'] = '{access token}'
# Request body
request.body = "{body}"

response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
    http.request(request)
end

puts response.body