openapi: 3.1.0 info: title: 'debiX Auth Provider API: Provider-to-SIX 3DS BulkSubscriptionManagement API' version: 2.1.9 description: Callback API used by the Authentication Provider and implemented by SIX / debiX servers: - url: https://api.six-group.com/api/debix-auth/provider-auth/v2 description: PROD - Internet - url: https://api-preprod.np.six-group.com/api/debix-auth/provider-auth/v2 description: TEST - Internet - url: https://api.six.ssfn.ch/api/debix-auth/provider-auth/v2 description: PROD - SSFN - url: https://api-preprod.np.six.ssfn.ch/api/debix-auth/provider-auth/v2 description: TEST - SSFN - url: https://api.p2p.six-group.com/api/debix-auth/provider-auth/v2 description: PROD - P2P - url: https://api-preprod.np.p2p.six-group.com/api/debix-auth/provider-auth/v2 description: TEST - P2P tags: - name: BulkSubscriptionManagement description: Manage the list of securities a business partner susbscribes to. paths: /bulk-subscription/securities/bulk-set: post: tags: - BulkSubscriptionManagement summary: Set the subscription of a business partner description: 'Sets the subscription (list of securities identified by their ISIN). The previous subscription is overwritten if and only if the operation is successful. If the request body includes bad data (typically, one element in the array is an invalid ISIN), 400 is returned and the subscription is not updated.' operationId: setSubscription parameters: - $ref: '#/components/parameters/CorrelationId' requestBody: content: application/vnd.api+json: schema: $ref: '#/components/schemas/SubscriptionRequestBody' required: true responses: '204': $ref: '#/components/responses/Http204NoContent' '400': $ref: '#/components/responses/Http400ErrorResponse_BulkSet' '401': $ref: '#/components/responses/Http401ErrorResponse' '403': $ref: '#/components/responses/Http403ErrorResponse' '413': $ref: '#/components/responses/Http413ErrorResponse' '429': $ref: '#/components/responses/Http429ErrorResponse' '500': $ref: '#/components/responses/Http500ErrorResponse' '503': $ref: '#/components/responses/Http503ErrorResponse' '504': $ref: '#/components/responses/Http504ErrorResponse' /bulk-subscription/securities/{isin}: summary: A security contained in a subscription list of a business partner for the bulk service. parameters: - $ref: '#/components/parameters/SecurityID' - $ref: '#/components/parameters/CorrelationId' put: tags: - BulkSubscriptionManagement summary: Add a security to the subscription description: 'Addition of a security (identified by its ISIN) to the subscription of a business partner for the bulk service. This operation is idempotent.' operationId: addSecurityToSubscription responses: '204': $ref: '#/components/responses/Http204NoContent' '400': $ref: '#/components/responses/Http400ErrorResponse_AddIsin' '401': $ref: '#/components/responses/Http401ErrorResponse' '403': $ref: '#/components/responses/Http403ErrorResponse' '429': $ref: '#/components/responses/Http429ErrorResponse' '500': $ref: '#/components/responses/Http500ErrorResponse' '503': $ref: '#/components/responses/Http503ErrorResponse' '504': $ref: '#/components/responses/Http504ErrorResponse' delete: tags: - BulkSubscriptionManagement summary: Delete a security from the subscription description: Removal of a security (identified by its ISIN) from the subscription of a business partner for the bulk service. operationId: deleteSecurityFromSubscription responses: '204': $ref: '#/components/responses/Http204NoContent' '400': $ref: '#/components/responses/Http400ErrorResponse_RemoveIsin' '401': $ref: '#/components/responses/Http401ErrorResponse' '403': $ref: '#/components/responses/Http403ErrorResponse' '404': $ref: '#/components/responses/Http404ErrorResponse_NoIsin' '429': $ref: '#/components/responses/Http429ErrorResponse' '500': $ref: '#/components/responses/Http500ErrorResponse' '503': $ref: '#/components/responses/Http503ErrorResponse' '504': $ref: '#/components/responses/Http504ErrorResponse' /bulk-subscription/securities: summary: Subscription list of securities for a business partner. description: Manage the subscription list of securities for a business partner. get: tags: - BulkSubscriptionManagement summary: Get the list of securities the business partner is subscribed to. description: Get the subscription list of securities for a business partner. operationId: getSubscription parameters: - $ref: '#/components/parameters/CorrelationId' - $ref: '#/components/parameters/IfNoneMatch' responses: '200': $ref: '#/components/responses/Http200Subscription' '304': $ref: '#/components/responses/Http304NotModified' '400': $ref: '#/components/responses/Http400ErrorResponse_GetSubscription' '401': $ref: '#/components/responses/Http401ErrorResponse' '403': $ref: '#/components/responses/Http403ErrorResponse' '429': $ref: '#/components/responses/Http429ErrorResponse' '500': $ref: '#/components/responses/Http500ErrorResponse' '503': $ref: '#/components/responses/Http503ErrorResponse' '504': $ref: '#/components/responses/Http504ErrorResponse' components: schemas: ResourceSubscriptionAttributes: required: - subscription type: object properties: subscription: $ref: '#/components/schemas/Subscription' description: A subscription (i.e., list of ISINs) for a business partner as a resource. ErrorDetail: required: - status type: object properties: type: type: string description: 'A URI reference (RFC3986) that describes the problem type (in the context of the provided API). Should resolve to a human-readable document.' format: uri default: about:blank title: type: string description: A short, human-readable summary of the problem type in English. example: Not Found status: maximum: 599 minimum: 100 type: integer description: The HTTP status code (RFC7231, Section 6) generated by the origin server for this occurrence of the problem. format: int32 example: 400 detail: type: string description: A human-readable explanation specific to this occurrence of the problem. example: ISIN 'US012071998' does not exist. instance: type: string description: A URI reference (RFC3986) that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. format: uri example: https://www.example.com/books/1234 description: Detailed description of an error to help remediation. It follows RFC 7807 (https://datatracker.ietf.org/doc/html/rfc7807). ResponseSubscriptionQuery: required: - data type: object properties: data: $ref: '#/components/schemas/ResourceSubscription' description: HTTP 200 response (OK) for the query about the subscription of a business partner for the bulk service. ResourceSubscription: required: - attributes type: object properties: attributes: $ref: '#/components/schemas/ResourceSubscriptionAttributes' description: '' allOf: - $ref: '#/components/schemas/PropertiesBasicResource' Error: required: - message type: object properties: message: type: string description: A human-readable explanation specific to this error. example: Unauthorized errorDetail: description: Additional information about the error. allOf: - $ref: '#/components/schemas/ErrorDetail' description: Description of an error to help remediation. ErrorDetail400: type: object description: Detailed description of a 400 error to help remediation. It extends RFC 7807 (https://datatracker.ietf.org/doc/html/rfc7807) with missing and invalid parameters information. allOf: - $ref: '#/components/schemas/ErrorDetail' - properties: invalidParams: minItems: 1 type: array description: List of parameters with invalid values. items: $ref: '#/components/schemas/InvalidParameter' missingParams: minItems: 1 type: array description: List of missing parameters. items: $ref: '#/components/schemas/MissingParameter' InvalidParameter: required: - in - name - value type: object properties: in: description: Location of the invalid parameter. allOf: - $ref: '#/components/schemas/ParameterLocation' name: type: string description: Name of the invalid parameter. reason: type: string description: The reason why the parameter's value is invalid. value: type: string description: The invalid value. description: Description of a parameter with invalid value. ETag: pattern: ^(W\/)?"([^"]|\\")*"$ type: string description: The RFC7232 ETag (Entity Tag) header field (see https://www.rfc-editor.org/rfc/rfc7232#section-2.3) in a response provides the current entity-tag for the selected resource. An entity-tag is an opaque identifier for different versions of a resource over time, regardless whether multiple versions are valid at the same time. An entity-tag consists of an opaque quoted string, possibly prefixed by a weakness indicator ('W/'). example: W/"xyzzy" MissingParameter: required: - in - name type: object properties: in: description: Location of the missing parameter. allOf: - $ref: '#/components/schemas/ParameterLocation' name: type: string description: Name of the missing parameter. reason: type: string description: The reason why the parameter's value is missing. description: Description of a missing parameter. ApiGwError: required: - message type: object properties: message: type: string description: A human-readable explanation specific to this error. example: Unauthorized description: Description of an error as provided by the API GW to help remediation. SubscriptionRequestBodyData: required: - attributes - type type: object properties: type: maxLength: 255 minLength: 1 type: string description: Type of the resource. attributes: $ref: '#/components/schemas/ResourceSubscriptionAttributes' description: List of securities (identified by ISIN) a business partner is subscribed to for the bulk service. example: type: Subscription attributes: subscription: - US0378331005 - US5949181045 PropertiesBasicResource: required: - id - type type: object properties: id: type: string description: Identifier of the resource format: uuid type: maxLength: 255 minLength: 1 type: string description: Type of the resource. description: Properties of any resource. SubscriptionRequestBody: required: - data type: object properties: data: $ref: '#/components/schemas/SubscriptionRequestBodyData' description: List of securities (identified by ISIN) a business partner is subscribed to for the bulk service. example: data: type: Subscription attributes: subscription: - US0378331005 - US5949181045 ParameterLocation: type: string description: The location of the parameter in question enum: - BODY - PATH - QUERY - HEADER Subscription: maxItems: 400000 type: array description: List of securities (identified by ISIN) a business partner is subscribed to for the bulk service. example: - US0378331005 - US5949181045 items: $ref: '#/components/schemas/Isin' Error400: required: - message type: object properties: message: type: string description: A human-readable explanation specific to this error. example: Unauthorized errorDetail: description: Additional information about the error. allOf: - $ref: '#/components/schemas/ErrorDetail400' description: Description of a 400 error to help remediation. Isin: pattern: ^[A-Z]{2}([A-Z0-9]){9}[0-9]$ type: string description: 'The ISIN (International Securities Identification Number) uniquely identifies a financial instrument. See ISO 6166:2021: Financial services — International securities identification number (ISIN).' example: CH0038863350 XCorrelationIdType: pattern: ^[0-9A-Fa-f]{8}-?[0-9A-Fa-f]{4}-?4[0-9A-Fa-f]{3}-?[89ABab][0-9A-Fa-f]{3}-?[0-9A-Fa-f]{12}(#[1-9][0-9]*)?$ type: string description: Value of the correlation ID for the server, i.e., a UUID v4 (with or without the dash to separate the blocks), optionally followed by a '#' and a positive integer. headers: RateLimit-Remaining: description: 'Provides the remaining requests quota in the current time window (for the specific client). See the ''RateLimit Header Fields for HTTP'' (https://datatracker.ietf.org/doc/html/draft-polli-ratelimit-headers-01) for more information.' style: simple explode: false schema: minimum: 0 type: integer example: 1 RateLimit-Limit: description: 'Provides the the requests quota in the time window (i.e., the maximal number of acceptable requests for the client within the time window). See the ''RateLimit Header Fields for HTTP'' (https://datatracker.ietf.org/doc/html/draft-polli-ratelimit-headers-01) for more information.' style: simple explode: false schema: minimum: 0 type: integer example: 10 X-Correlation-Id: description: Correlation identifier of the original request. style: simple explode: false schema: $ref: '#/components/schemas/XCorrelationIdType' examples: As generated by client: value: ef199b05-d1ff-4a2b-b5ef-2bb3ab3f0820 As generated by API GW: value: ef199b05-d1ff-4a2b-b5ef-2bb3ab3f0820#23 RateLimit-Reset: description: 'Indicates the number of seconds until the quota resets. See the ''RateLimit Header Fields for HTTP'' (https://datatracker.ietf.org/doc/html/draft-polli-ratelimit-headers-01) for more information.' style: simple explode: false schema: minimum: 0 type: integer example: 50 Retry-After: description: 'Indicates the number of seconds the client ought to wait before making a follow-up request. See RFC7231, §7.1.3 (https://datatracker.ietf.org/doc/html/rfc7231#section-7.1.3). *Note: might be higher than ''RateLimit-Reset''.*' style: simple explode: false schema: minimum: 0 type: integer example: 50 ETag: description: Identifier of the current version of the resource. style: simple explode: false schema: $ref: '#/components/schemas/ETag' example: '"A39AC1BFFADB215999106EC2B74AAA"' parameters: IfNoneMatch: name: If-None-Match in: header description: The RFC7232 If-None-Match header field in a request requires the server to only operate on the resource if it does not match any of the provided entity-tags. If the provided entity-tag is `*`, it is required that the resource does not exist at all. required: false style: simple explode: false schema: type: string example: 7da7a728-f910-11e6-942a-68f728c1ba70 SecurityID: name: isin in: path description: Identifier of the security. required: true style: simple explode: false schema: $ref: '#/components/schemas/Isin' example: CH0038863350 CorrelationId: name: X-Correlation-Id in: header description: Correlation identifier for the request required: false style: simple explode: false schema: $ref: '#/components/schemas/XCorrelationIdType' examples: As generated by client: value: ef199b05-d1ff-4a2b-b5ef-2bb3ab3f0820 As generated by API GW: value: ef199b05-d1ff-4a2b-b5ef-2bb3ab3f0820#23 responses: Http503ErrorResponse: description: Service Unavailable headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' content: application/json: schema: $ref: '#/components/schemas/ApiGwError' examples: 503 Service Unavailable: value: message: unavailable Http404ErrorResponse_NoIsin: description: Not Found headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' RateLimit-Limit: $ref: '#/components/headers/RateLimit-Limit' RateLimit-Remaining: $ref: '#/components/headers/RateLimit-Remaining' RateLimit-Reset: $ref: '#/components/headers/RateLimit-Reset' content: application/json: schema: $ref: '#/components/schemas/Error' examples: 404 Not Found: value: message: Resource not found errorDetail: title: Not Found status: 404 detail: ISIN 'US012071998' does not exist. Http500ErrorResponse: description: Internal Server Error headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' content: application/json: schema: $ref: '#/components/schemas/Error' examples: 500 Internal Server Error: value: message: Server error errorDetail: title: Internal Server Error status: 500 detail: Something went wrong. Http400ErrorResponse_GetSubscription: description: Bad Request headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' RateLimit-Limit: $ref: '#/components/headers/RateLimit-Limit' RateLimit-Remaining: $ref: '#/components/headers/RateLimit-Remaining' RateLimit-Reset: $ref: '#/components/headers/RateLimit-Reset' content: application/json: schema: $ref: '#/components/schemas/Error400' examples: 400 Bad Request - Invalid header parameter: $ref: '#/components/examples/Error400_InvalidHeaderParam' Http204NoContent: description: No Content headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' RateLimit-Limit: $ref: '#/components/headers/RateLimit-Limit' RateLimit-Remaining: $ref: '#/components/headers/RateLimit-Remaining' RateLimit-Reset: $ref: '#/components/headers/RateLimit-Reset' content: application/vnd.api+json: {} Http400ErrorResponse_RemoveIsin: description: Bad Request headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' RateLimit-Limit: $ref: '#/components/headers/RateLimit-Limit' RateLimit-Remaining: $ref: '#/components/headers/RateLimit-Remaining' RateLimit-Reset: $ref: '#/components/headers/RateLimit-Reset' content: application/json: schema: $ref: '#/components/schemas/Error400' examples: 400 Bad Request - Invalid ISIN: $ref: '#/components/examples/Error400_InvalidPathParam' 400 Bad Request - Invalid header parameter: $ref: '#/components/examples/Error400_InvalidHeaderParam' Http400ErrorResponse_AddIsin: description: Bad Request headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' RateLimit-Limit: $ref: '#/components/headers/RateLimit-Limit' RateLimit-Remaining: $ref: '#/components/headers/RateLimit-Remaining' RateLimit-Reset: $ref: '#/components/headers/RateLimit-Reset' content: application/json: schema: $ref: '#/components/schemas/Error400' examples: 400 Bad Request - Subscription too big: $ref: '#/components/examples/Error400_SubscriptionTooBig' 400 Bad Request - Invalid ISIN: $ref: '#/components/examples/Error400_InvalidPathParam' 400 Bad Request - Invalid header parameter: $ref: '#/components/examples/Error400_InvalidHeaderParam' Http400ErrorResponse_BulkSet: description: Bad Request headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' RateLimit-Limit: $ref: '#/components/headers/RateLimit-Limit' RateLimit-Remaining: $ref: '#/components/headers/RateLimit-Remaining' RateLimit-Reset: $ref: '#/components/headers/RateLimit-Reset' content: application/json: schema: $ref: '#/components/schemas/Error400' examples: 400 Bad Request - Invalid content in request body: $ref: '#/components/examples/Error400_SubscriptionWithInvalidIsins' 400 Bad Request - Subscription too big: $ref: '#/components/examples/Error400_SubscriptionTooBig' 400 Bad Request - Invalid header parameter: $ref: '#/components/examples/Error400_InvalidHeaderParam' Http429ErrorResponse: description: Too Many Requests headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' RateLimit-Limit: $ref: '#/components/headers/RateLimit-Limit' RateLimit-Remaining: $ref: '#/components/headers/RateLimit-Remaining' RateLimit-Reset: $ref: '#/components/headers/RateLimit-Reset' Retry-After: $ref: '#/components/headers/Retry-After' content: application/json: schema: $ref: '#/components/schemas/ApiGwError' examples: 429 Too Many Requests: value: message: API rate limit exceeded Http403ErrorResponse: description: Forbidden headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' RateLimit-Limit: $ref: '#/components/headers/RateLimit-Limit' RateLimit-Remaining: $ref: '#/components/headers/RateLimit-Remaining' RateLimit-Reset: $ref: '#/components/headers/RateLimit-Reset' content: application/json: schema: $ref: '#/components/schemas/Error' examples: 403 Forbidden: value: message: Forbidden Http200Subscription: description: The list of securities a business partner is subscribed to for the bulk service. headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' ETag: $ref: '#/components/headers/ETag' RateLimit-Limit: $ref: '#/components/headers/RateLimit-Limit' RateLimit-Remaining: $ref: '#/components/headers/RateLimit-Remaining' RateLimit-Reset: $ref: '#/components/headers/RateLimit-Reset' content: application/vnd.api+json: schema: $ref: '#/components/schemas/ResponseSubscriptionQuery' examples: 200 Subscription: value: data: id: 95b1b467-bd69-4436-8181-96c16408c230 type: Subscription attributes: subscription: - US0378331005 - US5949181045 - CH0038863350 - CH0025751329 - CH0012221716 - US5949181045 - US9311421039 - GB00BP6MXD84 - INF277K01MZ6 - KR7319400008 Http504ErrorResponse: description: Gateway Timeout headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' content: application/json: schema: $ref: '#/components/schemas/ApiGwError' examples: 504 Service Unavailable: value: message: The upstream server is timing out. Http401ErrorResponse: description: Unauthorized headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' RateLimit-Limit: $ref: '#/components/headers/RateLimit-Limit' RateLimit-Remaining: $ref: '#/components/headers/RateLimit-Remaining' RateLimit-Reset: $ref: '#/components/headers/RateLimit-Reset' content: application/json: schema: $ref: '#/components/schemas/Error' examples: 401 Unauthorized - no certificate provided: value: message: No required TLS certificate was sent 401 Unauthorized - invalid certificate (no trust in certificate): value: message: TLS certificate failed verification 401 Unauthorized - not authorized (wrong client credentials): value: message: Unauthorized Http304NotModified: description: Not Modified headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' ETag: $ref: '#/components/headers/ETag' RateLimit-Limit: $ref: '#/components/headers/RateLimit-Limit' RateLimit-Remaining: $ref: '#/components/headers/RateLimit-Remaining' RateLimit-Reset: $ref: '#/components/headers/RateLimit-Reset' content: application/vnd.api+json: {} Http413ErrorResponse: description: Content Too Large headers: X-Correlation-Id: $ref: '#/components/headers/X-Correlation-Id' RateLimit-Limit: $ref: '#/components/headers/RateLimit-Limit' RateLimit-Remaining: $ref: '#/components/headers/RateLimit-Remaining' RateLimit-Reset: $ref: '#/components/headers/RateLimit-Reset' content: application/json: schema: $ref: '#/components/schemas/ApiGwError' examples: 413 Content Too Large: value: message: Request size limit exceeded examples: Error400_InvalidHeaderParam: value: message: 'header "X-Correlation-ID" validation failed with error: "failed to match pattern "^[0-9A-Fa-f]{8}-?[0-9A-Fa-f]{4}-?4[0-9A-Fa-f]{3}-?[89ABab][0-9A-Fa-f]{3}-?[0-9A-Fa-f]{12}" with ""' Error400_SubscriptionTooBig: value: message: Validation failed errorDetail: title: Bad Request status: 400 detail: Subscription is limited to 400'000 financial instruments, cannot set it larger. Error400_SubscriptionWithInvalidIsins: value: message: Validation failed errorDetail: title: Bad Request status: 400 detail: 'Subscription request contains the following invalid ISIN(s): ''DE000SD4J14'', ''CH104032437'', ''CH055341828''.' Error400_InvalidPathParam: value: message: 'path "isin" validation failed with error: "failed to match pattern "^[A-Z]{2}([A-Z0-9]){9}[0-9]$" with "CH003886335"'