{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-contents/checkout/sidebars.yaml","oas-contents/api/in-person-payments.json":"oas-contents/api/in-person-payments.json"},"props":{"metadata":{"markdoc":{"tagList":["admonition","openapi-code-sample"]},"type":"markdown"},"seo":{"title":"Testing","description":"Explore our documentation and API and start integrating Kustom Checkout","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":["openapi"],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"testing","__idx":0},"children":["Testing"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The playground environment provides two dev-only endpoints, letting you test the full payment flow without a physical terminal."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Dev"]}," endpoints (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/ipp/v1/dev/*"]},") are only available in playground (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["api.playground.kustom.co"]},"). Calls to these endpoints in production will result in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["404"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-1--create-a-simulated-device","__idx":1},"children":["Step 1 — Create a simulated device"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Creates a simulated device — no Kustom POS app needed. The device is immediately registered and ready to receive sessions."]},{"$$mdtype":"Tag","name":"OpenApiCodeSample","attributes":{"descriptionFile":"oas-contents/api/in-person-payments.json","operationId":"createSimulatedDevice","parameters":{},"environments":{}},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the returned ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["device_id"]}," when creating sessions. The device will have ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["simulated: true"]}," in its metadata."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-2--create-a-session","__idx":2},"children":["Step 2 — Create a session"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Create a session targeting your simulated device, exactly as you would in production:"]},{"$$mdtype":"Tag","name":"OpenApiCodeSample","attributes":{"descriptionFile":"oas-contents/api/in-person-payments.json","operationId":"createSession","parameters":{},"environments":{}},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-3--simulate-a-card-tap","__idx":3},"children":["Step 3 — Simulate a card tap"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Simulates a physical card tap on the terminal, triggering the payment outcome of your choice."]},{"$$mdtype":"Tag","name":"OpenApiCodeSample","attributes":{"descriptionFile":"oas-contents/api/in-person-payments.json","operationId":"simulateCardTap","parameters":{},"environments":{}},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"available-outcomes","__idx":4},"children":["Available outcomes"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Outcome"},"children":["Outcome"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What happens"},"children":["What happens"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SUCCESS"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Payment approved. Session moves to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FINALIZED"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DECLINED_GENERIC"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Card declined (generic reason)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INSUFFICIENT_FUNDS"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Card declined due to insufficient funds."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LOST_CARD"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Card reported lost."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["STOLEN_CARD"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Card reported stolen."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EXPIRED_CARD"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Card has expired."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INCORRECT_CVC"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Wrong CVC entered."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PROCESSING_ERROR"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Terminal processing error."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INCORRECT_NUMBER"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Invalid card number."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CARD_VELOCITY_EXCEEDED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Card velocity limit exceeded."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["outcome"]}," defaults to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SUCCESS"]}," if omitted."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"testing-checklist","__idx":5},"children":["Testing checklist"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before going live, verify the following against your playground integration:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Device enrolled and visible in the device list"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Session created and dispatched to the device (status ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CREATED"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["session.finalized"]}," callback received and processed"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["order_id"]}," from callback successfully linked to your order record"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Declined payment (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DECLINED_GENERIC"]},") handled gracefully"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Session cancellation flow tested"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Callback endpoint returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2xx"]}," reliably"]}]}]},"headings":[{"value":"Testing","id":"testing","depth":1},{"value":"Step 1 — Create a simulated device","id":"step-1--create-a-simulated-device","depth":2},{"value":"Step 2 — Create a session","id":"step-2--create-a-session","depth":2},{"value":"Step 3 — Simulate a card tap","id":"step-3--simulate-a-card-tap","depth":2},{"value":"Available outcomes","id":"available-outcomes","depth":3},{"value":"Testing checklist","id":"testing-checklist","depth":2}],"frontmatter":{"title":"Testing","description":"Test your integration without real hardware, using simulated devices and card taps available in the playground environment.","seo":{"title":"Testing"}},"lastModified":"2026-06-10T07:37:02.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/contents/checkout/in-person-payments/testing","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}