2C2P Exchange Rate API

Retrieves currency exchange rates for a transaction, supporting dynamic currency conversion (DCC) and alternative-payment-method MCC exchange rates. JWT request and response, with a JWT+JWS secured variant available.

OpenAPI Specification

2c2p-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: 2C2P Payment Gateway API (PGW v4.3)
  description: >-
    Server-to-server REST interface for the 2C2P Payment Gateway. Every
    operation is an HTTPS POST under /payment/4.3/. IMPORTANT: on the wire, each
    request and response body is a single JSON Web Token (JWS) signed with the
    merchant's Secret Key using HMAC SHA-256 - the merchant is identified by the
    merchantID inside the signed payload, and there is no HTTP Authorization
    header. For readability this document models the DECODED JSON payloads
    (request `payload` and response `payload`) rather than the raw JWT string.
    The field schemas here are MODELED from the documented parameters and are a
    representative subset, not a byte-for-byte copy of 2C2P's contract; verify
    exact fields against developer.2c2p.com. Endpoint paths are confirmed from
    the 2C2P developer reference index.
  version: '4.3'
  contact:
    name: 2C2P Developer
    url: https://developer.2c2p.com
  x-transport-notes: >-
    All traffic is HTTPS request/response. Asynchronous results are delivered as
    a backend notification webhook (2C2P POSTs a signed JWT to the merchant's
    backendReturnUrl). There is no WebSocket or SSE transport.
servers:
  - url: https://pgw.2c2p.com/payment/4.3
    description: Production
  - url: https://sandbox-pgw.2c2p.com/payment/4.3
    description: Sandbox
tags:
  - name: Payment Token
    description: Initialize a payment and obtain a paymentToken.
  - name: Do Payment
    description: Execute a payment against a paymentToken.
  - name: Payment Option
    description: Retrieve available payment options and channel details.
  - name: Inquiry
    description: Query transaction result and status.
  - name: Maintenance
    description: Void / cancel, refund, and settle operations.
  - name: Tokens
    description: Card token and installment plan information.
  - name: Exchange Rate
    description: Currency exchange rates for DCC / cross-border.
paths:
  /paymentToken:
    post:
      operationId: paymentToken
      tags:
        - Payment Token
      summary: Create a payment token
      description: >-
        Initializes a payment and returns a paymentToken plus a webPaymentUrl
        for the hosted payment page. On the wire the request/response are JWTs
        (HS256, merchant secret key); the decoded payloads are modeled here.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentTokenRequest'
      responses:
        '200':
          description: Decoded payment token response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentTokenResponse'
  /payment:
    post:
      operationId: doPayment
      tags:
        - Do Payment
      summary: Do payment
      description: >-
        Executes a payment against a paymentToken, selecting the channel via the
        payment code (card, e-wallet, QR, installment, pay-later, loyalty) and
        supplying card / customer / browser / return-URL data.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DoPaymentRequest'
      responses:
        '200':
          description: Decoded do-payment response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DoPaymentResponse'
  /paymentOption:
    post:
      operationId: paymentOption
      tags:
        - Payment Option
      summary: Get payment options
      description: Returns the payment options / channels available for a paymentToken.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentOptionRequest'
      responses:
        '200':
          description: Decoded payment option response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
  /paymentOptionDetails:
    post:
      operationId: paymentOptionDetails
      tags:
        - Payment Option
      summary: Get payment option details
      description: Returns detailed metadata for a specific payment option / channel.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentOptionRequest'
      responses:
        '200':
          description: Decoded payment option details response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
  /paymentInquiry:
    post:
      operationId: paymentInquiry
      tags:
        - Inquiry
      summary: Payment inquiry
      description: >-
        Retrieves the full result of a transaction by merchantID + invoiceNo,
        returning amount, status, approval / reference codes, masked account /
        card token, installment, and FX details.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentInquiryRequest'
      responses:
        '200':
          description: Decoded payment inquiry response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentInquiryResponse'
  /transactionStatus:
    post:
      operationId: transactionStatus
      tags:
        - Inquiry
      summary: Transaction status
      description: Returns the current status of a transaction by paymentToken or invoiceNo.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentInquiryRequest'
      responses:
        '200':
          description: Decoded transaction status response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentInquiryResponse'
  /cancelTransaction:
    post:
      operationId: cancelTransaction
      tags:
        - Maintenance
      summary: Cancel / void a transaction
      description: >-
        Voids or cancels a transaction. Refund and settle operations are covered
        by the 2C2P payment maintenance guides.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelTransactionRequest'
      responses:
        '200':
          description: Decoded cancel/void response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
  /cardTokenInfo:
    post:
      operationId: cardTokenInfo
      tags:
        - Tokens
      summary: Card token info
      description: Retrieves information about a stored card token for recurring / returning-buyer use.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CardTokenInfoRequest'
      responses:
        '200':
          description: Decoded card token info response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
  /cardInstallmentPlanInfo:
    post:
      operationId: cardInstallmentPlanInfo
      tags:
        - Tokens
      summary: Card installment plan info
      description: Returns the available installment plans for a card / merchant.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentInquiryRequest'
      responses:
        '200':
          description: Decoded installment plan info response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
  /exchangeRate:
    post:
      operationId: exchangeRate
      tags:
        - Exchange Rate
      summary: Exchange rate
      description: >-
        Retrieves currency exchange rates for a transaction, supporting dynamic
        currency conversion (DCC). A JWT+JWS secured variant is also available.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExchangeRateRequest'
      responses:
        '200':
          description: Decoded exchange rate response payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
