openapi: 3.0.4
info:
  title: Tracker Front End
  description: |
    The tracker front-end API facilitates tracking of cross border transaction status enabling financial institutions to conveniently access tracking data directly over the internet. This simplifies integration of tracking data into the financial institution's front-end applications which are used to serve the end-customer directly thus creating an enriched payment experience.
  contact:
    name: Developer Hub
    url: https://developer.swift.com
    email: developer-support@swift.com
  license:
    name: API Restricted License
    url: https://developer.swift.com/api-license
  version: 1.0.2
servers:
  - description: Sandbox environment
    url: https://sandbox.swift.com/swift-apitracker-frontend/v1
  - description: Test environment
    url: https://api-pilot.swift.com/swift-apitracker-frontend/v1
  - description: Production environment
    url: https://api.swift.com/swift-apitracker-frontend/v1

tags:
- name: Tracker Front End
  description:
      |
      Financial institutions can access tracking data over the internet through this API.
paths:
  /payment-transactions/{UETR}:
    get:
      tags:
        - Tracker Front End
      summary: Tracker Front End
      description: This allows financial institutions to get tracking data over the internet.
      operationId: getPaymentTransactionInfo
      parameters:
       - $ref: '#/components/parameters/UETR'
      responses:
        '200':
          description: Provides status and details about the payment transaction.
          headers:
            X-Request-ID:
              $ref: "#/components/headers/X-Request-ID"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentTransaction166'
              examples:
                payment_transaction_1:
                  $ref: '#/components/examples/payment_transaction_1'
                payment_transaction_2:
                  $ref: '#/components/examples/payment_transaction_2'
                payment_transaction_3:
                  $ref: '#/components/examples/payment_transaction_3'
                payment_transaction_4:
                  $ref: '#/components/examples/payment_transaction_4'
                payment_transaction_5:
                  $ref: '#/components/examples/payment_transaction_5'
        '400':
          $ref: '#/components/responses/400-BadRequest'
        '401':
          $ref: '#/components/responses/401-Unauthorized'
        '403':
          $ref: '#/components/responses/403-Forbidden'
        '404':
          $ref: '#/components/responses/404-NotFound'
        '406':
          $ref: '#/components/responses/406-NotAcceptable'
        '429':
          $ref: '#/components/responses/429-TooManyRequests'
        '500':
          $ref: '#/components/responses/500-InternalServerError'
        '503':
          $ref: '#/components/responses/503-ServerUnavailable'
        '504':
          $ref: '#/components/responses/504-GatewayTimeout'
        default:
          $ref: '#/components/responses/500-InternalServerError'
