Skip to main content
The postMessage mechanism enables secure cross-domain communication between your page and the embedded PCI Booking iframe. It works with the Card Entry Form, Card Display, and CVV capture forms. Use postMessage to:
  • Know when the iframe is ready.
  • Validate the form programmatically from your page.
  • Submit the form programmatically.
  • Receive tokenization results without a page redirect.
  • Resize the iframe dynamically based on form content.
  • Intercept card details before tokenization for custom approval logic.

Setup

postMessageHost is a required parameter on every card entry form request, whether or not you use the postMessage features below - see Request Card Entry Form. Set it to your page’s origin (URL-encoded):
On your page, listen for messages from the iframe:

Events from the Iframe

CardSubmitSuccess is a single message and its payload is the card data (masked number, type, expiration, token) - there is no earlier, separate message carrying card data before it. If you’re seeing partial card fields arrive before CardSubmitSuccess, that’s CustomValidation firing (only happens when useCustomValidation=true), not a second success signal.
Field-level validation events are also sent as JSON objects with {field, validationResult} for each field as the user interacts with the form. For most fields, validationResult is a string with the failure reason:
For an invalid card number, validationResult is a structured object detailing which checks failed:
  • card_type - the detected card brand, its number pattern, and the valid lengths for that brand
  • luhn_valid - whether the number passes the Luhn checksum
  • length_valid - whether the number length is valid for the detected brand
  • valid - the overall result

Commands to the Iframe

Your page can send commands to the iframe:
A typical single-submit-button flow, where your page validates its own fields and the card form together:

Receiving Results via PostMessage

To receive tokenization results via postMessage instead of a redirect, add submitWithPostMessage=true to your iframe URL. On success, the iframe sends a CardSubmitSuccess message containing the token details. On failure, it sends CardSubmitFailure with the error.
If your success/failure URL resolves to a private or local network address from the cardholder’s browser (common with split-horizon DNS on corporate networks), Chrome’s Private Network Access policy blocks the iframe’s redirect to it, with the error “The connection is blocked because it was initiated by a public page to connect to devices or servers on your local network.” The tokenization itself still succeeds - only the redirect back to your page is blocked.Fix: switch to the postMessage flow above instead of relying on the redirect. Listen for CardSubmitSuccess/CardSubmitFailure on your parent page (submitWithPostMessage=true), read the token/card details directly from that message’s payload, and perform your own client-side navigation from there - this is in-browser JS communication, not a network request, so PNA does not apply to it.

Dynamic Iframe Resizing

When the form content changes (e.g. validation errors appear), the iframe sends frameDimensionsChanged:{width}:{height}. Use this to resize the iframe:

Custom Validation

Custom validation lets your page inspect card details before tokenization and approve or reject the submission. Enable it by adding useCustomValidation=true to the iframe URL. When the cardholder submits the form, the iframe pauses tokenization and sends a CustomValidation message with masked card details:
Your page has 3 seconds to respond. If no response is received, tokenization proceeds automatically.

Approving

Rejecting

When rejected, the form displays the message as a validation error and the cardholder can correct their input or try a different card.

Use Cases

  • Restrict accepted card types or BIN ranges before tokenization.
  • Check card details against your business rules (e.g. reject corporate cards, enforce expiry minimums).
  • Log or audit card submissions before they are tokenized.

Live Demo

See the postMessage mechanism in action on our card capture demo page. Open your browser’s developer console to watch the messages exchanged between the parent page and the iframe as you interact with the form.

Next Steps

Hosted Card Entry Form

Set up the card entry form iframe.

Capture Cards Overview

All tokenization methods.

Stylesheets

Customize the look of your card entry form.

Card Entry Form Callback

API reference for form callback notifications.