components:
  schemas:
    PaymentTokenRequest:
      type: object
      required:
        - merchantID
        - invoiceNo
        - description
        - amount
        - currencyCode
      properties:
        merchantID:
          type: string
          description: Merchant identifier issued by 2C2P.
        invoiceNo:
          type: string
          description: Unique merchant invoice / order number for this transaction.
        description:
          type: string
        amount:
          type: number
          description: Transaction amount.
        currencyCode:
          type: string
          description: ISO 4217 currency code (e.g. SGD, THB, USD).
        paymentChannel:
          type: array
          items:
            type: string
          description: Optional list of allowed payment channels.
        tokenize:
          type: boolean
          description: Request card tokenization for future / recurring use.
        cardTokens:
          type: array
          items:
            type: string
        recurring:
          type: boolean
        invoicePrefix:
          type: string
        frontendReturnUrl:
          type: string
          format: uri
          description: Browser redirect URL after payment.
        backendReturnUrl:
          type: string
          format: uri
          description: Server-to-server notification (webhook) URL.
        locale:
          type: string
    PaymentTokenResponse:
      type: object
      properties:
        webPaymentUrl:
          type: string
          format: uri
          description: Hosted payment page URL to redirect the customer to.
        paymentToken:
          type: string
        respCode:
          type: string
          description: Response code, e.g. "0000" for success.
        respDesc:
          type: string
    DoPaymentRequest:
      type: object
      required:
        - paymentToken
      properties:
        paymentToken:
          type: string
        payment:
          type: object
          description: The selected payment channel and its data.
          properties:
            code:
              type: object
              description: Channel / agent routing codes (channelCode, agentCode, etc.).
              additionalProperties: true
            data:
              type: object
              description: >-
                Channel-specific data - for cards, an encryptedCardInfo /
                securePayToken from Secure Fields plus cardholder details; for
                other methods, the corresponding fields.
              additionalProperties: true
        clientIP:
          type: string
        clientID:
          type: string
        locale:
          type: string
        responseReturnUrl:
          type: string
          format: uri
        browserDetails:
          type: object
          additionalProperties: true
    DoPaymentResponse:
      type: object
      properties:
        respCode:
          type: string
        respDesc:
          type: string
        data:
          type: string
          description: Redirect / 3DS / channel action data where applicable.
        channelCode:
          type: string
        invoiceNo:
          type: string
    PaymentOptionRequest:
      type: object
      required:
        - paymentToken
      properties:
        paymentToken:
          type: string
        locale:
          type: string
    PaymentInquiryRequest:
      type: object
      required:
        - merchantID
      properties:
        merchantID:
          type: string
        invoiceNo:
          type: string
        paymentToken:
          type: string
        locale:
          type: string
    PaymentInquiryResponse:
      type: object
      properties:
        merchantID:
          type: string
        invoiceNo:
          type: string
        amount:
          type: number
        currencyCode:
          type: string
        transactionDateTime:
          type: string
        agentCode:
          type: string
        channelCode:
          type: string
        approvalCode:
          type: string
        referenceNo:
          type: string
        accountNo:
          type: string
          description: Masked account / card number.
        cardToken:
          type: string
        installmentPeriod:
          type: integer
        interestRate:
          type: number
        fxAmount:
          type: number
        fxRate:
          type: number
        fxCurrencyCode:
          type: string
        transactionStatus:
          type: string
        respCode:
          type: string
        respDesc:
          type: string
    CancelTransactionRequest:
      type: object
      required:
        - merchantID
        - invoiceNo
      properties:
        merchantID:
          type: string
        invoiceNo:
          type: string
    CardTokenInfoRequest:
      type: object
      required:
        - merchantID
        - cardToken
      properties:
        merchantID:
          type: string
        cardToken:
          type: string
        locale:
          type: string
    ExchangeRateRequest:
      type: object
      required:
        - merchantID
        - invoiceNo
      properties:
        merchantID:
          type: string
        invoiceNo:
          type: string
        amount:
          type: number
        currencyCode:
          type: string
    GenericResponse:
      type: object
      properties:
        respCode:
          type: string
        respDesc:
          type: string
      additionalProperties: true