{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-docs/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["tabs","tab"]},"type":"markdown"},"seo":{"title":"Reefpay Docs","description":"Reefpay is the groundbreaking payment gateway that lets you integrate with the future of payments.","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"sdks-and-libraries","__idx":0},"children":["SDKs and libraries"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"overview","__idx":1},"children":["Overview"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Paradise Gateway provides a RESTful JSON API that works with any HTTP client. While there is no mandatory SDK, using a typed client library can reduce boilerplate, handle authentication, and provide IDE autocompletion."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"direct-api-integration","__idx":2},"children":["Direct API integration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every endpoint in the Paradise Gateway API accepts standard JSON over HTTPS. You can integrate using any language's built-in HTTP client:"]},{"$$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":{"align":"left","data-label":"Language"},"children":["Language"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Recommended HTTP client"},"children":["Recommended HTTP client"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Python"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["requests"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["httpx"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["JavaScript / TypeScript"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fetch"]}," (built-in) or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["axios"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["C#"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["HttpClient"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["System.Net.Http"]},")"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Java"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["java.net.http.HttpClient"]}," (JDK 11+)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Go"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["net/http"]}," (stdlib)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["PHP"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["curl"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["guzzlehttp/guzzle"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Ruby"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["net/http"]}," (stdlib) or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["faraday"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"authentication-setup","__idx":3},"children":["Authentication setup"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All SDK examples assume you store your API key in an environment variable."]},{"$$mdtype":"Tag","name":"Tabs","attributes":{"size":"medium"},"children":[{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"Python","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"import os\nimport requests\n\nAPI_KEY = os.environ[\"PARADISE_API_KEY\"]\nBASE_URL = os.environ.get(\"PARADISE_BASE_URL\", \"https://api.dev.paradisegateway.net\")\n\nsession = requests.Session()\nsession.headers.update({\n    \"Content-Type\": \"application/json\",\n    \"APIKEY\": API_KEY,\n})\n\nresp = session.get(f\"{BASE_URL}/v1/transactions?take=5\")\nprint(resp.json())\n","lang":"python"},"children":[]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"JavaScript","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"javascript","header":{"controls":{"copy":{}}},"source":"const API_KEY = process.env.PARADISE_API_KEY;\nconst BASE_URL = process.env.PARADISE_BASE_URL || \"https://api.dev.paradisegateway.net\";\n\nasync function apiRequest(path, options = {}) {\n  const resp = await fetch(`${BASE_URL}${path}`, {\n    ...options,\n    headers: {\n      \"Content-Type\": \"application/json\",\n      \"APIKEY\": API_KEY,\n      ...options.headers,\n    },\n  });\n  if (!resp.ok) throw new Error(`API error: ${resp.status}`);\n  return resp.json();\n}\n\nconst transactions = await apiRequest(\"/v1/transactions?take=5\");\nconsole.log(transactions);\n","lang":"javascript"},"children":[]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"C#","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"csharp","header":{"controls":{"copy":{}}},"source":"using System.Net.Http;\n\nvar apiKey = Environment.GetEnvironmentVariable(\"PARADISE_API_KEY\")!;\nvar baseUrl = Environment.GetEnvironmentVariable(\"PARADISE_BASE_URL\")\n    ?? \"https://api.dev.paradisegateway.net\";\n\nusing var client = new HttpClient { BaseAddress = new Uri(baseUrl) };\nclient.DefaultRequestHeaders.Add(\"APIKEY\", apiKey);\n\nvar resp = await client.GetStringAsync(\"/v1/transactions?take=5\");\nConsole.WriteLine(resp);\n","lang":"csharp"},"children":[]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"Java","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"java","header":{"controls":{"copy":{}}},"source":"import java.net.http.*;\nimport java.net.URI;\n\nString apiKey = System.getenv(\"PARADISE_API_KEY\");\nString baseUrl = System.getenv().getOrDefault(\n    \"PARADISE_BASE_URL\", \"https://api.dev.paradisegateway.net\");\n\nHttpClient client = HttpClient.newHttpClient();\nHttpRequest request = HttpRequest.newBuilder()\n    .uri(URI.create(baseUrl + \"/v1/transactions?take=5\"))\n    .header(\"APIKEY\", apiKey)\n    .GET().build();\nHttpResponse<String> resp = client.send(request,\n    HttpResponse.BodyHandlers.ofString());\nSystem.out.println(resp.body());\n","lang":"java"},"children":[]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"Go","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"go","header":{"controls":{"copy":{}}},"source":"package main\n\nimport (\n    \"fmt\"\n    \"io\"\n    \"net/http\"\n    \"os\"\n)\n\nfunc main() {\n    apiKey := os.Getenv(\"PARADISE_API_KEY\")\n    baseURL := os.Getenv(\"PARADISE_BASE_URL\")\n    if baseURL == \"\" {\n        baseURL = \"https://api.dev.paradisegateway.net\"\n    }\n\n    req, _ := http.NewRequest(\"GET\", baseURL+\"/v1/transactions?take=5\", nil)\n    req.Header.Set(\"APIKEY\", apiKey)\n    resp, _ := http.DefaultClient.Do(req)\n    defer resp.Body.Close()\n    body, _ := io.ReadAll(resp.Body)\n    fmt.Println(string(body))\n}\n","lang":"go"},"children":[]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"PHP","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"php","header":{"controls":{"copy":{}}},"source":"$apiKey = getenv(\"PARADISE_API_KEY\");\n$baseUrl = getenv(\"PARADISE_BASE_URL\") ?: \"https://api.dev.paradisegateway.net\";\n\n$ch = curl_init(\"$baseUrl/v1/transactions?take=5\");\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_HTTPHEADER => [\n        \"Content-Type: application/json\",\n        \"APIKEY: $apiKey\",\n    ],\n]);\n$response = curl_exec($ch);\ncurl_close($ch);\necho $response;\n","lang":"php"},"children":[]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"Ruby","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"ruby","header":{"controls":{"copy":{}}},"source":"require \"net/http\"\nrequire \"json\"\n\napi_key = ENV.fetch(\"PARADISE_API_KEY\")\nbase_url = ENV.fetch(\"PARADISE_BASE_URL\", \"https://api.dev.paradisegateway.net\")\n\nuri = URI(\"#{base_url}/v1/transactions?take=5\")\nreq = Net::HTTP::Get.new(uri, {\n  \"Content-Type\" => \"application/json\",\n  \"APIKEY\" => api_key,\n})\nresp = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|\n  http.request(req)\nend\nputs JSON.parse(resp.body)\n","lang":"ruby"},"children":[]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"openapi-specification","__idx":4},"children":["OpenAPI specification"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Paradise Gateway API is described by an ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://spec.openapis.org/oas/v3.1.0"},"children":["OpenAPI 3.1"]}," specification. You can use it to:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Generate typed clients"]}," with tools like ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://openapi-generator.tech/"},"children":["openapi-generator"]}," or ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/drwpow/openapi-typescript"},"children":["openapi-typescript"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Import into API platforms"]}," like Postman, Insomnia, or Bruno"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Validate requests"]}," in your CI/CD pipeline"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"generate-a-client-library","__idx":5},"children":["Generate a client library"]},{"$$mdtype":"Tag","name":"Tabs","attributes":{"size":"medium"},"children":[{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"Bash","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"# TypeScript client\nnpx openapi-typescript apis/openapi.yaml -o src/api-types.ts\n\n# Python client\nopenapi-generator-cli generate \\\n  -i apis/openapi.yaml \\\n  -g python \\\n  -o ./paradise-client-python\n\n# Java client\nopenapi-generator-cli generate \\\n  -i apis/openapi.yaml \\\n  -g java \\\n  -o ./paradise-client-java\n","lang":"shell"},"children":[]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"PowerShell","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"powershell","header":{"controls":{"copy":{}}},"source":"# TypeScript client\nnpx openapi-typescript apis/openapi.yaml -o src/api-types.ts\n\n# Python client\nopenapi-generator-cli generate `\n  -i apis/openapi.yaml `\n  -g python `\n  -o ./paradise-client-python\n\n# Java client\nopenapi-generator-cli generate `\n  -i apis/openapi.yaml `\n  -g java `\n  -o ./paradise-client-java\n","lang":"powershell"},"children":[]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"postman-collection","__idx":6},"children":["Postman collection"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Import the OpenAPI spec directly into Postman:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Open Postman and select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Import"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Choose the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["apis/openapi.yaml"]}," file or paste the spec URL."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Postman generates a collection with all endpoints, example payloads, and authentication pre-configured."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Set the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["APIKEY"]}," variable in your environment."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"best-practices","__idx":7},"children":["Best practices"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Store API keys in environment variables"]}," — never hard-code them in source files."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Set a base URL variable"]}," — switch between sandbox and production without code changes."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Handle errors consistently"]}," — check ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["response_status"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["response_code"]}," on every response."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["correlation_id"]}]}," — log it for every request; include it in support tickets."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Implement retry logic"]}," — retry on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["5xx"]}," errors with exponential backoff. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/get-started/integration-best-practices"},"children":["Integration best practices"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"next-steps","__idx":8},"children":["Next steps"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/get-started/quickstart"},"children":["Quickstart"]}," — make your first API call"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/reference/quick-reference"},"children":["Quick reference"]}," — endpoint cheat sheet and test data"]}]}]},"headings":[{"value":"SDKs and libraries","id":"sdks-and-libraries","depth":1},{"value":"Overview","id":"overview","depth":2},{"value":"Direct API integration","id":"direct-api-integration","depth":2},{"value":"Authentication setup","id":"authentication-setup","depth":2},{"value":"OpenAPI specification","id":"openapi-specification","depth":2},{"value":"Generate a client library","id":"generate-a-client-library","depth":3},{"value":"Postman collection","id":"postman-collection","depth":2},{"value":"Best practices","id":"best-practices","depth":2},{"value":"Next steps","id":"next-steps","depth":2}],"frontmatter":{"title":"SDKs and libraries","shortTitle":"SDKs & libraries","intro":"Official and community SDKs, client libraries, and tools for integrating with the Paradise Gateway API.","type":"reference","seo":{"title":""}},"lastModified":"2026-06-05T02:46:44.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/reference/sdks-and-libraries","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}