components:
  schemas:
    ErrorMessage:
      type: object
      required:
        - code
        - severity
        - text
      properties:
        severity:
          type: string
          enum:
             - Fatal
             - Transient
             - Logic
        code:
          type: string
        text:
          type: string
        user_message:
          type: string
        more_info:
          type: string
          format: uri
    PaymentTransaction166:
      x-MXComponent: PaymentTransaction166
      type: object
      description: Provides status and some details about the payment transaction.
      additionalProperties: false
      properties:
        UETR:
          x-MXComponent: UUIDv4Identifier
          description: |
            Universally Unique IDentifier (UUID) version 4, as described in IETC RFC 4122 "Universally Unique IDentifier (UUID) URN Namespace".

            Based on datatype UUIDv4Identifier: Universally Unique IDentifier (UUID) version 4, as described in IETC RFC 4122 "Universally Unique IDentifier (UUID) URN Namespace".
          type: string
          pattern: ^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$
        transaction_status:
          x-MXComponent: Max4Text
          description: |
            Specifies the status of a single payment transaction.

            Based on datatype Max4Text: Specifies a character string with a maximum length of 4 characters.
          type: string
          minLength: 1
          maxLength: 4
        transaction_status_description:
          x-MXComponent: Max50Text
          description: |
            Description of the transaction status.

            Based on datatype Max50Text: Specifies a character string with a maximum length of 50 characters.
          type: string
          minLength: 1
          maxLength: 50
        transaction_status_reason:
          x-MXComponent: Max4Text
          description: |
            Provides the reason code for the transaction status.

            Transaction Status Reasons can be "G009" and "G010". More values could be added in the future. "G009": Payment in progress. "G010": Payment arrived at beneficiary bank.

            Based on datatype Max4Text: Specifies a character string with a maximum length of 4 characters.
          type: string
          minLength: 1
          maxLength: 4
        transaction_initiation_date_time:
          x-MXComponent: ISONormalisedDateTime
          description: |
            Specifies the date and time of first valid message which starts the UETR transaction.

            Based on datatype ISONormalisedDateTime: an ISODateTime whereby all timezoned dateTime values are UTC.
          type: string
          pattern: ^(?:[1-9]\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.[0-9]+)?(?:Z)$
        transaction_last_update_date_time:
          x-MXComponent: ISONormalisedDateTime
          description: |
            Last date and time reflects the date time when the last update happens for a given UETR.


            Based on datatype ISONormalisedDateTime: an ISODateTime whereby all timezoned dateTime values are UTC.
          type: string
          pattern: ^(?:[1-9]\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.[0-9]+)?(?:Z)$
        transaction_completion_date_time:
          x-MXComponent: ISONormalisedDateTime
          description: |
            Specifies the time at which the instructed bank reports that the transaction has been completed (ACCC status).

            Based on datatype ISONormalisedDateTime: an ISODateTime whereby all timezoned dateTime values are UTC.
          type: string
          pattern: ^(?:[1-9]\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.[0-9]+)?(?:Z)$
        transaction_routing:
          type: array
          description: Information providing the movement within the transaction.
          items:
            $ref: '#/components/schemas/TransactionRouting1'
        transaction_instructed_amount:
          x-MXComponent: ActiveCurrencyAndAmount
          description: |
            Amount provided in the first leg of the transaction.


            Based on datatype ActiveCurrencyAndAmount: A number of monetary units specified in an active currency where the unit of currency is explicit and compliant with ISO 4217.
          type: object
          additionalProperties: false
          properties:
            currency:
              x-MXComponent: ActiveCurrencyCode
              type: string
              pattern: ^[A-Z]{3,3}$
            amount:
              type: string
              maxLength: 19
              pattern: ^0*(([0-9]{0,13}\.[0-9]{1,5})|([0-9]{0,14}\.[0-9]{1,4})|([0-9]{0,15}\.[0-9]{1,3})|([0-9]{0,16}\.[0-9]{1,2})|([0-9]{0,17}\.[0-9]{1,1})|([0-9]{0,18}\.)|0*|([0-9]{0,18}))$
          required:
          - currency
          - amount
        transaction_confirmed_amount:
          x-MXComponent: ActiveCurrencyAndAmount
          description: |
            Amount of money effectively credited to the creditor and confirmed to the tracker by the agent.

            Based on datatype ActiveCurrencyAndAmount: A number of monetary units specified in an active currency where the unit of currency is explicit and compliant with ISO 4217.
          type: object
          additionalProperties: false
          properties:
            currency:
              x-MXComponent: ActiveCurrencyCode
              type: string
              pattern: ^[A-Z]{3,3}$
            amount:
              type: string
              maxLength: 19
              pattern: ^0*(([0-9]{0,13}\.[0-9]{1,5})|([0-9]{0,14}\.[0-9]{1,4})|([0-9]{0,15}\.[0-9]{1,3})|([0-9]{0,16}\.[0-9]{1,2})|([0-9]{0,17}\.[0-9]{1,1})|([0-9]{0,18}\.)|0*|([0-9]{0,18}))$
          required:
          - currency
          - amount
      required:
      - UETR
      - transaction_status
      - transaction_status_description
      - transaction_initiation_date_time
      - transaction_last_update_date_time
      - transaction_routing
      - transaction_instructed_amount
    TransactionRouting1:
      x-MXComponent: TransactionRouting1
      type: object
      description: Contains the transaction routing information.
      additionalProperties: false
      properties:
        from:
          x-MXComponent: BICFIDec2014Identifier
          description: |
            Sender identification

            Based on datatype BICFIDec2014Identifier: Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362: 2014 - "Banking - Banking telecommunication messages - Business identifier code (BIC)".
          type: string
          pattern: ^[A-Z0-9]{4,4}[A-Z]{2,2}[A-Z0-9]{2,2}([A-Z0-9]{3,3}){0,1}$
        to:
          x-MXComponent: BICFIDec2014Identifier
          description: |
            Receiver identification

            Based on datatype BICFIDec2014Identifier: Code allocated to a financial institution by the ISO 9362 Registration Authority as described in ISO 9362: 2014 - "Banking - Banking telecommunication messages - Business identifier code (BIC)".
          type: string
          pattern: ^[A-Z0-9]{4,4}[A-Z]{2,2}[A-Z0-9]{2,2}([A-Z0-9]{3,3}){0,1}$
      required:
      - from
    UUIDv4Identifier:
      type: string
      description: Universally Unique IDentifier (UUID) version 4, as described in IETC RFC 4122 "Universally Unique IDentifier (UUID) URN Namespace".
      pattern: ^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$
  headers:
    X-Request-ID:
      required: true
      schema:
        type: string
        format: uuid
      examples:
        XRequestIdResponseHeader:
          value: ce480d68-2612-4aef-867a-e91566a1e012
      description: |-
        A Universally Unique Identifier (UUID) generated by the API Gateway for tracking and support purposes.
        The value received by a Service Provider in the X-Request-ID request header must be copied untouched in the X-Request-ID response header.
        This X-Request-ID response header must always be returned to the API consumer, even when the response is an error message.

  parameters:
    UETR:
      in: path
      name: UETR
      description: 'Identifies the payment transaction resource, events linked to this UETR will be retrieved'
      schema:
        $ref: '#/components/schemas/UUIDv4Identifier'
      required: true
      example: 97ed4827-7b6f-4491-a06f-b548d5a7512d
  responses:
    '400-BadRequest':
      description: Bad Request
      headers:
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
          examples:
            invalid_request:
              value:
                severity: Fatal
                code: Sw.gpi.InvalidRequest
                text: Invalid request
            missing_mandatory_field:
              value:
                severity: Fatal
                code: Sw.gpi.MandatoryFieldMissing
                text: Mandatory field %field missing
            invalid_rbac:
              value:
                severity: Fatal
                code: Sw.gpi.InvalidRBACRole
                text: RBAC Role
            request_malformed:
              value:
                severity: Fatal
                code: SwAP501
                text: API request is malformed
    '401-Unauthorized':
      description: 'Unauthorized'
      headers:
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
          examples:
            from_authorization_failure:
              value:
                severity: Fatal
                code: Sw.gpi.FromAuthorizationFailure
                text: From %From does not have the appropriate RBAC role
    '403-Forbidden':
      description: 'Forbidden'
      headers:
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
    '404-NotFound':
      description: 'Not Found'
      headers:
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
          examples:
            no_result_found:
              value:
                severity: Transient
                code: Sw.gpi.NoResultFound
                text: No result found
            resource_not_exist:
              value:
                severity: Fatal
                code: SwAP506
                text: 'Resource does not exist.'
    '406-NotAcceptable':
      description: 'Not Acceptable'
      headers:
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
    '429-TooManyRequests':
      description: 'Too Many Requests'
      headers:
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
          examples:
            too_many_requests:
              value:
                severity: Transient
                code: SwAP507
                text: 'Request cannot be processed at this time. Please try later. (header Retry-After indicates how long to wait before making a follow-up request).'
    '500-InternalServerError':
      description: 'Internal Server Error'
      headers:
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
          examples:
            service_internal_error:
              value:
                severity: Transient
                code: Sw.gpi.InternalError
                text: Internal error
    '503-ServerUnavailable':
      description: 'ServerUnavailable'
      headers:
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
    '504-GatewayTimeout':
      description: 'GatewayTimeout'
      headers:
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
    'default':
      description: 'Internal Server Error'
      headers:
        X-Request-ID:
          $ref: '#/components/headers/X-Request-ID'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
          examples:
            service_internal_error:
              value:
                severity: Transient
                code: Sw.gpi.InternalError
                text: Internal error
  examples:
    payment_transaction_1:
      summary: transaction returned with status ACCC
      value:
        UETR: 00f4be35-76f2-45c8-b4b3-565bbac5e86b
        transaction_status: ACCC
        transaction_status_description: Payment credited to beneficiary bank
        transaction_initiation_date_time: '2025-05-23T10:00:40Z'
        transaction_last_update_date_time: '2025-05-23T10:05:40Z'
        transaction_completion_date_time: '2025-05-23T10:05:40Z'
        transaction_routing:
          - from: BANKBEBICXX
            to: BANKUSBICXX
          - from: BANKUSBICXX
            to: BANKFRBICXX
        transaction_instructed_amount:
          currency: USD
          amount: '100000'
        transaction_confirmed_amount:
          currency: USD
          amount: '99550'


    payment_transaction_2:
      summary: transaction returned with status RJCT
      value:
        UETR: 01f5be56-76f2-45c8-b4b3-565bbac5e87b
        transaction_status: RJCT
        transaction_status_description: Payment rejected
        transaction_initiation_date_time: '2025-05-22T11:00:40Z'
        transaction_last_update_date_time: '2025-05-22T11:00:40Z'
        transaction_routing:
          - from: BANKUSBICXX
            to: BANKDEBICXX
        transaction_instructed_amount:
          currency: EUR
          amount: '500000'



    payment_transaction_3:
      summary: transaction returned with status PDNG
      value:
        UETR: eb3a88b0-3231-41f0-af8e-e5b86012efef
        transaction_status: PDNG
        transaction_status_description: Payment on hold
        transaction_initiation_date_time: '2025-05-21T09:00:40Z'
        transaction_last_update_date_time: '2025-05-22T11:00:40Z'
        transaction_routing:
          - from: BANKFRBICXX
            to: BANKUSBICXX
          - from: BANKUSBICXX
            to: BANKDEBICXX
          - from: BANKDEBICXX
            to: BANKBEBICXX
        transaction_instructed_amount:
          currency: JPY
          amount: '1000450'


    payment_transaction_4:
      summary: transaction returned with status ACSP (payment in progress)
      value:
        UETR: 0b84e2ee-0ba4-4abe-974d-6b32be179e1d
        transaction_status: ACSP
        transaction_status_description: Payment in progress
        transaction_status_reason: G009
        transaction_initiation_date_time: '2025-05-20T08:00:40Z'
        transaction_last_update_date_time: '2025-05-22T12:00:40Z'
        transaction_routing:
          - from: BANKITBICXX
            to: BANKUSBICXX
          - from: BANKUSBICXX
            to: BANKFRBICXX
          - from: BANKFRBICXX
            to: BANKBEBICXX
        transaction_instructed_amount:
          currency: GBP
          amount: '86000'



    payment_transaction_5:
      summary: transaction returned with status ACSP (Payment arrived at beneficiary bank)
      value:
        UETR: 44d4be35-76f2-45c8-b4b3-565bbac5e99f
        transaction_status: ACSP
        transaction_status_description: Payment arrived at beneficiary bank
        transaction_status_reason: G010
        transaction_initiation_date_time: '2025-05-20T07:00:40Z'
        transaction_last_update_date_time: '2025-05-22T11:00:40Z'
        transaction_routing:
          - from: BANKUSBICXX
            to: BANKNLBICXX
          - from: BANKNLBICXX
            to: BANKDEBICXX
        transaction_instructed_amount:
          currency: SEK
          amount: '1898000'
  securitySchemes:
    oauthBearerToken:
      type: http
      scheme: bearer
      bearerFormat: opaque OAuth 2.0
      description: |-

        The access token obtained as a result of OAuth 2.0 flows. SWIFT supports two OAuth grant types depending on the API service.
        * JWT-Bearer grant type [RFC 7523](https://tools.ietf.org/html/rfc7523)
        * Password grant type

        This API uses password grant type.

        Please visit [SWIFT OAuth Token API](https://developer.swift.com/swift-oauth-token-api) page for more information and examples on how to generate an OAuth token.

        In this declaration only the basic security element to transport the bearer token of an OAuth2 process is declared.
security:
  - oauthBearerToken: []
