{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-docs/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["tabs","tab","admonition"]},"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":"tutorial-onboard-a-new-client","__idx":0},"children":["Tutorial: Onboard a new client"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-you-will-build","__idx":1},"children":["What you will build"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A four-step automated onboarding flow that takes a merchant from signup to payment-ready."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"https://files.modern-mermaid.live/images/1776277501753-mermaid-diagram-1776277501772.png","alt":"image"},"children":[]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"prerequisites","__idx":2},"children":["Prerequisites"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A valid API key for your parent (reseller) account — see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/how-tos/setup/obtain-credentials"},"children":["Obtain API credentials"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["parent_id"]}," of your reseller account"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-1-create-the-client","__idx":3},"children":["Step 1: Create the client"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Create a new merchant account under your reseller."]},{"$$mdtype":"Tag","name":"Tabs","attributes":{"size":"medium"},"children":[{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"curl","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"curl -X POST \\\n  https://api.dev.paradisegateway.net/v1/clients \\\n  -H \"Content-Type: application/json\" \\\n  -H \"APIKEY: YOUR-RESELLER-API-KEY\" \\\n  -d '{\n    \"dba\": \"Acme Jewelry\",\n    \"parent_id\": \"CLIENT-01JMRSPCK7XVNP3KS8F2W4T6Y\",\n    \"type\": \"merchant\",\n    \"admin_contact_details\": {\n      \"first_name\": \"Jane\",\n      \"last_name\": \"Smith\",\n      \"email\": \"jane.smith@example.com\",\n      \"phone\": \"+15551234567\",\n      \"time_zone\": \"America/New_York\"\n    }\n  }'\n","lang":"shell"},"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, requests\n\nAPI_KEY = os.environ[\"PARADISE_API_KEY\"]\nBASE = os.environ.get(\"PARADISE_BASE_URL\", \"https://api.dev.paradisegateway.net\")\nHEADERS = {\"Content-Type\": \"application/json\", \"APIKEY\": API_KEY}\n\nclient_resp = requests.post(f\"{BASE}/v1/clients\", headers=HEADERS, json={\n    \"dba\": \"Acme Jewelry\",\n    \"parent_id\": \"CLIENT-01JMRSPCK7XVNP3KS8F2W4T6Y\",\n    \"type\": \"merchant\",\n    \"admin_contact_details\": {\n        \"first_name\": \"Jane\",\n        \"last_name\": \"Smith\",\n        \"email\": \"jane.smith@example.com\",\n        \"phone\": \"+15551234567\",\n        \"time_zone\": \"America/New_York\",\n    },\n})\nclient = client_resp.json()\nclient_id = client[\"id\"]\nprint(f\"Client created: {client_id}\")\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 = process.env.PARADISE_BASE_URL || \"https://api.dev.paradisegateway.net\";\nconst headers = { \"Content-Type\": \"application/json\", \"APIKEY\": API_KEY };\n\nconst clientResp = await fetch(`${BASE}/v1/clients`, {\n  method: \"POST\",\n  headers,\n  body: JSON.stringify({\n    dba: \"Acme Jewelry\",\n    parent_id: \"CLIENT-01JMRSPCK7XVNP3KS8F2W4T6Y\",\n    type: \"merchant\",\n    admin_contact_details: {\n      first_name: \"Jane\",\n      last_name: \"Smith\",\n      email: \"jane.smith@example.com\",\n      phone: \"+15551234567\",\n      time_zone: \"America/New_York\",\n    },\n  }),\n});\nconst client = await clientResp.json();\nconsole.log(`Client created: ${client.id}`);\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 var httpClient = new HttpClient();\nvar baseUrl = Environment.GetEnvironmentVariable(\"PARADISE_BASE_URL\") ?? \"https://api.dev.paradisegateway.net\";\nhttpClient.DefaultRequestHeaders.Add(\"APIKEY\", Environment.GetEnvironmentVariable(\"PARADISE_API_KEY\"));\n\nvar clientResp = await httpClient.PostAsJsonAsync($\"{baseUrl}/v1/clients\", new {\n    dba = \"Acme Jewelry\",\n    parent_id = \"CLIENT-01JMRSPCK7XVNP3KS8F2W4T6Y\",\n    type = \"merchant\",\n    admin_contact_details = new {\n        first_name = \"Jane\", last_name = \"Smith\",\n        email = \"jane.smith@example.com\",\n        phone = \"+15551234567\", time_zone = \"America/New_York\",\n    },\n});\nvar clientJson = await clientResp.Content.ReadAsStringAsync();\nConsole.WriteLine(clientJson);\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":"HttpClient client = HttpClient.newHttpClient();\nString baseUrl = System.getenv().getOrDefault(\"PARADISE_BASE_URL\", \"https://api.dev.paradisegateway.net\");\n\nHttpRequest request = HttpRequest.newBuilder()\n    .uri(URI.create(baseUrl + \"/v1/clients\"))\n    .header(\"Content-Type\", \"application/json\")\n    .header(\"APIKEY\", System.getenv(\"PARADISE_API_KEY\"))\n    .POST(HttpRequest.BodyPublishers.ofString(\"\"\"\n        {\n          \"dba\": \"Acme Jewelry\",\n          \"parent_id\": \"CLIENT-01JMRSPCK7XVNP3KS8F2W4T6Y\",\n          \"type\": \"merchant\",\n          \"admin_contact_details\": {\n            \"first_name\": \"Jane\",\n            \"last_name\": \"Smith\",\n            \"email\": \"jane.smith@example.com\",\n            \"phone\": \"+15551234567\",\n            \"time_zone\": \"America/New_York\"\n          }\n        }\"\"\"))\n    .build();\nHttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());\nSystem.out.println(response.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":"payload := `{\n  \"dba\": \"Acme Jewelry\",\n  \"parent_id\": \"CLIENT-01JMRSPCK7XVNP3KS8F2W4T6Y\",\n  \"type\": \"merchant\",\n  \"admin_contact_details\": {\n    \"first_name\": \"Jane\",\n    \"last_name\": \"Smith\",\n    \"email\": \"jane.smith@example.com\",\n    \"phone\": \"+15551234567\",\n    \"time_zone\": \"America/New_York\"\n  }\n}`\nreq, _ := http.NewRequest(\"POST\", base+\"/v1/clients\", strings.NewReader(payload))\nreq.Header.Set(\"Content-Type\", \"application/json\")\nreq.Header.Set(\"APIKEY\", apiKey)\nresp, _ := http.DefaultClient.Do(req)\ndefer resp.Body.Close()\nbody, _ := io.ReadAll(resp.Body)\nfmt.Println(string(body))\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":"$payload = json_encode([\n    \"dba\" => \"Acme Jewelry\",\n    \"parent_id\" => \"CLIENT-01JMRSPCK7XVNP3KS8F2W4T6Y\",\n    \"type\" => \"merchant\",\n    \"admin_contact_details\" => [\n        \"first_name\" => \"Jane\", \"last_name\" => \"Smith\",\n        \"email\" => \"jane.smith@example.com\",\n        \"phone\" => \"+15551234567\", \"time_zone\" => \"America/New_York\",\n    ],\n]);\n$ch = curl_init(\"{$base}/v1/clients\");\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_POST => true,\n    CURLOPT_HTTPHEADER => [\"Content-Type: application/json\", \"APIKEY: {$apiKey}\"],\n    CURLOPT_POSTFIELDS => $payload,\n]);\necho curl_exec($ch);\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":"uri = URI(\"#{base}/v1/clients\")\nreq = Net::HTTP::Post.new(uri)\nreq[\"Content-Type\"] = \"application/json\"\nreq[\"APIKEY\"] = api_key\nreq.body = { dba: \"Acme Jewelry\",\n  parent_id: \"CLIENT-01JMRSPCK7XVNP3KS8F2W4T6Y\", type: \"merchant\",\n  admin_contact_details: {\n    first_name: \"Jane\", last_name: \"Smith\",\n    email: \"jane.smith@example.com\",\n    phone: \"+15551234567\", time_zone: \"America/New_York\"\n  } }.to_json\nres = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }\nputs res.body\n","lang":"ruby"},"children":[]}]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Client types"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["merchant"]}," for businesses that process payments, or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reseller"]}," for ISOs and agents that manage merchants. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/concepts/account-hierarchy/clients-and-resellers"},"children":["Clients and resellers"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Save the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," from the response — you need it for all subsequent steps."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-2-create-the-first-user","__idx":4},"children":["Step 2: Create the first user"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Add an admin user to the new client account."]},{"$$mdtype":"Tag","name":"Tabs","attributes":{"size":"medium"},"children":[{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"curl","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"curl -X POST \\\n  https://api.dev.paradisegateway.net/v1/users \\\n  -H \"Content-Type: application/json\" \\\n  -H \"APIKEY: YOUR-RESELLER-API-KEY\" \\\n  -d '{\n    \"client_id\": \"CLIENT-01KEWXXXXXXXXXXXXXXXXXXXXXXX\",\n    \"first_name\": \"Jane\",\n    \"last_name\": \"Smith\",\n    \"email\": \"jane.smith@example.com\",\n    \"password\": \"SecureP@ssw0rd!2026\",\n    \"time_zone\": \"America/New_York\"\n  }'\n","lang":"shell"},"children":[]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"Python","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"user_resp = requests.post(f\"{BASE}/v1/users\", headers=HEADERS, json={\n    \"client_id\": client_id,\n    \"first_name\": \"Jane\",\n    \"last_name\": \"Smith\",\n    \"email\": \"jane.smith@example.com\",\n    \"password\": \"SecureP@ssw0rd!2026\",\n    \"time_zone\": \"America/New_York\",\n})\nuser = user_resp.json()\nprint(f\"User created: {user['id']}\")\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 userResp = await fetch(`${BASE}/v1/users`, {\n  method: \"POST\",\n  headers,\n  body: JSON.stringify({\n    client_id: client.id,\n    first_name: \"Jane\",\n    last_name: \"Smith\",\n    email: \"jane.smith@example.com\",\n    password: \"SecureP@ssw0rd!2026\",\n    time_zone: \"America/New_York\",\n  }),\n});\nconst user = await userResp.json();\nconsole.log(`User created: ${user.id}`);\n","lang":"javascript"},"children":[]}]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Secure the password"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Transmit the initial password to the client through a secure channel (encrypted email, secure portal). Instruct them to change it on first login."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-3-configure-a-processor-integration","__idx":5},"children":["Step 3: Configure a processor integration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Add a TSYS integration so the client can process card transactions. Use the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["client's"]}," API key for this call."]},{"$$mdtype":"Tag","name":"Tabs","attributes":{"size":"medium"},"children":[{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"curl","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"curl -X POST \\\n  https://api.dev.paradisegateway.net/v1/integrations \\\n  -H \"Content-Type: application/json\" \\\n  -H \"APIKEY: CLIENT-API-KEY\" \\\n  -d '{\n    \"name\": \"tsys\",\n    \"is_active\": true,\n    \"configuration\": {\n      \"mid\": \"999000000011\",\n      \"tid\": \"00000001\",\n      \"industry_type\": \"e_commerce\",\n      \"settlement_time\": \"23:59:00\"\n    }\n  }'\n","lang":"shell"},"children":[]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"Python","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"merchant_headers = {\"Content-Type\": \"application/json\", \"APIKEY\": api_key}\nint_resp = requests.post(f\"{BASE}/v1/integrations\", headers=merchant_headers, json={\n    \"name\": \"tsys\",\n    \"is_active\": True,\n    \"configuration\": {\n        \"mid\": \"999000000011\",\n        \"tid\": \"00000001\",\n        \"industry_type\": \"e_commerce\",\n        \"settlement_time\": \"23:59:00\",\n    },\n})\nintegration = int_resp.json()\nprint(f\"Integration: {integration['id']} — active: {integration['is_active']}\")\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 merchantHeaders = { \"Content-Type\": \"application/json\", \"APIKEY\": apiKey };\nconst intResp = await fetch(`${BASE}/v1/integrations`, {\n  method: \"POST\",\n  headers: merchantHeaders,\n  body: JSON.stringify({\n    name: \"tsys\",\n    is_active: true,\n    configuration: {\n      mid: \"999000000011\",\n      tid: \"00000001\",\n      industry_type: \"e_commerce\",\n      settlement_time: \"23:59:00\",\n    },\n  }),\n});\nconst integration = await intResp.json();\nconsole.log(`Integration: ${integration.id} — active: ${integration.is_active}`);\n","lang":"javascript"},"children":[]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"verification-checklist","__idx":6},"children":["Verification checklist"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After completing all four steps, verify the onboarding succeeded:"]},{"$$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":"Check"},"children":["Check"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"How"},"children":["How"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Client exists"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /v1/clients/{client_id}"]}," returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["200"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["User can authenticate"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/auth/keys"]}," with Basic Auth succeeds"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["API key works"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Any authenticated request returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["200"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Integration is active"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /v1/integrations"]}," shows the integration with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["is_active: true"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Test payment works"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/transactions"]}," with a test card returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["approved"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"complete-automation-example","__idx":7},"children":["Complete automation example"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"def onboard_merchant(dba: str, parent_id: str, contact: dict, tsys_config: dict) -> dict:\n    client = requests.post(f\"{BASE}/v1/clients\", headers=HEADERS, json={\n        \"dba\": dba, \"parent_id\": parent_id, \"type\": \"merchant\",\n        \"admin_contact_details\": contact,\n    }).json()\n\n    user = requests.post(f\"{BASE}/v1/users\", headers=HEADERS, json={\n        \"client_id\": client[\"id\"],\n        \"first_name\": contact[\"first_name\"],\n        \"last_name\": contact[\"last_name\"],\n        \"email\": contact[\"email\"],\n        \"password\": contact[\"initial_password\"],\n        \"time_zone\": contact.get(\"time_zone\", \"America/New_York\"),\n    }).json()\n\n    creds = base64.b64encode(\n        f\"{contact['email']}:{contact['initial_password']}\".encode()\n    ).decode()\n    api_key = requests.post(f\"{BASE}/v1/auth/keys\", headers={\n        \"Content-Type\": \"application/json\",\n        \"Authorization\": f\"Basic {creds}\",\n    }).json()[\"key\"]\n\n    merchant_headers = {\"Content-Type\": \"application/json\", \"APIKEY\": api_key}\n    integration = requests.post(\n        f\"{BASE}/v1/integrations\", headers=merchant_headers, json={\n            \"name\": \"tsys\", \"is_active\": True, \"configuration\": tsys_config,\n        }\n    ).json()\n\n    return {\n        \"client_id\": client[\"id\"],\n        \"user_id\": user[\"id\"],\n        \"integration_id\": integration[\"id\"],\n    }\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"further-reading","__idx":8},"children":["Further reading"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/how-tos/clients-users/onboard-client"},"children":["Onboard a new client (how-to)"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/how-tos/integrations/add-integration"},"children":["Add an integration"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/concepts/account-hierarchy/clients-and-resellers"},"children":["Clients and resellers"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/concepts/account-hierarchy/users-and-roles"},"children":["Users and roles"]}]}]}]},"headings":[{"value":"Tutorial: Onboard a new client","id":"tutorial-onboard-a-new-client","depth":1},{"value":"What you will build","id":"what-you-will-build","depth":2},{"value":"Prerequisites","id":"prerequisites","depth":2},{"value":"Step 1: Create the client","id":"step-1-create-the-client","depth":2},{"value":"Step 2: Create the first user","id":"step-2-create-the-first-user","depth":2},{"value":"Step 3: Configure a processor integration","id":"step-3-configure-a-processor-integration","depth":2},{"value":"Verification checklist","id":"verification-checklist","depth":2},{"value":"Complete automation example","id":"complete-automation-example","depth":2},{"value":"Further reading","id":"further-reading","depth":2}],"frontmatter":{"title":"Tutorial: Onboard a new client","shortTitle":"Onboard a client","intro":"Walk through the complete client onboarding flow — create a client account, add the first user, obtain an API key, and configure a processor integration. At the end, the client is ready to process payments.","type":"tutorial","seo":{"title":""}},"lastModified":"2026-06-05T02:46:44.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/tutorials/account-management/onboard-a-client","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}