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

# Cancel or validate a Preauthorization

This call is used to manually close the preauthorization hold period before the `ExpirationDate`, thereby releasing the preauthorized funds. 

The `PaymentStatus` can be set to:

* `CANCELED` when no preauthorized pay-ins have been made to capture funds. Trying to cancel a used preauthorization returns an error.
* `VALIDATED` when at least one preauthorized pay-in has been made to capture funds. Trying to validate an unused preauthorization returns an error.

<Warning>
  **Caution – Canceling or validating a preauthorization is irreversible**

  A preauthorization with the `CANCELED` or `VALIDATED` status can’t be reused.
</Warning>

### Path parameters

<ParamField path="PreauthorizationId" type="string" required>
  The unique identifier of the preauthorization.
</ParamField>

### Body parameters

<ParamField body="PaymentStatus" type="string" required>
  **Allowed values:** `CANCELED`, `VALIDATED`

  The status of the preauthorization object:

  * `WAITING` – The remaining preauthorized funds can be captured by making one or several preauthorized pay-ins. Pay-ins can only be made against a preauthorization with the `WAITING` status.
  * `CANCELED` – The preauthorization was canceled manually before any preauthorized pay-ins were made, or it was canceled automatically because the authorization failed.
  * `EXPIRED` – The hold period on the preauthorized funds has ended without any preauthorized pay-ins taking place.
  * `VALIDATED` – During the hold period: Indicates that all the preauthorized funds have been captured (`RemainingFunds` is zero) and no more preauthorized pay-ins can be made. After the hold period: Indicates that at least one capture was made during the hold period.
</ParamField>

### Responses

