Skip to main content
Checkout has two error paths:
  • Synchronous integration errors are thrown while constructing or mounting Checkout.
  • Hosted Checkout initialization and loading errors are sent to onCheckoutError as LynqError.
Payment declines are not Checkout errors. They arrive through onPaymentResult with status: "requires_payment_method".

Thrown errors

ConfigError

Thrown when publicKey or clientSecret is missing or invalid, or Checkout is constructed outside a browser. Check that client-only code creates the instance after hydration and that configuration is available at that time.

MountError

Thrown when:
  • The selector does not resolve to an element
  • This instance is already mounted
  • This instance was destroyed
  • Another Lynq Checkout is already mounted on the page
Fix the integration state before retrying; repeatedly calling mount() will not resolve these errors.

LynqErrorCode

Use the runtime error.retryable value rather than maintaining your own retry table in application code.

Customer-facing handling

The message is display-safe. Log the code, SDK VERSION, Payment Intent ID, environment, and occurrence time for diagnostics. Do not log keys or client secrets.

Troubleshooting by symptom

Handle onCheckoutError, confirm the container remains mounted, and check whether Content Security Policy or network controls block https://checkout.lynq.am. To see SDK diagnostics, reproduce the issue with a pk_test_… key: the SDK logs to the browser console in test mode and stays silent in live mode.
Create a fresh Payment Intent and confirm its environment matches the publishable key. Do not retrieve an old Payment Intent expecting to recover its client secret.
Check Dashboard → Payment methods in the Payment Intent’s environment. At least one configured method must be enabled.
In component frameworks, ensure cleanup calls destroy() and development double-render behaviour does not leave the previous instance mounted.
This is expected until your server verifies the webhook. Inspect the delivery in Dashboard rather than fulfilling from the browser result.

Webhook deliveries

Dashboard → Webhooks lists every delivery with its event ID, attempt count, latest HTTP status, and last error.
Find the Payment Intent in Dashboard → Payments, then inspect its webhook delivery. If delivery succeeded, search receiver logs by event ID and confirm the order comparison and database transaction. If delivery is retrying, restore the endpoint and let Lynq retry.
Check the latest HTTP status or network error. 408, 429, 5xx, timeouts, and connection failures are temporary. Fix the receiver without changing the endpoint URL unless necessary.
Check for an unreachable destination and non-retryable 4xx responses. Confirm the URL is public HTTPS and the receiver is not rejecting valid signatures. Once it is fixed, open the delivery and choose Resend.
Confirm the receiver uses the raw body and the current mode’s signing secret, and that it accepts any matching v1 signature. If the secret was rotated, the previous one stops signing when its overlap ends.

Exposed credentials

If a secret API key is exposed, roll it in API keys and choose Now, then install the new key in every server that uses it. Requests using the old key fail from that moment. If a webhook signing secret is exposed, rotate it with Now and install the new one in your receiver.

Contact support

Email support@lynq.am with:
  • Test or live mode
  • The Payment Intent ID, webhook event ID, or your order ID
  • The approximate time and your timezone
  • The error code, HTTP status, or delivery status, and the Lynq.js version
Never email secret API keys, client secrets, VPOS passwords, Idram secret keys, or webhook signing secrets.
Last modified on November 11, 2026