{ "openapi" : "3.0.1", "info" : { "title" : "Showcase API", "description" : "The API shows the Open Banking Platform in operation through its endpoints. It is available on the marketplace to subscribe to, and it is accessible to internal and external applications. The endpoints corresponding to each flavour of interacting with Open Banking API's:\n- `/mtls-only/greetings`: no signature (MTLS-only)\n- `/signed/greetings`: signature (JWS)\n- `/greetings/single`: still in use but soon to be replaced by the JWS signature, HTTP signature", "contact" : { "name" : "ING Developer Portal", "url" : "https://developer.ing.com", "email" : "developerportal@ing.com" }, "version" : "4.0.0" }, "servers" : [ { "url" : "https://api.ing.com" } ], "security" : [ { "ING-Application-Security" : [ "greetings:view" ] } ], "tags" : [ { "name" : "Showcase API", "description" : "Returns a message generated with a unique id and a timestamp indicating when it was produced." } ], "paths" : { "/signed/greetings" : { "get" : { "tags" : [ "Showcase API" ], "summary" : "Gives a greeting message from one of the available instances", "description" : "Returns a message generated with a unique id and a timestamp indicating when it was produced.", "operationId" : "signedGreetingsGet", "parameters" : [ { "name" : "Authorization", "in" : "header", "description" : "OAuth2 Token.", "required" : true, "schema" : { "type" : "string" } }, { "name" : "X-JWS-Signature", "in" : "header", "description" : "A JWS signature of the request by the third party on application level. See \"Get Started\" for more information on how to generate", "required" : true, "schema" : { "type" : "string" } }, { "name" : "Digest", "in" : "header", "description" : "SHA256 of the body.", "required" : true, "schema" : { "type" : "string" } }, { "name" : "Date", "in" : "header", "description" : "Standard http header element for date and time.", "required" : true, "schema" : { "type" : "string", "format" : "date-time" } }, { "name" : "Content-Type", "in" : "header", "description" : "The \"content-type\" header is used to indicate what type of media or resource is being used for the payload in the request. The value of the header should be application/x-www-form-urlencoded.", "required" : true, "schema" : { "type" : "string" } } ], "responses" : { "200" : { "description" : "OK", "headers" : { "X-ING-Response-ID" : { "description" : "Response UUID, if X-ING-ReqID supplied in the request", "style" : "simple", "schema" : { "type" : "string" } }, "X-ING-ReqID" : { "description" : "Request ID, can be a UUID", "style" : "simple", "schema" : { "type" : "string" } } }, "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Greeting" } } } }, "400" : { "description" : "Bad Request - The request was malformed, headers may be missing or invalid.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } }, "401" : { "description" : "Unauthorized - The request did not contain authorisation evidence. A valid subscription to the scope(s) that contain this API endpoint is required to allow the request to succeed.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } }, "404" : { "description" : "Not Found - The requested resource cannot be found. Check the request URL if it matches with the endpoint described.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } }, "500" : { "description" : "Internal Server Error - Something went wrong on the server, check status site and/or report the issue. There's no need to really specify this any further (other than 503 below) as the client is powerless in fixing the condition that caused the error.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } }, "503" : { "description" : "Service Unavailable - The API is temporarily unavailable. This is the only 500 code that allows for the client to try and remedy the condition (i.e. by retrying).", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } } }, "security" : [ { "ING-Application-Security" : [ "greetings:view" ] } ] } }, "/mtls-only/greetings" : { "get" : { "tags" : [ "Showcase API" ], "summary" : "Gives a greeting message from one of the available instances", "description" : "Returns a message generated with a unique id and a timestamp indicating when it was produced.", "operationId" : "mtlsOnlyGreetingsGet", "parameters" : [ { "name" : "Authorization", "in" : "header", "description" : "OAuth2 Token", "required" : true, "schema" : { "type" : "string" } } ], "responses" : { "200" : { "description" : "OK", "headers" : { "X-ING-Response-ID" : { "description" : "Response UUID, if X-ING-ReqID supplied in the request", "style" : "simple", "schema" : { "type" : "string" } }, "X-ING-ReqID" : { "description" : "Request ID, can be a UUID", "style" : "simple", "schema" : { "type" : "string" } } }, "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Greeting" } } } }, "400" : { "description" : "Bad Request - The request was malformed, headers may be missing or invalid.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } }, "401" : { "description" : "Unauthorized - The request did not contain authorisation evidence. A valid subscription to the scope(s) that contain this API endpoint is required to allow the request to succeed.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } }, "404" : { "description" : "Not Found - The requested resource cannot be found. Check the request URL if it matches with the endpoint described.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } }, "500" : { "description" : "Internal Server Error - Something went wrong on the server, check status site and/or report the issue. There's no need to really specify this any further (other than 503 below) as the client is powerless in fixing the condition that caused the error.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } }, "503" : { "description" : "Service Unavailable - The API is temporarily unavailable. This is the only 500 code that allows for the client to try and remedy the condition (i.e. by retrying).", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } } }, "security" : [ { "ING-Application-Security" : [ "greetings:view" ] } ] } }, "/greetings/single" : { "get" : { "tags" : [ "Showcase API" ], "summary" : "Gives a greeting message from one of the available instances", "description" : "Returns a message generated with a unique id and a timestamp indicating when it was produced.\n ## Deprecation note:\nWe are moving from HTTP signature. You still can use this endpoint in cases where you plan to consume endpoints that \nrequire HTTP signature. But over time, all endpoints will require either JWS-signature or no signature \nat all (MTLS-only). If you plan to consume such endpoints, \nplease use `/signed/greetings` or `/mtls-only/greetings` respectively", "operationId" : "greetingsSingleGet", "parameters" : [ { "name" : "Authorization", "in" : "header", "description" : "OAuth2 Token", "required" : true, "schema" : { "type" : "string" } }, { "name" : "Signature", "in" : "header", "description" : "An HTTP signature of the request by the third party on application level. See \"Get Started\" for more information on how to generate.", "required" : true, "schema" : { "type" : "string" } }, { "name" : "Digest", "in" : "header", "description" : "SHA256 of the body.", "required" : true, "schema" : { "type" : "string" } }, { "name" : "Date", "in" : "header", "description" : "Standard http header element for date and time.", "required" : true, "schema" : { "type" : "string", "format" : "date-time" } } ], "responses" : { "200" : { "description" : "OK", "headers" : { "X-ING-Response-ID" : { "description" : "Response UUID, if X-ING-ReqID supplied in the request", "style" : "simple", "schema" : { "type" : "string" } }, "X-ING-ReqID" : { "description" : "Request ID, can be a UUID", "style" : "simple", "schema" : { "type" : "string" } } }, "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Greeting" } } } }, "400" : { "description" : "Bad Request - The request was malformed, headers may be missing or invalid.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } }, "401" : { "description" : "Unauthorized - The request did not contain authorisation evidence. A valid subscription to the scope(s) that contain this API endpoint is required to allow the request to succeed.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } }, "404" : { "description" : "Not Found - The requested resource cannot be found. Check the request URL if it matches with the endpoint described.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } }, "500" : { "description" : "Internal Server Error - Something went wrong on the server, check status site and/or report the issue. There's no need to really specify this any further (other than 503 below) as the client is powerless in fixing the condition that caused the error.", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } }, "503" : { "description" : "Service Unavailable - The API is temporarily unavailable. This is the only 500 code that allows for the client to try and remedy the condition (i.e. by retrying).", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/Error" } } } } }, "deprecated" : true, "security" : [ { "ING-Application-Security" : [ "greetings:view" ] } ] } } }, "components" : { "schemas" : { "Greeting" : { "required" : [ "id", "message", "messageTimestamp" ], "type" : "object", "properties" : { "message" : { "type" : "string", "description" : "A greeting message.", "example" : "Welcome to ING!" }, "id" : { "type" : "string", "description" : "A generated UUID.", "example" : "aba4b176-8834-467d-9c2a-ee6acfc8fceb" }, "messageTimestamp" : { "type" : "string", "description" : "The current time (GMT).", "example" : "2023-07-30 15:42:17 GMT" } } }, "Error" : { "required" : [ "code", "innerErrors", "message", "severity" ], "type" : "object", "properties" : { "severity" : { "type" : "string", "example" : "CRITICAL", "enum" : [ "CRITICAL", "ERROR", "WARNING", "INFO" ] }, "code" : { "type" : "string", "description" : "Service-specific error code/keyword", "example" : "errParseFailed" }, "message" : { "type" : "string", "description" : "A descriptive error message for the consumer", "example" : "Unexpected end of file (missing a terminator/close bracket?)" }, "source" : { "type" : "string", "description" : "Optional source descriptor for this error", "example" : "system76" }, "target" : { "type" : "string", "description" : "Key/value pair indicating which input property caused the error" }, "innerErrors" : { "minItems" : 0, "type" : "array", "items" : { "$ref" : "#/components/schemas/InnerError" } } }, "description" : "Error message." }, "InnerError" : { "required" : [ "code", "message", "severity" ], "type" : "object", "properties" : { "severity" : { "type" : "string", "example" : "CRITICAL", "enum" : [ "CRITICAL", "ERROR", "WARNING", "INFO" ] }, "code" : { "type" : "string", "description" : "Service-specific error code/keyword", "example" : "errParseFailed" }, "message" : { "type" : "string", "description" : "A descriptive error message for the consumer", "example" : "Unexpected end of file (missing a terminator/close bracket?)" }, "source" : { "type" : "string", "description" : "Optional source descriptor for this error", "example" : "system76" }, "target" : { "type" : "string", "description" : "Key/value pair indicating which input property caused the error" } }, "description" : "Upstream error messages and detailed information on error state" } }, "securitySchemes" : { "ING-Application-Security" : { "type" : "oauth2", "flows" : { "clientCredentials" : { "tokenUrl" : "https://api.ing.com/oauth2/token", "scopes" : { "greetings:view" : "Get greetings messages." } } } } } } }