- 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):
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, validationResult} for each field as the user interacts with the form.
For most fields, validationResult is a string with the failure reason:
validationResult is a structured object detailing which checks failed:
card_type- the detected card brand, its number pattern, and the valid lengths for that brandluhn_valid- whether the number passes the Luhn checksumlength_valid- whether the number length is valid for the detected brandvalid- the overall result
Commands to the Iframe
Your page can send commands to the iframe:Receiving Results via PostMessage
The form sendsCardSubmitSuccess or CardSubmitFailure whenever it runs in an iframe with postMessageHost set. CardSubmitSuccess carries the card token, the masked card number, the card type, the expiry date and the name on the card. It does not carry the 3D Secure result: that is stored on the token, and is also available through the {threeDSecIndication} placeholder in the success URL.
Two parameters decide what happens around the message:
success. If you set a success URL, the iframe still redirects to it straight after sendingCardSubmitSuccess. To handle the result on your page only, leavesuccessout. The form then stays in place and the message is your only signal.submitWithPostMessage=true. This removes the form’s own submit button, so your page submits the form withpostMessage('submit'), as in the flow above. It does not change whether the redirect happens.
failure URL even in a postMessage flow: when the card is rejected, the iframe loads that page and your page also receives CardSubmitFailure. Send the form only the documented validate and submit messages.
For a complete page that uses this flow with 3D Secure and a charge, see the complete checkout example.
Dynamic Iframe Resizing
When the form content changes (e.g. validation errors appear), the iframe sendsframeDimensionsChanged:{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 addinguseCustomValidation=true to the iframe URL.
When the cardholder submits the form, the iframe pauses tokenization and sends a CustomValidation message with masked card details:
cardDigitCount, cvvDigitCount), which is enough to apply brand, length and expiry rules but not to verify that the security code is correct. That check can only be made by your payment processor - see Validate a Card.
Your page has 3 seconds to respond. If no response is received, tokenization proceeds automatically.
Approving
Rejecting
Other messages posted to the form
The form listens for messages whenever postMessage mode is on, even if you have not enabled custom validation. It treats any message that is not an object, other than the stringsvalidate, submit and true, as a custom validation rejection and shows that value under the card number field. Objects without a recognised action are ignored. If a third-party script on your page (an accessibility or analytics tool, for example) broadcasts messages to every frame, exclude the card form frame from it, or the cardholder will see the script’s message as a card error.
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 the card entry form demo. All demos are listed on Live Demos. 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.