<AccordionGroup>
  <Accordion title="200 - Canceled (no captures)">
    <ResponseField name="Id" type="string">
      Max. length: 255 characters

      The unique identifier of the preauthorization.
    </ResponseField>

    <ResponseField name="Tag" type="string">
      Max. length: 255 characters

      Custom data that you can add to this object.\
      For preauthorizations, you can use this parameter to identify corresponding information regarding the user or transaction on your platform.
    </ResponseField>

    <ResponseField name="CreationDate" type="Unix timestamp">
      The date and time at which the object was created.
    </ResponseField>

    <ResponseField name="AuthorId" type="string">
      The unique identifier of the user at the source of the transaction.
    </ResponseField>

    <ResponseField name="DebitedFunds" type="object">
      Information about the preauthorized funds.

      <Expandable title="properties">
        <ResponseField name="Currency" type="string">
          **Returned values:** The three-letter <a href="/api-reference/overview/data-formats" target="_blank">ISO 4217 code</a> (EUR, GBP, etc.) of a <a href="/guides/currencies" target="_blank">supported currency</a> (depends on feature, contract, and activation settings).

          The currency of the preauthorized funds.
        </ResponseField>

        <ResponseField name="Amount" type="integer">
          An amount of money in the smallest sub-division of the currency (e.g., EUR 12.60 would be represented as `1260` whereas JPY 12 would be represented as just `12`).
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="RemainingFunds" type="object">
      Information about the remaining preauthorized funds.

      <Expandable title="properties">
        <ResponseField name="Currency" type="string">
          **Returned values:** The three-letter <a href="/api-reference/overview/data-formats" target="_blank">ISO 4217 code</a> (EUR, GBP, etc.) of a <a href="/guides/currencies" target="_blank">supported currency</a> (depends on feature, contract, and activation settings).

          The currency of the preauthorized funds.
        </ResponseField>

        <ResponseField name="Amount" type="integer">
          An amount of money in the smallest sub-division of the currency (e.g., EUR 12.60 would be represented as `1260` whereas JPY 12 would be represented as just `12`).
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="AuthorizationDate" type="Unix timestamp">
      The date and time at which successful authorization occurred. If authorization failed, the value is `null`.
    </ResponseField>

    <ResponseField name="Status" type="string">
      **Returned values:** `CREATED`, `SUCCEEDED`, `FAILED`

      The status of the authorization.
    </ResponseField>

    <ResponseField name="PaymentStatus" type="string">
      **Returned values:** `WAITING`, `CANCELED`, `EXPIRED`, `VALIDATED`

      The status of the preauthorization object:

      * `WAITING` – The remaining preauthorized funds can be captured by making one or several preauthorized pay-ins. Pay-ins can only be made against a preauthorization with the `WAITING` status.
      * `CANCELED` – The preauthorization was canceled manually before any preauthorized pay-ins were made, or it was canceled automatically because the authorization failed.
      * `EXPIRED` – The hold period on the preauthorized funds has ended without any preauthorized pay-ins taking place.
      * `VALIDATED` – During the hold period: Indicates that all the preauthorized funds have been captured (`RemainingFunds` is zero) and no more preauthorized pay-ins can be made. After the hold period: Indicates that at least one capture was made during the hold period.
    </ResponseField>

    <ResponseField name="ExpirationDate" type="Unix timestamp">
      The date and time at which the hold period ends and the preauthorized funds are released.\
      At the expiration date, the preauthorization’s `PaymentStatus` changes to `EXPIRED` if no captures were made or `VALIDATED` if at least one capture was made.
    </ResponseField>

    <ResponseField name="PayInId" type="string">
      The unique identifier of the pay-in.
    </ResponseField>

    <ResponseField name="ResultCode" type="string">
      The code indicating the result of the operation. This information is mostly used to <a href="/errors/codes">handle errors</a> or for filtering purposes.
    </ResponseField>

    <ResponseField name="ResultMessage" type="string">
      The explanation of the result code.
    </ResponseField>

    <ResponseField name="SecureMode" type="string">
      **Returned values:** `DEFAULT`, `FORCE`, `NO_CHOICE`

      The mode applied for the 3DS2 protocol for CB, Visa, and Mastercard. The options are:

      * `DEFAULT` – Requests an exemption to strong customer authentication (SCA), and thus a frictionless payment experience, if allowed by your Mangopay contract and accepted by the issuer.
      * `FORCE` – Requests SCA.
      * `NO_CHOICE` – Leaves the choice to the issuer whether to allow for a frictionless payment experience or to enforce SCA.
    </ResponseField>

    <ResponseField name="CardId" type="string">
      The unique identifier of the Card object, obtained during the card registration process.
    </ResponseField>

    <ResponseField name="SecureModeReturnURL" type="string">
      Max. length: 255 characters

      The URL to which users are automatically returned after 3DS2 if it is triggered (i.e., if the `SecureModeNeeded` parameter is set to `true`).
    </ResponseField>

    <ResponseField name="SecureModeRedirectURL" type="string">
      Max. length: 255 characters

      The URL to which to redirect the user to proceed to 3DS2 validation.
    </ResponseField>

    <ResponseField name="SecureModeNeeded" type="boolean">
      Whether or not the `SecureMode` was used.
    </ResponseField>

    <ResponseField name="PaymentType" type="string">
      **Returned values:** `CARD`, `DIRECT_DEBIT`, `PREAUTHORIZED`, `BANK_WIRE`

      The type of pay-in.
    </ResponseField>

    <ResponseField name="ExecutionType" type="string">
      **Returned values:** `WEB`, `DIRECT`, `EXTERNAL_INSTRUCTION`

      The type of execution for the pay-in.
    </ResponseField>

    <ResponseField name="StatementDescriptor" type="string">
      Max. length: 10 characters; only alphanumeric and spaces

      Custom description to appear on the user’s bank statement along with the platform name. Different banks may show more or less information. See the <a href="/bank-statements">Customizing bank statement references</a> article for details.
    </ResponseField>

    <ResponseField name="Culture" type="string">
      **Returned values:** One of the supported languages in the <a href="/api-reference/overview/data-formats">ISO 639-1 format</a>: DE, EN, ES, FR, IT, NL, PL, PT.

      The language in which the payment page is to be displayed.
    </ResponseField>

    <ResponseField name="SecurityInfo" type="object">
      Information regarding security and anti-fraud tools.

      <Expandable title="properties">
        <ResponseField name="AVSResult" type="string">
          The result of the Address Verification System check (only available for UK, US, and Canada).
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="MultiCapture" type="boolean">
      **Default value:** true

      Whether multiple captures are activated for the preauthorization.
    </ResponseField>

    <ResponseField name="BrowserInfo" type="object">
      Information about the browser used by the end user (author) to perform the payment.

      <Expandable title="properties">
        <ResponseField name="AcceptHeader" type="string">
          The exact content of the HTTP accept headers as sent to the platform from the end user’s browser.
        </ResponseField>

        <ResponseField name="JavaEnabled" type="boolean">
          Whether or not the end user’s browser has the ability to execute Java.
        </ResponseField>

        <ResponseField name="Language" type="string">
          Format: Two-letter language code (ISO 639-1 alpha-2) followed by two-letter country code (ISO 3166-1 alpha-2), separated by a hyphen (example: `en-US`; pattern:`^[a-zA-Z]{2}(-[a-zA-Z]{2})?$`)

          The language of the browser.
        </ResponseField>

        <ResponseField name="ColorDepth" type="integer">
          The value representing the depth of the screen’s color palette for displaying images, in bits per pixel.
        </ResponseField>

        <ResponseField name="ScreenHeight" type="integer">
          Max. length: 6 characters

          The height of the screen in pixels.
        </ResponseField>

        <ResponseField name="ScreenWidth" type="integer">
          Max. length: 6 characters

          The width of the screen in pixels.
        </ResponseField>

        <ResponseField name="TimeZoneOffset" type="integer">
          The difference in minutes between the browser’s timezone and UTC.
        </ResponseField>

        <ResponseField name="UserAgent" type="string">
          Max. length: 255 characters

          The exact content of the HTTP User-Agent header.
        </ResponseField>

        <ResponseField name="JavascriptEnabled" type="boolean">
          Whether or not the end user’s browser has the ability to execute JavaScript.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="IpAddress" type="string">
      The IP address of the end user initiating the transaction, in IPV4 or IPV6 format.
    </ResponseField>

    <ResponseField name="Billing" type="object">
      **Default value:** FirstName, LastName, and Address information of the Shipping object if any, otherwise the user (author).

      Information about the end user billing address. If left empty, the default values will be automatically taken into account.

      <Expandable title="properties">
        <ResponseField name="FirstName" type="string">
          The first name of the user.
        </ResponseField>

        <ResponseField name="LastName" type="string">
          Max. length: 100 characters

          The last name of the user.
        </ResponseField>

        <ResponseField name="Address" type="object">
          Information about the billing address.

          <Expandable title="properties">
            <ResponseField name="AddressLine1" type="string">
              Max. length: 255 characters

              The first line of the address.
            </ResponseField>

            <ResponseField name="AddressLine2" type="string">
              Max. length: 255 characters

              The second line of the address.
            </ResponseField>

            <ResponseField name="City" type="string">
              Max. length: 255 characters

              The city of the address.
            </ResponseField>

            <ResponseField name="Region" type="string">
              Max. length: 255 characters

              The region of the address. This field is optional except if the `Country` is US, CA, or MX.
            </ResponseField>

            <ResponseField name="PostalCode" type="string">
              Max. length: 255 characters

              The postal code of the address. The postal code can contain the following characters: alphanumeric, dashes, and spaces.
            </ResponseField>

            <ResponseField name="Country" type="string">
              Format: Two-letter country code ([ISO 3166-1 alpha-2 format](/api-reference/overview/data-formats))

              The country of the address.
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="Shipping" type="object">
      **Default value:** FirstName, LastName, and Address information of the Billing object, if supplied, otherwise of the user (author).

      Information about the end user’s shipping address. If left empty, the default values will be automatically taken into account.

      <Expandable title="properties">
        <ResponseField name="FirstName" type="string">
          The first name of the user.
        </ResponseField>

        <ResponseField name="LastName" type="string">
          Max. length: 100 characters

          The last name of the user.
        </ResponseField>

        <ResponseField name="Address" type="object">
          Information about the shipping address.

          <Expandable title="properties">
            <ResponseField name="AddressLine1" type="string">
              Max. length: 255 characters

              The first line of the address.
            </ResponseField>

            <ResponseField name="AddressLine2" type="string">
              Max. length: 255 characters

              The second line of the address.
            </ResponseField>

            <ResponseField name="City" type="string">
              Max. length: 255 characters

              The city of the address.
            </ResponseField>

            <ResponseField name="Region" type="string">
              Max. length: 255 characters

              The region of the address. This field is optional except if the `Country` is US, CA, or MX.
            </ResponseField>

            <ResponseField name="PostalCode" type="string">
              Max. length: 255 characters

              The postal code of the address. The postal code can contain the following characters: alphanumeric, dashes, and spaces.
            </ResponseField>

            <ResponseField name="Country" type="string">
              Format: Two-letter country code ([ISO 3166-1 alpha-2 format](/api-reference/overview/data-formats))

              The country of the address.
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="Requested3DSVersion" type="string">
      **Returned values:** `V1`, `V2_1`

      The 3DS protocol version to be applied to the transaction.
    </ResponseField>

    <ResponseField name="Applied3DSVersion" type="string | null">
      **Returned values:** `V1`, `V2_1`

      The 3DS protocol version applied to the transaction.
    </ResponseField>

    <ResponseField name="PreferredCardNetwork" type="string">
      **Returned values:** `VISA`, `MASTERCARD`, `CB`, `MAESTRO`

      The card network to use, as chosen by the cardholder, in case of <a href="/guides/payment-methods/card/co-branded">co-branded cards</a>.
    </ResponseField>

    <ResponseField name="CardInfo" type="string">
      Information about the card used for the transaction.

      If the information or data is not available, `null` is returned.

      <Expandable title="properties">
        <ResponseField name="BIN" type="string">
          The 6-digit bank identification number (BIN) of the card issuer.
        </ResponseField>

        <ResponseField name="IssuingBank" type="string">
          The name of the card issuer.
        </ResponseField>

        <ResponseField name="IssuerCountryCode" type="string">
          Format: Two-letter country code ([ISO 3166-1 alpha-2 format](/api-reference/overview/data-formats))

          The country where the card was issued.
        </ResponseField>

        <ResponseField name="Type" type="string">
          **Returned values:** `DEBIT`, `CREDIT`, `CHARGE CARD`.

          The type of card product.
        </ResponseField>

        <ResponseField name="Brand" type="string">
          The card brand. Examples include: `AMERICAN EXPRESS`, `DISCOVER`, `JCB`, `MASTERCARD`, `VISA`, etc.

          **Note:** The possible returned values are numerous and liable to evolve over time.
        </ResponseField>

        <ResponseField name="SubType" type="string">
          The subtype of the card product. Examples include: `CLASSIC`, `GOLD`, `PLATINUM`, `PREPAID`, etc.

          **Note:** The possible returned values are numerous and liable to evolve over time.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Accordion>

  <Accordion title="200 - Validated following successful capture">
    <ResponseField name="Id" type="string">
      Max. length: 255 characters

      The unique identifier of the preauthorization.
    </ResponseField>

    <ResponseField name="Tag" type="string">
      Max. length: 255 characters

      Custom data that you can add to this object.\
      For preauthorizations, you can use this parameter to identify corresponding information regarding the user or transaction on your platform.
    </ResponseField>

    <ResponseField name="CreationDate" type="Unix timestamp">
      The date and time at which the object was created.
    </ResponseField>

    <ResponseField name="AuthorId" type="string">
      The unique identifier of the user at the source of the transaction.
    </ResponseField>

    <ResponseField name="DebitedFunds" type="object">
      Information about the preauthorized funds.

      <Expandable title="properties">
        <ResponseField name="Currency" type="string">
          **Returned values:** The three-letter <a href="/api-reference/overview/data-formats" target="_blank">ISO 4217 code</a> (EUR, GBP, etc.) of a <a href="/guides/currencies" target="_blank">supported currency</a> (depends on feature, contract, and activation settings).

          The currency of the preauthorized funds.
        </ResponseField>

        <ResponseField name="Amount" type="integer">
          An amount of money in the smallest sub-division of the currency (e.g., EUR 12.60 would be represented as `1260` whereas JPY 12 would be represented as just `12`).
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="RemainingFunds" type="object">
      Information about the remaining preauthorized funds.

      <Expandable title="properties">
        <ResponseField name="Currency" type="string">
          **Returned values:** The three-letter <a href="/api-reference/overview/data-formats" target="_blank">ISO 4217 code</a> (EUR, GBP, etc.) of a <a href="/guides/currencies" target="_blank">supported currency</a> (depends on feature, contract, and activation settings).

          The currency of the preauthorized funds.
        </ResponseField>

        <ResponseField name="Amount" type="integer">
          An amount of money in the smallest sub-division of the currency (e.g., EUR 12.60 would be represented as `1260` whereas JPY 12 would be represented as just `12`).
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="AuthorizationDate" type="Unix timestamp">
      The date and time at which successful authorization occurred. If authorization failed, the value is `null`.
    </ResponseField>

    <ResponseField name="Status" type="string">
      **Returned values:** `CREATED`, `SUCCEEDED`, `FAILED`

      The status of the authorization.
    </ResponseField>

    <ResponseField name="PaymentStatus" type="string">
      **Returned values:** `WAITING`, `CANCELED`, `EXPIRED`, `VALIDATED`

      The status of the preauthorization object:

      * `WAITING` – The remaining preauthorized funds can be captured by making one or several preauthorized pay-ins. Pay-ins can only be made against a preauthorization with the `WAITING` status.
      * `CANCELED` – The preauthorization was canceled manually before any preauthorized pay-ins were made, or it was canceled automatically because the authorization failed.
      * `EXPIRED` – The hold period on the preauthorized funds has ended without any preauthorized pay-ins taking place.
      * `VALIDATED` – During the hold period: Indicates that all the preauthorized funds have been captured (`RemainingFunds` is zero) and no more preauthorized pay-ins can be made. After the hold period: Indicates that at least one capture was made during the hold period.
    </ResponseField>

    <ResponseField name="ExpirationDate" type="Unix timestamp">
      The date and time at which the hold period ends and the preauthorized funds are released.\
      At the expiration date, the preauthorization’s `PaymentStatus` changes to `EXPIRED` if no captures were made or `VALIDATED` if at least one capture was made.
    </ResponseField>

    <ResponseField name="PayInId" type="string">
      The unique identifier of the pay-in.
    </ResponseField>

    <ResponseField name="ResultCode" type="string">
      The code indicating the result of the operation. This information is mostly used to <a href="/errors/codes">handle errors</a> or for filtering purposes.
    </ResponseField>

    <ResponseField name="ResultMessage" type="string">
      The explanation of the result code.
    </ResponseField>

    <ResponseField name="SecureMode" type="string">
      **Returned values:** `DEFAULT`, `FORCE`, `NO_CHOICE`

      The mode applied for the 3DS2 protocol for CB, Visa, and Mastercard. The options are:

      * `DEFAULT` – Requests an exemption to strong customer authentication (SCA), and thus a frictionless payment experience, if allowed by your Mangopay contract and accepted by the issuer.
      * `FORCE` – Requests SCA.
      * `NO_CHOICE` – Leaves the choice to the issuer whether to allow for a frictionless payment experience or to enforce SCA.
    </ResponseField>

    <ResponseField name="CardId" type="string">
      The unique identifier of the Card object, obtained during the card registration process.
    </ResponseField>

    <ResponseField name="SecureModeReturnURL" type="string">
      Max. length: 255 characters

      The URL to which users are automatically returned after 3DS2 if it is triggered (i.e., if the `SecureModeNeeded` parameter is set to `true`).
    </ResponseField>

    <ResponseField name="SecureModeRedirectURL" type="string">
      Max. length: 255 characters

      The URL to which to redirect the user to proceed to 3DS2 validation.
    </ResponseField>

    <ResponseField name="SecureModeNeeded" type="boolean">
      Whether or not the `SecureMode` was used.
    </ResponseField>

    <ResponseField name="PaymentType" type="string">
      **Returned values:** `CARD`, `DIRECT_DEBIT`, `PREAUTHORIZED`, `BANK_WIRE`

      The type of pay-in.
    </ResponseField>

    <ResponseField name="ExecutionType" type="string">
      **Returned values:** `WEB`, `DIRECT`, `EXTERNAL_INSTRUCTION`

      The type of execution for the pay-in.
    </ResponseField>

    <ResponseField name="StatementDescriptor" type="string">
      Max. length: 10 characters; only alphanumeric and spaces

      Custom description to appear on the user’s bank statement along with the platform name. Different banks may show more or less information. See the <a href="/bank-statements">Customizing bank statement references</a> article for details.
    </ResponseField>

    <ResponseField name="Culture" type="string">
      **Returned values:** One of the supported languages in the <a href="/api-reference/overview/data-formats">ISO 639-1 format</a>: DE, EN, ES, FR, IT, NL, PL, PT.

      The language in which the payment page is to be displayed.
    </ResponseField>

    <ResponseField name="SecurityInfo" type="object">
      Information regarding security and anti-fraud tools.

      <Expandable title="properties">
        <ResponseField name="AVSResult" type="string">
          The result of the Address Verification System check (only available for UK, US, and Canada).
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="MultiCapture" type="boolean">
      **Default value:** true

      Whether multiple captures are activated for the preauthorization.
    </ResponseField>

    <ResponseField name="BrowserInfo" type="object">
      Information about the browser used by the end user (author) to perform the payment.

      <Expandable title="properties">
        <ResponseField name="AcceptHeader" type="string">
          The exact content of the HTTP accept headers as sent to the platform from the end user’s browser.
        </ResponseField>

        <ResponseField name="JavaEnabled" type="boolean">
          Whether or not the end user’s browser has the ability to execute Java.
        </ResponseField>

        <ResponseField name="Language" type="string">
          Format: Two-letter language code (ISO 639-1 alpha-2) followed by two-letter country code (ISO 3166-1 alpha-2), separated by a hyphen (example: `en-US`; pattern:`^[a-zA-Z]{2}(-[a-zA-Z]{2})?$`)

          The language of the browser.
        </ResponseField>

        <ResponseField name="ColorDepth" type="integer">
          The value representing the depth of the screen’s color palette for displaying images, in bits per pixel.
        </ResponseField>

        <ResponseField name="ScreenHeight" type="integer">
          Max. length: 6 characters

          The height of the screen in pixels.
        </ResponseField>

        <ResponseField name="ScreenWidth" type="integer">
          Max. length: 6 characters

          The width of the screen in pixels.
        </ResponseField>

        <ResponseField name="TimeZoneOffset" type="integer">
          The difference in minutes between the browser’s timezone and UTC.
        </ResponseField>

        <ResponseField name="UserAgent" type="string">
          Max. length: 255 characters

          The exact content of the HTTP User-Agent header.
        </ResponseField>

        <ResponseField name="JavascriptEnabled" type="boolean">
          Whether or not the end user’s browser has the ability to execute JavaScript.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="IpAddress" type="string">
      The IP address of the end user initiating the transaction, in IPV4 or IPV6 format.
    </ResponseField>

    <ResponseField name="Billing" type="object">
      **Default value:** FirstName, LastName, and Address information of the Shipping object if any, otherwise the user (author).

      Information about the end user billing address. If left empty, the default values will be automatically taken into account.

      <Expandable title="properties">
        <ResponseField name="FirstName" type="string">
          The first name of the user.
        </ResponseField>

        <ResponseField name="LastName" type="string">
          Max. length: 100 characters

          The last name of the user.
        </ResponseField>

        <ResponseField name="Address" type="object">
          Information about the billing address.

          <Expandable title="properties">
            <ResponseField name="AddressLine1" type="string">
              Max. length: 255 characters

              The first line of the address.
            </ResponseField>

            <ResponseField name="AddressLine2" type="string">
              Max. length: 255 characters

              The second line of the address.
            </ResponseField>

            <ResponseField name="City" type="string">
              Max. length: 255 characters

              The city of the address.
            </ResponseField>

            <ResponseField name="Region" type="string">
              Max. length: 255 characters

              The region of the address. This field is optional except if the `Country` is US, CA, or MX.
            </ResponseField>

            <ResponseField name="PostalCode" type="string">
              Max. length: 255 characters

              The postal code of the address. The postal code can contain the following characters: alphanumeric, dashes, and spaces.
            </ResponseField>

            <ResponseField name="Country" type="string">
              Format: Two-letter country code ([ISO 3166-1 alpha-2 format](/api-reference/overview/data-formats))

              The country of the address.
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="Shipping" type="object">
      **Default value:** FirstName, LastName, and Address information of the Billing object, if supplied, otherwise of the user (author).

      Information about the end user’s shipping address. If left empty, the default values will be automatically taken into account.

      <Expandable title="properties">
        <ResponseField name="FirstName" type="string">
          The first name of the user.
        </ResponseField>

        <ResponseField name="LastName" type="string">
          Max. length: 100 characters

          The last name of the user.
        </ResponseField>

        <ResponseField name="Address" type="object">
          Information about the shipping address.

          <Expandable title="properties">
            <ResponseField name="AddressLine1" type="string">
              Max. length: 255 characters

              The first line of the address.
            </ResponseField>

            <ResponseField name="AddressLine2" type="string">
              Max. length: 255 characters

              The second line of the address.
            </ResponseField>

            <ResponseField name="City" type="string">
              Max. length: 255 characters

              The city of the address.
            </ResponseField>

            <ResponseField name="Region" type="string">
              Max. length: 255 characters

              The region of the address. This field is optional except if the `Country` is US, CA, or MX.
            </ResponseField>

            <ResponseField name="PostalCode" type="string">
              Max. length: 255 characters

              The postal code of the address. The postal code can contain the following characters: alphanumeric, dashes, and spaces.
            </ResponseField>

            <ResponseField name="Country" type="string">
              Format: Two-letter country code ([ISO 3166-1 alpha-2 format](/api-reference/overview/data-formats))

              The country of the address.
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="Requested3DSVersion" type="string">
      **Returned values:** `V1`, `V2_1`

      The 3DS protocol version to be applied to the transaction.
    </ResponseField>

    <ResponseField name="Applied3DSVersion" type="string | null">
      **Returned values:** `V1`, `V2_1`

      The 3DS protocol version applied to the transaction.
    </ResponseField>

    <ResponseField name="PreferredCardNetwork" type="string">
      **Returned values:** `VISA`, `MASTERCARD`, `CB`, `MAESTRO`

      The card network to use, as chosen by the cardholder, in case of <a href="/guides/payment-methods/card/co-branded">co-branded cards</a>.
    </ResponseField>

    <ResponseField name="CardInfo" type="string">
      Information about the card used for the transaction.

      If the information or data is not available, `null` is returned.

      <Expandable title="properties">
        <ResponseField name="BIN" type="string">
          The 6-digit bank identification number (BIN) of the card issuer.
        </ResponseField>

        <ResponseField name="IssuingBank" type="string">
          The name of the card issuer.
        </ResponseField>

        <ResponseField name="IssuerCountryCode" type="string">
          Format: Two-letter country code ([ISO 3166-1 alpha-2 format](/api-reference/overview/data-formats))

          The country where the card was issued.
        </ResponseField>

        <ResponseField name="Type" type="string">
          **Returned values:** `DEBIT`, `CREDIT`, `CHARGE CARD`.

          The type of card product.
        </ResponseField>

        <ResponseField name="Brand" type="string">
          The card brand. Examples include: `AMERICAN EXPRESS`, `DISCOVER`, `JCB`, `MASTERCARD`, `VISA`, etc.

          **Note:** The possible returned values are numerous and liable to evolve over time.
        </ResponseField>

        <ResponseField name="SubType" type="string">
          The subtype of the card product. Examples include: `CLASSIC`, `GOLD`, `PLATINUM`, `PREPAID`, etc.

          **Note:** The possible returned values are numerous and liable to evolve over time.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Accordion>
