> ## Documentation Index
> Fetch the complete documentation index at: https://docs.paysight.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Submit card and customer info for a product

> Processes a card payment for the specified product. Returns `HTTP 200` for all transaction outcomes (success, decline, 3DS pending, etc.). Non-200 responses indicate a request-level failure with no transaction created.

### Typical response flow

1. On success: `info = "Success"`, `subscribeSuccess` and/or `chargeSuccess` are `true`.
2. On decline: `info = "Error"`, `chargeSuccess = false`, `statusId` indicates the decline reason.
3. On 3DS required: `info = "Pending"`, `threeDSecureId` is populated — call `POST /api/{productId}/3ds` to complete.
4. On pre-processing error (no transaction): `info` is one of `"Failed"`, `"LimitReached"`, `"UserBlocked"`, or `"None"`, and `statusId = 0`. See the `error` field and the Error & Decline Handling Guide.




## OpenAPI

````yaml /api-reference/card-submit/paysight_card_submit_api.yaml post /api/{productId}
openapi: 3.0.0
info:
  title: Paysight Card Submit API
  version: 2.0.0
  description: >
    Submit credit card payment and customer info for a given product via
    Paysight.


    ## Response Overview


    The API returns `HTTP 200 OK` for the vast majority of outcomes, including
    declined transactions.

    `HTTP 400` is returned when the request body cannot be parsed, and `HTTP
    500` for unexpected server errors.

    Both `400` and `500` responses indicate that **no transaction was logged**.


    > **See also:** Error & Decline Handling Guide — a human-readable supplement
    covering

    > decision trees, retry guidance, and the complete `statusId` reference.


    ### The `info` Field


    Every `200` response includes an `info` field indicating the high-level
    outcome:


    | `info` value | Transaction logged? | Meaning |

    |---|:---:|---|

    | `Success` | ✅ | Transaction completed successfully. `subscribeSuccess`
    and/or `chargeSuccess` will be `true`. |

    | `Error` | ✅ | Transaction-level failure. A transaction was attempted;
    check `statusId` for the decline reason. |

    | `AlreadySubscribed` | ❌ | Customer is already subscribed to this product.
    No new transaction was created. |

    | `Pending` | ❌ | 3D Secure authentication is in progress. `threeDSecureId`
    is populated; call `POST /api/{productId}/3ds` to complete. |

    | `RedirectRequired` | ❌ | A redirect is required to complete the
    transaction. |

    | `Failed` | ❌ | Pre-processing validation failure. Check the `error` field.
    `statusId` will be `0`. |

    | `LimitReached` | ❌ | A rate or frequency limit was hit. Check the `error`
    field. `statusId` will be `0`. |

    | `UserBlocked` | ❌ | The user, card, BIN, or email is blocked. Check the
    `error` field. `statusId` will be `0`. |


    ### Errors Without a Transaction


    The following `info` / `error` combinations are returned when no transaction
    is logged.

    In all cases `statusId` will be `0`.


    #### `info: "Failed"` — validation failures


    | `error` value | Cause |

    |---|---|

    | `"Blocked"` | Request blocked at the platform level. |

    | `"Blocked Card"` | The specific card is blocked. |

    | `"Invalid expiry"` | Card `expiryMonth` or `expiryYear` is zero or
    missing. |

    | `"Invalid CVV"` | CVV/CVC value is invalid or missing. |

    | `"Invalid CC Number"` | Card number failed validation. |

    | `"Invalid Email"` | Email address is invalid or missing. |

    | `"VISA cards not Supported"` | VISA cards are not accepted for this
    product/MID. |

    | `"Mastercard cards not supported"` | Mastercard cards are not accepted for
    this product/MID. |

    | `"Discover cards not supported"` | Discover cards are not accepted for
    this product/MID. |

    | `"AMEX cards not supported"` | American Express cards are not accepted for
    this product/MID. |

    | `"MAESTRO cards not supported"` | Maestro cards are not accepted for this
    product/MID. |

    | `"Bin and Last4 required along with Encrypted data"` | When submitting
    encrypted card data, `bin` and `lastFour` must also be provided. |

    | `"Specified Mid not found"` | The `mid` field does not match any known
    MID. |

    | `"Specified Mid does not belong to Tenant account"` | The `mid` field
    references a MID from a different tenant. |


    #### `info: "LimitReached"` — rate / frequency limits


    | `error` value | Cause |

    |---|---|

    | `"CC entered too many times in quick succession"` | The same card number
    has been submitted too frequently in a short window. |

    | `"Email entered too many times for this product"` | The same email address
    has been used too many times for this product. |


    #### `info: "UserBlocked"` — blocked users / cards / BINs


    | `error` value | Cause |

    |---|---|

    | `"Blocked card"` | Card BIN is from a blocked country. |

    | `"Blocked"` | User is blacklisted (by email, card number, or BIN). |


    #### `info: "None"` — action required


    | `error` value | Cause |

    |---|---|

    | `"3DS-ACTION-REQUIRED"` | 3D Secure authentication must be completed
    before the transaction can proceed. |

    | `"MaxActiveSubsReached"` | Customer has reached the maximum number of
    active subscriptions for this product. |
