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

# PrimerCheckoutData

```ts theme={"dark"}
interface PrimerCheckoutData {
  payment?: PrimerCheckoutDataPayment;
  additionalInfo?: PrimerCheckoutAdditionalInfo;
}

interface PrimerCheckoutDataPayment {
  id?: string;
  orderId?: string;
  paymentFailureReason?: PrimerPaymentErrorCode;
}

enum PrimerPaymentErrorCode {
  FAILED = "payment-failed",
  CANCELLED_BY_CUSTOMER = "cancelled-by-customer",
}
```

<Expandable title="Properties" defaultOpen>
  <ResponseField name="payment" type="IPrimerCheckoutDataPayment">
    <Expandable title="Properties">
      <ResponseField name="id" type="string">
        Primer's unique identifier for the payment.
      </ResponseField>

      <ResponseField name="orderId" type="string">
        Your order identifier as provided in the client session.
      </ResponseField>

      <ResponseField name="paymentFailureReason" type="PrimerPaymentErrorCode">
        Can be either `payment-failed` which is an error from the PSP side, or `cancelled-by-customer` which means the failure initiated on the customer side. I.e. cancelling a 3DS flow.
      </ResponseField>
    </Expandable>
  </ResponseField>

  <ResponseField name="additionalInfo" type="object">
    Custom information, that depends on the payment method.

    <Expandable title="Variations">
      <ResponseField name="XenditCheckoutVoucherAdditionalInfo">
        <Expandable title="Properties" defaultOpen>
          <ResponseField name="expiresAt" type="String" required />

          <ResponseField name="couponCode" type="String" required />

          <ResponseField name="retailerName" type="String" required />
        </Expandable>
      </ResponseField>

      <ResponseField name="PromptPayCheckoutAdditionalInfo">
        <Expandable title="Properties" defaultOpen>
          <ResponseField name="expiresAt" type="String" required />

          <ResponseField name="qrCodeUrl" type="String?" />

          <ResponseField name="qrCodeBase64" type="String" required />
        </Expandable>
      </ResponseField>

      <ResponseField name="MultibancoCheckoutAdditionalInfo">
        <Expandable title="Properties" defaultOpen>
          <ResponseField name="expiresAt" type="String" required />

          <ResponseField name="entity" type="String" required />

          <ResponseField name="reference" type="String" required />
        </Expandable>
      </ResponseField>
    </Expandable>
  </ResponseField>
</Expandable>
