{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-docs/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Reefpay Docs","description":"Reefpay is the groundbreaking payment gateway that lets you integrate with the future of payments."},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"environments-and-test-data","__idx":0},"children":["Environments and test data"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["There are three environments. Only one of them moves money."]},{"$$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":"Environment"},"children":["Environment"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Base URL"},"children":["Base URL"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Moves real funds"},"children":["Moves real funds"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Development"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["https://api.dev.paradisegateway.net"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sandbox"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["https://api.sandbox.paradisegateway.net"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Production"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["https://api.paradisegateway.net"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Development and sandbox both reach the processors' own test systems, so a"," ","transaction gets a real processor response without any funds moving. Build"," ","against one of them until you are ready to go live."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Your API key and client ID are issued per environment. A production key does not"," ","work against sandbox, and the reverse. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/get-started/authentication"},"children":["Authentication"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"the-try-it-button-talks-to-a-mock","__idx":1},"children":["The Try it button talks to a mock"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Requests you send from the API reference go to a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["mock server"]},", not to any of"," ","the environments above. The mock replies from the examples written into the API"," ","description, so what comes back is well formed and correctly shaped but entirely"," ","made up."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["That is deliberate: a public documentation page must not be able to push a"," ","transaction into a live processor."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Two things follow from it."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Values in a mock response are illustrative."]}," Identifiers, auth codes, and"," ","timestamps are sample data. Never carry one into a real integration."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["The mock echoes what you send."]}," Edit ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount"]}," in the request and the same"," ","amount comes back, so you can see the shape of a response for your own values."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["By default the mock returns the first response example for an operation. To ask"," ","for a specific one, name it in a header:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"x-redocly-response-body-example: saleDeclined\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["That is how you see a declined body without a real decline."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"no-card-number-triggers-a-decline","__idx":2},"children":["No card number triggers a decline"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Against the real gateway, ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["no test card number causes a decline"]},". Declines come"," ","from the issuer's own test system and depend on the processor configuration"," ","behind your merchant account, not on which test PAN you pick."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you have seen a table of \"decline simulation\" card numbers elsewhere, it was"," ","wrong. To exercise your decline handling, use the mock and the header above, or"," ","ask your implementation contact to arrange a decline on the processor side."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"test-cards","__idx":3},"children":["Test cards"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Test card numbers, their CVV values, and the address to use for AVS testing are"," ","in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/reference/test-cards"},"children":["Test cards and test accounts"]},". All of them use"," ","expiry ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["12/28"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Never send a real card number to development or sandbox."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"going-live","__idx":4},"children":["Going live"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Work through this before you switch the base URL:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Swap the base URL for the production host."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Swap in your production API key and client ID."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Confirm you branch on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["result"]},", not on the HTTP status. See"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/payments/handle-declines"},"children":["Handle declines"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Confirm your retry logic distinguishes a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["500"]}," from a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["502"]},". See"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/get-started/errors"},"children":["Errors and retries"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Confirm no log line anywhere in your stack holds a full card number, a CVV,"," ","or a bank account number."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Send one small live transaction and refund it."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-the-api-does-not-have-yet","__idx":5},"children":["What the API does not have yet"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Worth knowing before you design around them:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["No webhooks."]}," The API sends no outbound notifications. Poll"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /v1/transactions"]}," for state that arrives after the response, such as"," ","settlement or an ACH return."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["No idempotency key."]}," Retrying a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/transactions"]}," that already"," ","succeeded creates a second transaction. Reconcile before retrying a payment."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["No 3-D Secure."]}," There is no field to carry a 3DS result."]}]}]},"headings":[{"value":"Environments and test data","id":"environments-and-test-data","depth":1},{"value":"The Try it button talks to a mock","id":"the-try-it-button-talks-to-a-mock","depth":2},{"value":"No card number triggers a decline","id":"no-card-number-triggers-a-decline","depth":2},{"value":"Test cards","id":"test-cards","depth":2},{"value":"Going live","id":"going-live","depth":2},{"value":"What the API does not have yet","id":"what-the-api-does-not-have-yet","depth":2}],"frontmatter":{"title":"Environments and test data","shortTitle":"Environments","intro":"Where to send requests while you build, what the Try it button in the API reference actually talks to, and which card numbers to test with.","type":"reference","seo":{"title":""}},"lastModified":"2026-09-17T08:34:37.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/get-started/environments","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}