servers:
  - description: Test Server
    url: https://test.paysight.io
  - description: Production Server
    url: https://secure.paysight.io
security:
  - ApiKeyAuth: []
tags:
  - name: Card
    description: Card payment submission and 3D Secure completion.
  - name: Session
    description: Session and customer contact info management.
externalDocs:
  description: Error & Decline Handling Guide
  url: https://docs.paysight.io/card-submit-error-handling
paths:
  /api/{productId}:
    post:
      tags:
        - Card
      summary: Submit card and customer info for a product
      description: >
        Processes a card payment for the specified product. Returns `HTTP 200`
        for all transaction outcomes (success, decline, 3DS pending, etc.).
        Non-200 responses indicate a request-level failure with no transaction
        created.


        ### Typical response flow


        1. On success: `info = "Success"`, `subscribeSuccess` and/or
        `chargeSuccess` are `true`.

        2. On decline: `info = "Error"`, `chargeSuccess = false`, `statusId`
        indicates the decline reason.

        3. On 3DS required: `info = "Pending"`, `threeDSecureId` is populated —
        call `POST /api/{productId}/3ds` to complete.

        4. On pre-processing error (no transaction): `info` is one of
        `"Failed"`, `"LimitReached"`, `"UserBlocked"`, or `"None"`, and
        `statusId = 0`. See the `error` field and the Error & Decline Handling
        Guide.
      operationId: submitCard
      parameters:
        - name: productId
          in: path
          required: true
          schema:
            type: integer
          description: >-
            ID of the Paysight product. This can be found at
            https://app.paysight.io/management/products
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitData'
      responses:
        '200':
          description: >
            Card submission result. Covers all transaction outcomes including
            success, all decline types, 3DS pending, already-subscribed, and
            pre-processing errors. Inspect `info` and `statusId` to determine
            the specific outcome. See the `SubmitResult` schema for the full
            `statusId` reference table.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmitResult'
              examples:
                success:
                  summary: Successful charge and subscription
                  value:
                    info: Success
                    subscribeSuccess: true
                    chargeSuccess: true
                    statusId: 3616
                    orderId: 1000123
                    submitOrderId: 1000123
                    transactionId: a1b2c3d4-0000-0000-0000-000000000001
                    amount: 9.99
                    mid: MID123
                    descriptor: EXAMPLE.COM
                    bin: '41111111'
                    last4: '1111'
                    binCountry: US
                    networkTokenized: false
                    applePay: false
                    googlePay: false
                    declineSalvage: false
                    gatewayResponses: []
                    subscriptionId: 500
                declined_issuer:
                  summary: Issuer decline
                  value:
                    info: Error
                    subscribeSuccess: false
                    chargeSuccess: false
                    statusId: 3617
                    error: Declined
                    message: Declined
                    orderId: 0
                    submitOrderId: 1000124
                    amount: 9.99
                    declineSalvage: false
                    gatewayResponses: []
                    subscriptionId: 0
                declined_insufficient_funds:
                  summary: Insufficient funds decline
                  value:
                    info: Error
                    subscribeSuccess: false
                    chargeSuccess: false
                    statusId: 3512
                    error: Insufficient Funds
                    message: Insufficient Funds
                    orderId: 0
                    submitOrderId: 1000125
                    amount: 9.99
                    declineSalvage: false
                    gatewayResponses: []
                    subscriptionId: 0
                decline_salvage:
                  summary: Subscribed despite insufficient funds (decline salvage)
                  value:
                    info: Error
                    subscribeSuccess: true
                    chargeSuccess: false
                    statusId: 3512
                    error: Insufficient Funds
                    message: Insufficient Funds
                    orderId: 1000126
                    submitOrderId: 1000127
                    amount: 9.99
                    declineSalvage: true
                    gatewayResponses: []
                    subscriptionId: 501
                three_ds_pending:
                  summary: 3D Secure authentication required
                  value:
                    info: Pending
                    subscribeSuccess: false
                    chargeSuccess: false
                    statusId: 0
                    threeDSecureId: ev_3ds_abc123xyz
                    orderId: 0
                    gatewayResponses: []
                    subscriptionId: 0
                already_subscribed:
                  summary: Customer already subscribed
                  value:
                    info: AlreadySubscribed
                    subscribeSuccess: false
                    chargeSuccess: false
                    statusId: 0
                    orderId: 1000050
                    gatewayResponses: []
                    subscriptionId: 0
                error_invalid_expiry:
                  summary: >-
                    Pre-processing error — invalid expiry (no transaction
                    logged)
                  value:
                    info: Failed
                    subscribeSuccess: false
                    chargeSuccess: false
                    statusId: 0
                    error: Invalid expiry
                    message: Invalid expiry date
                    gatewayResponses: []
                error_mid_not_found:
                  summary: Pre-processing error — MID not found (no transaction logged)
                  value:
                    info: Failed
                    subscribeSuccess: false
                    chargeSuccess: false
                    statusId: 0
                    error: Specified Mid not found
                    message: Specified Mid not found
                    gatewayResponses: []
        '400':
          description: >
            Bad Request. The request body could not be parsed as valid JSON.
            **No transaction is logged.**
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                success: false
                message: Invalid JSON body
        '500':
          description: >
            Internal Server Error. An unexpected server-side failure occurred.
            **No transaction is logged.**
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                success: false
                message: Unexpected Error at 2024-01-01 12:00:00
      security:
        - ApiKeyAuth: []