</AccordionGroup>

<AccordionGroup>
  <Accordion title="400 - Cancel attempted after capture">
    ```json theme={null}
    {
       "Message": "The Payment Status of the preauthorization does not allow for it to be edited",
       "Type": "preauthorization_payment_status_can_not_be_canceled",
       "Id": "a682bfc5-7dd6-4884-abee-9a6ff74fa21c#1669115406",
       "Date": 1669115407,
       "errors": null
    }  
    ```
  </Accordion>

  <Accordion title="400 - Validation attempted before capture">
    ```json theme={null}
    {
       "Message": "Can't validate a preauthorization with no successful payin.",
       "Type": "invalid_action",
       "Id": "ebe43430-6a43-4ef5-9e97-06b2a7e075f9#1669114162",
       "Date": 1669114163,
       "errors": null
    }  
    ```
  </Accordion>
</AccordionGroup>

<ResponseExample>
  ```json 200 - Canceled (no captures)   theme={null}
  {
     "Id": "156686431",
     "Tag": null,
     "CreationDate": 1669116461,
     "AuthorId": "156671912",
     "DebitedFunds": {
         "Currency": "EUR",
         "Amount": 500
     },
     "RemainingFunds": {
         "Currency": "EUR",
         "Amount": 0
     },
     "AuthorizationDate": 1669116472,
     "Status": "SUCCEEDED",
     "PaymentStatus": "CANCELED",
     "ExpirationDate": 1669678072,
     "PayInId": null,
     "ResultCode": "000000",
     "ResultMessage": "Success",
     "SecureMode": "FORCE",
     "CardId": "156674899",
     "SecureModeReturnURL": "http://example.com?preAuthorizationId=156686431",
     "SecureModeRedirectURL": null,
     "SecureModeNeeded": true,
     "PaymentType": "CARD",
     "ExecutionType": "DIRECT",
     "StatementDescriptor": null,
     "Culture": "EN",
     "SecurityInfo": {
         "AVSResult": "NO_CHECK"
     },
     "MultiCapture": true,
     "BrowserInfo": {
         "AcceptHeader": "text/html, application/xhtml+xml, application/xml;q=0.9, /;q=0.8",
         "JavaEnabled": true,
         "Language": "FR-FR",
         "ColorDepth": 4,
         "ScreenHeight": 1800,
         "ScreenWidth": 400,
         "TimeZoneOffset": 60,
         "UserAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",
         "JavascriptEnabled": true
     },
     "IpAddress": "80.236.38.245",
     "Billing": {
         "FirstName": "Joe",
         "LastName": "Bloggs",
         "Address": {
             "AddressLine1": null,
             "AddressLine2": null,
             "City": null,
             "Region": null,
             "PostalCode": null,
             "Country": null
         }
     },
     "Shipping": {
         "FirstName": "Joe",
         "LastName": "Bloggs",
         "Address": {
             "AddressLine1": null,
             "AddressLine2": null,
             "City": null,
             "Region": null,
             "PostalCode": null,
             "Country": null
         }
     },
     "Requested3DSVersion": null,
     "Applied3DSVersion": "V2_1",
     "PreferredCardNetwork": null,
     "CardInfo": {
          "BIN": "497010",
          "IssuingBank": "LA BANQUE POSTALE",
          "IssuerCountryCode": "MA",
          "Type": "CREDIT",
          "Brand": "VISA",
          "SubType": null
      }
  }  
  ```

  ```json 200 - Validated following successful capture   theme={null}
  {
     "Id": "156686696",
     "Tag": null,
     "CreationDate": 1669116896,
     "AuthorId": "156671912",
     "DebitedFunds": {
         "Currency": "EUR",
         "Amount": 500
     },
     "RemainingFunds": {
         "Currency": "EUR",
         "Amount": 0
     },
     "AuthorizationDate": 1669116904,
     "Status": "SUCCEEDED",
     "PaymentStatus": "VALIDATED",
     "ExpirationDate": 1669678504,
     "PayInId": "156686722",
     "ResultCode": "000000",
     "ResultMessage": "Success",
     "SecureMode": "FORCE",
     "CardId": "156674899",
     "SecureModeReturnURL": "http://example.com?preAuthorizationId=156686696",
     "SecureModeRedirectURL": null,
     "SecureModeNeeded": true,
     "PaymentType": "CARD",
     "ExecutionType": "DIRECT",
     "StatementDescriptor": null,
     "Culture": "EN",
     "SecurityInfo": {
         "AVSResult": "NO_CHECK"
     },
     "MultiCapture": true,
     "BrowserInfo": {
         "AcceptHeader": "text/html, application/xhtml+xml, application/xml;q=0.9, /;q=0.8",
         "JavaEnabled": true,
         "Language": "FR-FR",
         "ColorDepth": 4,
         "ScreenHeight": 1800,
         "ScreenWidth": 400,
         "TimeZoneOffset": 60,
         "UserAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",
         "JavascriptEnabled": true
     },
     "IpAddress": "80.236.38.245",
     "Billing": {
         "FirstName": "Joe",
         "LastName": "Bloggs",
         "Address": {
             "AddressLine1": null,
             "AddressLine2": null,
             "City": null,
             "Region": null,
             "PostalCode": null,
             "Country": null
         }
     },
     "Shipping": {
         "FirstName": "Joe",
         "LastName": "Bloggs",
         "Address": {
             "AddressLine1": null,
             "AddressLine2": null,
             "City": null,
             "Region": null,
             "PostalCode": null,
             "Country": null
         }
     },
     "Requested3DSVersion": null,
     "Applied3DSVersion": "V2_1",
     "PreferredCardNetwork": null,
     "CardInfo": {
          "BIN": "497010",
          "IssuingBank": "LA BANQUE POSTALE",
          "IssuerCountryCode": "MA",
          "Type": "CREDIT",
          "Brand": "VISA",
          "SubType": null
      }
  }  
  ```