components:
  schemas:
    SubmitData:
      type: object
      required:
        - card
        - amount
        - email
      properties:
        paysightSession:
          type: string
          description: >-
            Unique session identifier from Paysight. Either this or
            partnerSession must be provided.
        partnerSession:
          type: string
          description: >-
            Session identifier from the partner's system. Either this or
            paysightSession must be provided.
        card:
          $ref: '#/components/schemas/Card'
        email:
          type: string
          description: Customer email address
        phone:
          type: string
          description: Customer phone number
        address:
          $ref: '#/components/schemas/Address'
        shippingAddress:
          $ref: '#/components/schemas/Address'
        amount:
          type: number
          description: Amount to charge in the transaction
        mid:
          type: string
          description: >-
            Override to explicitly set for the transaction. It will override the
            Paysight logic for selecting the MID. Omit by default.
        props:
          type: object
          description: Custom metadata as key-value pairs
          additionalProperties:
            type: string
        campaignId:
          type: integer
          description: >-
            Paysight assigned ID of the campaign. Please set as 0 (or omit)
            unless you have the appropriate Paysight value
        affiliateId:
          type: integer
          description: >-
            Paysight assigned ID of the traffic source / affiliate. Please set
            as 0 (or omit) unless you have the appropriate Paysight value
        campaignName:
          type: string
          description: >-
            Name (or alias or your identifier) of your campaign. If campaignId
            is 0 and this value is provided, Paysight will auto-assign or
            auto-create (if new value) the campaign record
        affiliateName:
          type: string
          description: >-
            Name (or alias or your identifier) of your affiliate/traffic source.
            If affiliateId is 0 and this value is provided, Paysight will
            auto-assign or auto-create (if new value) the affiliate (traffic
            source) record
        subAffiliate:
          type: string
          description: >-
            Sub-affiliate identifier, if applicable. This can be passed in the
            format 'primarysubid_secondarysubId' (or simply primarysubid if no
            secondary source is present). These fields are available as
            breakdowns in Reporting as Primary Sub ID and Secondary Sub ID
        trackhouseClickId:
          type: string
          description: Tracking click ID from Trackhouse. Not required
        threeDSecure:
          $ref: '#/components/schemas/ThreeDSecure'
        useragent:
          type: string
          description: User-Agent header from client request
        ip:
          type: string
          description: IP address of the client
        cascade:
          type: boolean
          description: >-
            If true, will attempt a cascade, i.e. a second authorization attempt
            on another MID if selection conditions are met
        applePay:
          type: boolean
          description: Set to true if this transaction should use Apple Pay
        shopify:
          $ref: '#/components/schemas/ShopifyData'
    SubmitResult:
      type: object
      properties:
        paysightSession:
          type: string
          description: Paysight session identifier
        partnerSession:
          type: string
          description: Partner session identifier
        subscribeSuccess:
          type: boolean
          description: Indicates if the subscription was created successfully.
        chargeSuccess:
          type: boolean
          description: Indicates if the charge transaction was fully captured.
        info:
          type: string
          description: >
            High-level outcome of the submission. Possible values:


            - `Success` – Transaction completed successfully. `subscribeSuccess`
            and/or `chargeSuccess` will be `true`.

            - `Error` – Transaction-level failure. A transaction was attempted;
            check `statusId` for the decline reason.

            - `Failed` – Pre-processing validation failure; no transaction was
            logged. Check the `error` field.

            - `LimitReached` – A rate or frequency limit was exceeded; no
            transaction was logged. Check the `error` field.

            - `UserBlocked` – The user, card, BIN, or email is blocked; no
            transaction was logged. Check the `error` field.

            - `AlreadySubscribed` – Customer is already subscribed; no new
            transaction was created.

            - `Pending` – Awaiting 3D Secure authentication; `threeDSecureId`
            will be populated. Call `POST /api/{productId}/3ds` to complete.

            - `RedirectRequired` – A redirect is required to complete the
            transaction.
          enum:
            - Success
            - Error
            - Failed
            - LimitReached
            - UserBlocked
            - None
            - AlreadySubscribed
            - Pending
            - RedirectRequired
        error:
          type: string
          description: >
            Specific error message. Interpretation depends on the accompanying
            `info` value.


            **When `info` is `"Error"`** (`statusId > 0`, transaction was
            attempted):

            This field contains the status description from the payment
            processor corresponding

            to the `statusId` value. See the `statusId` reference tables for the
            full list.


            **When `info` is `"Failed"`** (no transaction logged, `statusId:
            0`):

            - `"Blocked"` – Request blocked at the platform level.

            - `"Blocked Card"` – The specific card is blocked.

            - `"Invalid expiry"` – Card `expiryMonth` or `expiryYear` is zero or
            missing.

            - `"Invalid CVV"` – CVV/CVC value is invalid or missing.

            - `"Invalid CC Number"` – Card number failed validation.

            - `"Invalid Email"` – Email address is invalid or missing.

            - `"VISA cards not Supported"` – VISA cards are not accepted for
            this product/MID.

            - `"Mastercard cards not supported"` – Mastercard cards are not
            accepted for this product/MID.

            - `"Discover cards not supported"` – Discover cards are not accepted
            for this product/MID.

            - `"AMEX cards not supported"` – American Express cards are not
            accepted for this product/MID.

            - `"MAESTRO cards not supported"` – Maestro cards are not accepted
            for this product/MID.

            - `"Bin and Last4 required along with Encrypted data"` – `bin` and
            `lastFour` must be provided when submitting encrypted card data.

            - `"Specified Mid not found"` – The `mid` field does not match any
            known MID.

            - `"Specified Mid does not belong to Tenant account"` – The `mid`
            field references a MID from a different tenant.


            **When `info` is `"LimitReached"`** (no transaction logged,
            `statusId: 0`):

            - `"CC entered too many times in quick succession"` – The card
            number has been submitted too frequently in a short window.

            - `"Email entered too many times for this product"` – The email
            address has been used too many times for this product.


            **When `info` is `"UserBlocked"`** (no transaction logged,
            `statusId: 0`):

            - `"Blocked card"` – Card BIN is from a blocked country.

            - `"Blocked"` – User is blacklisted (by email, card number, or BIN).
        email:
          type: string
          description: Email address associated with the transaction.
        message:
          type: string
          description: >
            General message about the result. For pre-processing errors this
            mirrors the `error` field.

            For 3D Secure pending flows this will be empty; check
            `threeDSecureId` instead.
        orderId:
          type: integer
          description: Order identifier for the subscription or charge record.
        descriptor:
          type: string
          description: >-
            Credit card descriptor that will appear on the cardholder's
            statement.
        mid:
          type: string
          description: Merchant ID (MID number) used for the transaction.
        threeDSecureId:
          type: string
          description: >
            Identifier for the 3D Secure session. Populated only when `info` is
            `"Pending"`.

            Pass this value to `POST /api/{productId}/3ds` to complete the
            authentication flow.

            Null or empty in all other cases.
        transactionId:
          type: string
          description: Unique transaction identifier from the payment processor.
        amount:
          type: number
          description: Amount charged in the transaction currency.
        statusId:
          type: integer
          description: >
            Paysight transaction status code. `0` means no transaction was
            logged (pre-validation failure

            or unexpected error). All other values represent a processed
            transaction outcome.


            For the complete reference with retry guidance see the Error &
            Decline Handling Guide.


            ---


            ### Successful


            | ID | Status |

            |---|---|

            | 2636 | Transaction succeeded |

            | 3367 | Preauthorized |

            | 3616 | Approved |

            | 4165 | Card Verified |

            | 4173 | SUCCEEDED |

            | 4257 | Transaction Approved |


            ---


            ### Issuer Declines


            The issuing bank rejected the transaction. The card or account is
            the primary cause.


            | ID | Status |

            |---|---|

            | 2674 | Transaction declined for unknown reason |

            | 2677 | Transaction declined by authorization system |

            | 2683 | Transaction declined (suspecting manipulation) |

            | 2684 | Transaction declined (stolen card) |

            | 2690 | Transaction declined (card lost) |

            | 2693 | Transaction declined (restricted card) |

            | 2695 | Transaction declined (transaction not permitted) |

            | 2696 | Transaction declined (pick up card) |

            | 2882 | Account or user is blacklisted |

            | 3185 | Account Closed |

            | 3290 | Suspected Fraud |

            | 3613 | Issuer Declined |

            | 3614 | Issuer Declined MCC |

            | 3617 | Declined |

            | 3618 | Do not honor |

            | 3621 | Transaction not allowed |

            | 3629 | Call issuer for further information |

            | 3631 | Lost card |

            | 3632 | Stolen card |

            | 3635 | Declined - Stop all recurring payments |

            | 3637 | Declined - Update cardholder data available |

            | 3638 | Declined - Retry in a few days |

            | 3640 | Transaction error returned by processor |

            | 3654 | Transaction declined (additional customer authentication
            required) |

            | 3821 | Pick up card - F |

            | 3822 | Pick up card - SF |

            | 3823 | Pick up card - NF |

            | 4111 | ScaRequiredError |

            | 4174 | ADDRESS_VERIFICATION_FAILED_RISK_RULES |

            | 4175 | AUTHORIZATION_EXPIRED_OR_ALREADY_CAPTURED |

            | 4176 | BANK_ACCOUNT_CLOSED |

            | 4177 | BANK_ACCOUNT_FROZEN |

            | 4178 | CALL_ISSUER |

            | 4179 | CANCELLATION_VIA_API |

            | 4180 | CANCELLATION_VIA_DEVICE |

            | 4181 | CARD_ACCOUNT_CLOSED |

            | 4182 | CARD_NETWORK_ERROR |

            | 4183 | CARD_NOT_ACTIVATED_OR_BLOCKED |

            | 4184 | CARD_NOT_SUPPORTED |

            | 4185 | CARDHOLDER_PREVENTED_RECURRING_TRANSACTION |

            | 4186 | COMMUNICATION_ERROR |

            | 4187 | CVV_FAILED_RISK_RULES |

            | 4191 | DO_NOT_HONOR |

            | 4192 | DUPLICATE_TRANSACTION |

            | 4193 | EXCEEDED_CARDHOLDER_INPUT_TIME_LIMIT |

            | 4194 | EXCEEDS_APPROVAL_LIMIT |

            | 4195 | EXCEEDS_WITHDRAWAL_FREQUENCY_LIMIT |

            | 4197 | FRAUD_DETECTED |

            | 4198 | FRAUD_DETECTED_BY_FINIX |

            | 4199 | FRAUD_DETECTED_BY_ISSUER |

            | 4200 | GENERIC_DECLINE |

            | 4202 | INCOMPLETE_TRANSACTION |

            | 4205 | INVALID_AMOUNT |

            | 4211 | INVALID_ISSUER |

            | 4212 | INVALID_ROUTING_NUMBER |

            | 4213 | INVALID_TRANSACTION |

            | 4214 | ISSUER_POLICY_VIOLATION |

            | 4215 | LOST_OR_STOLEN_CARD |

            | 4216 | MAX_TRANSACTION_AMOUNT_EXCEEDED |

            | 4217 | NO_BANK_ACCOUNT_FOUND |

            | 4218 | NON_TRANSACTION_ACCOUNT |

            | 4219 | PAYMENT_STOPPED |

            | 4220 | PICK_UP_CARD |

            | 4221 | RESTRICTED_CARD |

            | 4222 | RESUBMIT_TRANSACTION |

            | 4223 | ALLOWABLE_NUMBER_OF_PIN_ENTRY_TRIES_EXCEEDED |

            | 4224 | CANNOT_VERIFY_PIN |

            | 4226 | CRYPTOGRAPHIC_ERROR_FOUND_IN_PIN |

            | 4227 | ERROR |

            | 4228 | EXCEEDS_APPROVAL_AMOUNT_LIMIT |

            | 4229 | FILE_TEMPORARILY_NOT_AVAILABLE |

            | 4230 | FINANCIAL_INSTITUTION_NOT_FOUND |

            | 4232 | INVALID_AMOUNT_OR_CURRENCY |

            | 4233 | INVALID_MERCHANT |

            | 4234 | ISSUER_INOPERATIVE |

            | 4235 | LOST_CARD_PICK_UP_FRAUD_ACCOUNT |

            | 4236 | NEGATIVE_RESULTS |

            | 4237 | NO_ACTION_TAKEN |

            | 4238 | NO_CHECKING_ACCOUNT |

            | 4239 | NO_CREDIT_ACCOUNT |

            | 4240 | NO_SAVINGS_ACCOUNT |

            | 4241 | NO_SUCH_ISSUER |

            | 4243 | PICK_UP_CARD_FRAUD_ACCOUNT |

            | 4244 | PICK_UP_CARD_NO_FRAUD |

            | 4245 | RE_ENTER_TRANSACTION |

            | 4246 | REFER_TO_CARD_ISSUER |

            | 4247 | STOLEN_CARD_PICK_UP_FRAUD_ACCOUNT |

            | 4248 | STOP_PAYMENT_ORDER |

            | 4249 | SURCHARGE_AMOUNT_NOT_SUPPORTED |

            | 4250 | SUSPECTED_FRAUD |

            | 4251 | TRANSACTION_AMOUNT_EXCEEDS_PREAUTHORIZED_APPROVAL_AMOUNT |

            | 4252 | TRANSACTION_DOES_NOT_FULFILL_AML_REQUIREMENT |

            | 4253 | TRANSACTION_NOT_COMPLETED_LAW_VIOLATION |

            | 4254 | UNABLE_TO_LOCATE_RECORD |

            | 4255 | Rejected (NMI Fraud block) |

            | 4256 | TRANSACTION_NOT_PERMITTED |

            | 4265 | Card Type Not Accepted |

            | 4266 | ACH Not Accepted |

            | 4267 | AVS Mismatch |

            | 4268 | Merchant Does Not Accept Card Type |

            | 4279 | Declined - Pick Up Card |

            | 4280 | Voice Authorization Required |

            | 4290 | Card Type Not Accepted by Processor |

            | 4303 | Declined - Fraud Score Too High |

            | 4307 | Declined - AVS and Card Code Filter |


            ---


            ### Insufficient Funds


            | ID | Status |

            |---|---|

            | 2687 | Transaction declined (limit exceeded) |

            | 3512 | Insufficient Funds |

            | 3619 | Insufficient funds |

            | 3620 | Over limit |

            | 4203 | INSUFFICIENT_FUNDS |

            | 4242 | NOT_SUFFICIENT_FUNDS |

            | 4281 | Insufficient Funds |


            ---


            ### Invalid Card Details


            The card number, expiry, CVV, or holder name is invalid or failed
            verification.


            | ID | Status |

            |---|---|

            | 2676 | Transaction declined (invalid card) |

            | 2682 | Transaction declined (wrong expiry date) |

            | 2707 | Transaction declined (invalid CVV — amount may be reserved
            for a few business days) |

            | 2708 | Transaction declined (UserAccount Number/ID unknown) |

            | 3137 | Card Expired |

            | 3142 | cc/bank account holder not valid |

            | 3149 | Invalid cc number/brand combination |

            | 3256 | Invalid credit card number |

            | 3625 | Expired card |

            | 3627 | Invalid card security code |

            | 3628 | Invalid PIN |

            | 4105 | InvalidCardError |

            | 4196 | EXPIRED_CARD |

            | 4201 | INACTIVE_CARD |

            | 4204 | INVALID_ACCOUNT_NUMBER |

            | 4206 | INVALID_BANK_ACCOUNT_NUMBER |

            | 4207 | INVALID_BANK_ACCOUNT_VALIDATION_CHECK |

            | 4208 | INVALID_CARD |

            | 4209 | INVALID_CARD_NUMBER_OR_EXPIRED_CARD |

            | 4210 | INVALID_CVV |

            | 4225 | CARD_AUTHENTICATION_FAILED |

            | 4231 | INCORRECT_PIN |

            | 4258 | Invalid Credit Card Number |

            | 4259 | Invalid Expiration Date |

            | 4260 | Credit Card Expired |

            | 4274 | Invalid Amount |

            | 4275 | Invalid Account Number |

            | 4276 | Invalid ABA Code |

            | 4277 | Card Code Mismatch |

            | 4282 | Invalid Card Code |

            | 4295 | Required Field Missing |

            | 4299 | Invalid Credit Card Number Format |

            | 4306 | Declined - Card Code Mismatch |


            ---


            ### Other / System Errors


            Gateway configuration issues, platform-level blocks, duplicate
            detection, communication

            failures, and other non-issuer, non-card errors. No transaction may
            be retried without

            resolving the underlying cause.


            | ID | Status |

            |---|---|

            | 0 | None — no transaction logged |

            | 2 | Failed |

            | 1614 | Unsubscribed |

            | 1789 | Submitted (gateway-level submission status) |

            | 2680 | Transaction declined (amount exceeds credit) |

            | 2681 | Transaction declined (format error) |

            | 2686 | Transaction declined (too many invalid tries) |

            | 2858 | AVS Check Failed (amount reserved but will be released) |

            | 2884 | Email blacklisted |

            | 2887 | BIN Blacklisted (Paysight) |

            | 2890 | Duplicate Transaction |

            | 2892 | Max transactions per account already exceeded |

            | 2913 | Channel/Merchant is disabled (no processing possible) |

            | 2927 | Channel/Merchant not configured for this payment type |

            | 2931 | Invalid payment data (currency or sub type not configured)
            |

            | 3027 | Test accounts not allowed in production |

            | 3089 | Invalid authentication information |

            | 3140 | Request contains no cc/bank account holder |

            | 3448 | Failed AVS |

            | 3610 | OMIT STATE |

            | 3622 | Incorrect payment information |

            | 3623 | No such card issuer |

            | 3624 | No card number on file with issuer |

            | 3636 | Declined - Stop this recurring program |

            | 3639 | Transaction was rejected by gateway |

            | 3641 | Invalid merchant configuration |

            | 3642 | Merchant account is inactive |

            | 3643 | Communication error |

            | 3644 | Communication error with issuer |

            | 3645 | Duplicate transaction at processor |

            | 3646 | Processor format error |

            | 3647 | Invalid transaction information |

            | 3648 | Processor feature not available |

            | 3649 | Unsupported card type |

            | 3808 | BIN country blocked |

            | 3809 | Amount exceeds max ticket |

            | 3814 | Name Blacklisted |

            | 3818 | Invalid US State Code |

            | 4079 | ConfigurationError |

            | 4080 | CommunicationError |

            | 4082 | AccountError |

            | 4083 | TimeoutError |

            | 4088 | InputDataMissingError |

            | 4089 | InputDataFormatError |

            | 4090 | InputDataInvalidError |

            | 4093 | WorkflowError |

            | 4095 | ReferenceWorkflowError |

            | 4104 | ProcessingError |

            | 4107 | ExpiredCardError |

            | 4115 | CardBlacklistError |

            | 4116 | BinBlacklistError |

            | 4119 | BlacklistError |

            | 4130 | IrisFilterDeclinedError |

            | 4135 | IpNotWhitelistedError |

            | 4159 | RemoteSystemError |

            | 4160 | RemoteConfigurationError |

            | 4162 | RemoteWorkflowError |

            | 4166 | Authorized then Voided/Cancelled |

            | 4167 | Strong Customer Authentication Required |

            | 4168 | BIN Blacklisted (Client) |

            | 4169 | Daily threshold exceeded |

            | 4170 | Custom descriptors are not allowed |

            | 4171 | Specified API key not found |

            | 4172 | 3DS Failed |

            | 4261 | Duplicate Transaction |

            | 4262 | Invalid Merchant Authentication |

            | 4263 | Invalid Transaction ID |

            | 4264 | Transaction Not Found |

            | 4269 | Transaction Not Eligible for Settlement |

            | 4270 | Transaction Already Settled |

            | 4271 | Authorization Code Required |

            | 4272 | Invalid Relay Response URL |

            | 4273 | Processing Error - Try Again |

            | 4278 | Transaction Security Failure |

            | 4283 | Transaction Under Review |

            | 4284 | Processing Error - Connection Issue |

            | 4285 | Processing Error - System Timeout |

            | 4286 | Processing Error - Gateway Issue |

            | 4287 | Elavon Configuration Error |

            | 4288 | Processing Error - Retry Available |

            | 4289 | Processing Error - Server Issue |

            | 4291 | Paymentech Configuration Error |

            | 4292 | Processor Configuration Invalid |

            | 4293 | FDC Configuration Error |

            | 4294 | Merchant Password Invalid |

            | 4296 | VITAL Configuration Error |

            | 4297 | Processor Setup Error |

            | 4298 | Settlement Failed After Authorization |

            | 4300 | Global Payment System Configuration Error |

            | 4301 | Invalid Currency Code |

            | 4302 | Transaction Must Be Encrypted |

            | 4304 | Missing Required Field Information |

            | 4305 | Invalid Terminal ID |

            | 4308 | Session Expired or Invalid |

            | 4309 | Settlement Amount Exceeds Authorization |

            | 4310 | Partial Reversals Not Accepted |

            | 4311 | Amount Exceeds Maximum Allowed |

            | 4312 | Transaction Awaiting Settlement |

            | 4313 | Credit Exceeds Original Amount |

            | 4314 | Client Notification Failed |
        declineSalvage:
          type: boolean
          description: >
            `true` if the customer was subscribed even though the charge was
            declined

            (e.g. a grace-period subscription on an insufficient-funds decline).
            In this

            case `subscribeSuccess` may be `true` while `chargeSuccess` is
            `false`.
        merchantAccountId:
          type: integer
          description: >-
            Paysight internal ID for the Merchant Account used for the
            transaction.
        midPortalUrl:
          type: string
          description: >-
            Optional portal URL defined on the Paysight Brand entry. See
            https://app.paysight.io/management/brands/
        bin:
          type: string
          description: Bank Identification Number (first 8 digits of PAN).
        binCountry:
          type: string
          description: Country of the BIN (ISO 3166-1 alpha-2) if available, e.g. `"US"`.
        last4:
          type: string
          description: Last 4 digits of the card number.
        eci:
          type: string
          description: |
            Electronic Commerce Indicator for 3D Secure transactions.
            `"02"` / `"05"` = fully authenticated (liability shift applies).
            `"01"` / `"06"` = attempted authentication.
        networkTokenized:
          type: boolean
          description: >-
            Indicates whether the transaction was processed using a network
            token.
        submitOrderId:
          type: integer
          description: >
            Identifier for the card-submit event. When the submit does **not**
            result in a

            subscription this equals `orderId`. When a subscription is created
            (even if the

            charge fails) this value differs from `orderId`.
        applePay:
          type: boolean
          description: Indicates if the transaction was processed as an Apple Pay payment.
        googlePay:
          type: boolean
          description: Indicates if the transaction was processed as a Google Pay payment.
        gatewayResponses:
          type: array
          items:
            $ref: '#/components/schemas/GatewayResponse'
          description: >-
            Raw gateway responses from each processing attempt (useful for
            debugging declines).
        subscriptionId:
          type: integer
          description: >
            Paysight subscription ID created by this submit. `0` if no
            subscription was created.
    ErrorResponse:
      type: object
      description: >-
        Returned for HTTP 400 and HTTP 500 responses. No transaction is logged
        for these errors.
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          description: A description of the error.
          example: Invalid JSON body
    Card:
      type: object
      required:
        - name
        - pan
        - expiryMonth
        - expiryYear
        - cvv
      properties:
        name:
          type: string
          description: Full name on the card e.g "John Doe"
        pan:
          type: string
          description: Primary Account Number (card number)
        expiryMonth:
          type: integer
          description: Card expiry month (1–12)
        expiryYear:
          type: integer
          description: Card expiry year (4-digit)
        cvv:
          type: string
          description: Card security code
        bin:
          type: string
          description: Bank Identification Number (first 6 digits of PAN) (Optional)
        lastFour:
          type: string
          description: Last 4 digits of the card number (Optional)
        brand:
          type: string
          description: Card brand (e.g. Visa, MasterCard) (Optional)
    Address:
      type: object
      properties:
        firstName:
          type: string
          description: First name of the customer
        lastName:
          type: string
          description: Last name of the customer
        street:
          type: string
          description: Street address
        city:
          type: string
          description: City
        state:
          type: string
          description: State or province
        zip:
          type: string
          description: ZIP or postal code
        country:
          type: string
          description: Country (ISO 3166-1 alpha-2 code preferred)
    ThreeDSecure:
      type: object
      properties:
        enabled:
          type: boolean
          description: Whether 3D Secure is enabled
        cancelOnFail:
          type: boolean
          description: Whether to cancel authorization even if 3D Secure fails
    ShopifyData:
      type: object
      description: >-
        Shopify-specific checkout options. Only required for Shopify
        integrations.
      properties:
        savePaymentMethod:
          type: boolean
          description: If true, saves the payment method for subsequent use on this session
        usePreviousPaymentMethod:
          type: boolean
          description: If true, uses the previously saved payment method for this session
        optIn:
          type: boolean
          description: If true, the customer is also opted in to a subscription
        cart:
          $ref: '#/components/schemas/ShopifyCart'
    GatewayResponse:
      type: object
      properties:
        gateway:
          type: string
          description: Payment Gateway used e.g NMI
        httpStatus:
          type: integer
          description: HTTP status code from the gateway
        response:
          type: string
          description: Response body from gateway
    ShopifyCart:
      type: object
      description: Shopify cart item for the transaction
      required:
        - quantity
        - variant
        - product
      properties:
        quantity:
          type: integer
          description: Quantity of the item
        variant:
          type: integer
          format: int64
          description: Shopify variant ID
        product:
          type: integer
          format: int64
          description: Shopify product ID
        saleStrategyId:
          type: integer
          description: Paysight sale strategy ID to apply (optional)
        saleStrategyAmount:
          type: number
          description: Override amount for the sale strategy (optional)
        discountCodeId:
          type: integer
          description: Paysight discount code ID to apply (optional)
        discountCodeAmount:
          type: number
          description: Override amount for the discount code (optional)
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: This will be provided by Paysight

````