</ResponseExample>

<RequestExample>
  ```json REST   theme={null}
  {
     "PaymentStatus": "CANCELED"
  }  
  ```

  ```php PHP theme={null}
  <?php 

  require_once 'vendor/autoload.php';

  use MangoPay\MangoPayApi;
  use MangoPay\Libraries\ResponseException as MGPResponseException;
  use MangoPay\Libraries\Exception as MGPException;

  $api = new MangoPayApi();

  $api->Config->ClientId = 'your-client-id';
  $api->Config->ClientPassword = 'your-api-key';
  $api->Config->TemporaryFolder = 'tmp/';

  try {
      $preauthId = 'preauth_m_01JH0PDQS1WT444DJE8VB7F848';

      $preauth = $api->CardPreAuthorizations->Get($preauthId);
      $preauth->PaymentStatus = CardPreAuthorizationPaymentStatus::Canceled;
      // $preauth->PaymentStatus = CardPreAuthorizationPaymentStatus::Validated;
      
      $cancelPreauth = $api->CardPreAuthorizations->Update($preauth);
      // $validatePreauth = $api->CardPreAuthorizations->Update($preauth);

      print_r($cancelPreauth);
  } catch(MGPResponseException $e) {
      print_r($e);
  } catch(MGPException $e) {
      print_r($e);
  } 
  ```

  ```javascript NodeJS   theme={null}
  const mangopayInstance = require('mangopay4-nodejs-sdk')
  const mangopay = new mangopayInstance({
      clientId: 'your-client-id',
      clientApiKey: 'your-api-key',
  })

  // To cancel a preauthorization when no preauthorized pay-ins have been made to capture funds

  let myPreauthorization = {
    Id: '192870038',
    PaymentStatus: 'CANCELED',
  }

  const cancelPreauthorization = async (preauthorization) => {
    return await mangopay.CardPreAuthorizations.update(preauthorization)
      .then((response) => {
        console.info(response)
        return response
      })
      .catch((err) => {
        console.log(err)
        return false
      })
  }

  cancelPreauthorization(myPreauthorization)

  // To validate a preauthorization when at least one preauthorized pay-in has been made to capture funds.

  let myPreauthorization = {
    Id: '192870038',
    PaymentStatus: 'VALIDATED',
  }

  const validatePreauthorization = async (preauthorization) => {
    return await mangopay.CardPreAuthorizations.update(preauthorization)
      .then((response) => {
        console.info(response)
        return response
      })
      .catch((err) => {
        console.log(err)
        return false
      })
  }

  validatePreauthorization(myPreauthorization)  
  ```

  ```ruby Ruby   theme={null}
  require 'mangopay'

  MangoPay.configure do |client|
      client.preproduction = true
      client.client_id = 'your-client-id'
      client.client_apiKey = 'your-api-key'
      client.log_file = File.join(Dir.pwd, 'mangopay.log')
  end


  # To validate a preauthorization when at least one preauthorized pay-in has been made to capture funds.

  def validatePreauthorization(preauthorizationId, preauthorizationObject)
      begin
          response = MangoPay::PreAuthorization.update(preauthorizationId, preauthorizationObject)
          puts response
          return response
      rescue MangoPay::ResponseError => error
          puts "Failed to update preauthorization: #{error.message}"
          puts "Error details: #{error.details}"
          return false
      end
  end

  myPreauthorization = {
      Id: '195059241',
      PaymentStatus: 'VALIDATED'
    }

  validatePreauthorization(myPreauthorization[:Id], myPreauthorization)

  # To cancel a preauthorization when no preauthorized pay-ins have been made to capture funds

  def cancelPreauthorization(preauthorizationId, preauthorizationObject)
      begin
          response = MangoPay::PreAuthorization.update(preauthorizationId, preauthorizationObject)
          puts response
          return response
      rescue MangoPay::ResponseError => error
          puts "Failed to update preauthorization: #{error.message}"
          puts "Error details: #{error.details}"
          return false
      end
  end

  myPreauthorization = {
      Id: '198156939',
      PaymentStatus: 'CANCELED'
    }

  cancelPreauthorization(myPreauthorization[:Id], myPreauthorization)  
  ```

  ```java Java  theme={null}
  import com.google.gson.Gson;
  import com.google.gson.GsonBuilder;
  import com.mangopay.MangoPayApi;
  import com.mangopay.core.enumerations.PaymentStatus;
  import com.mangopay.entities.CardPreAuthorization;

  public class CancelPreauthorization {
      public static void main(String[] args) throws Exception {
          MangoPayApi mangopay = new MangoPayApi();
          mangopay.getConfig().setClientId("your-client-id");
          mangopay.getConfig().setClientPassword("your-api-key");

          CardPreAuthorization preauthorization = mangopay.getCardPreAuthorizationApi().get("preauth_m_01J1Z336RKEZ0MF2YR26JPZCC5");

          preauthorization.setPaymentStatus(PaymentStatus.CANCELED);

          CardPreAuthorization cancelPreauthorization = mangopay.getCardPreAuthorizationApi().update(preauthorization);

          Gson prettyPrint = new GsonBuilder().setPrettyPrinting().create();
          String prettyJson = prettyPrint.toJson(cancelPreauthorization);

          System.out.println(prettyJson);
      }
  }
  ```

  ```python Python   theme={null}
  from pprint import pprint
  import mangopay

  mangopay.client_id='your-client-id'
  mangopay.apikey='your-api-key'

  from mangopay.api import APIRequest
  handler = APIRequest(sandbox=True)


  from mangopay.resources import PreAuthorization

  # To validate a preauthorization when at least one preauthorized pay-in has been made to capture funds.

  card_preauthorization = PreAuthorization(
      id = 'preauth_m_01HPHJDFSZWD7BN2MRF0YTHM40',
      payment_status = 'VALIDATED'
  )

  validate_preauthorization = card_preauthorization.save()

  pprint(validate_preauthorization)


  # To cancel a preauthorization when no preauthorized pay-ins have been made to capture funds

  card_preauthorization = PreAuthorization(
      id = 'preauth_m_01HPHJDFSZWD7BN2MRF0YTHM40',
      payment_status = 'CANCEL'
  )

  cancel_preauthorization = card_preauthorization.save()

  pprint(cancel_preauthorization)  
  ```

  ```csharp .NET  theme={null}
  using MangoPay.SDK;
  using MangoPay.SDK.Core.Enumerations;
  using MangoPay.SDK.Entities.PUT;
  using Newtonsoft.Json;

  class Program
  {
      static async Task Main(string[] args)
      {
          MangoPayApi api = new MangoPayApi();

          api.Config.ClientId = "your-client-id";
          api.Config.ClientPassword = "your-api-key";

          var preauthorizationId = "preauth_m_01J30N3GJ8WK0C7DSGR6BKHARE";
          var preauthorization = await api.CardPreAuthorizations.GetAsync(preauthorizationId);

          var preauthorizationPut = new CardPreAuthorizationPutDTO
          {
              PaymentStatus = PaymentStatus.CANCELED,
              Tag = "Updated using the Mangopay .NET SDK"
          };

          var cancelPreauthorization = await api.CardPreAuthorizations.UpdateAsync(preauthorizationPut, preauthorizationId);

          string prettyPrint = JsonConvert.SerializeObject(cancelPreauthorization, Formatting.Indented);
          Console.WriteLine(prettyPrint);
      }
  }
  ```
</RequestExample>
