{"id":6990,"date":"2026-04-30T11:16:04","date_gmt":"2026-04-30T04:16:04","guid":{"rendered":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/?p=6990"},"modified":"2026-05-20T13:13:20","modified_gmt":"2026-05-20T06:13:20","slug":"apisetup_standard","status":"publish","type":"post","link":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/","title":{"rendered":"SKYBIZ API Setup &#8211; Standard"},"content":{"rendered":"<h5><strong>How to connect and use the SKYBIZ API<\/strong> Version 2.0<\/h5>\n<h3><strong>Introduction<\/strong><\/h3>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">This guide is for developers and POS vendors who want to quickly get started with the SKYBIZ API. It covers the essential steps such as getting your credentials, making your first request, and understanding the responses.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">For full technical details, field references, and error documentation, refer to the <a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_advanced\/\"><strong>SKYBIZ API Setup (Advanced)<\/strong><\/a>.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Target Audience:<\/strong> POS software vendors \/ Integration developers<\/p>\n<hr \/>\n<h3><strong>Before You Begin<\/strong><\/h3>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">Make sure the following are ready before you start:<\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3\">\n<li class=\"whitespace-normal break-words pl-2\">API Integration is <strong>enabled<\/strong> by your SKYBIZ administrator (Mode 1 = Production, Mode 2 = Developer)<\/li>\n<li class=\"whitespace-normal break-words pl-2\">You have a <strong>Callback URL<\/strong> that is publicly accessible and can receive POST requests<\/li>\n<li class=\"whitespace-normal break-words pl-2\">You have access to a REST client such as <strong>Postman<\/strong> for testing<\/li>\n<\/ul>\n<hr \/>\n<h4><\/h4>\n<h4>Step 1 \u2014 Set Up Your Callback URL<\/h4>\n<ul>\n<li>You must use publicly accessible Callback URL in order to receive your API Key and Secret Key<\/li>\n<li>You can also use public <a href=\"https:\/\/webhook.site\/\">Webhook Request Bin<\/a> that acts as a temporary, public endpoint that allows you to inspect, debug, and test HTTP requests and webhooks in real-time.<\/li>\n<\/ul>\n<h4>Sample Code for receiving the Keys using Callback URL<\/h4>\n<pre>&lt;?php\r\n\/\/ callback.php\r\n\/\/ Place this file on your server and use its URL as your callback_url during registration\r\n\/\/ Example: https:\/\/yourdomain.com\/callback.php\r\n\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 1 \u2014 Read the raw request body from SKYBIZ\r\n\/\/ ============================================================\r\n$rawBody = file_get_contents('php:\/\/input');\r\n$headers = getallheaders();\r\n$timestamp = $headers['X-Timestamp'] ?? '';\r\n$signature = $headers['X-Signature'] ?? '';\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 2 \u2014 Decode the JSON payload\r\n\/\/ ============================================================\r\n$payload = json_decode($rawBody, true);\r\n\r\nif (!$payload || !isset($payload['api_key'], $payload['api_secret'])) {\r\nhttp_response_code(400);\r\necho json_encode(['status' =&gt; 'error', 'message' =&gt; 'Invalid payload']);\r\nexit;\r\n}\r\n\r\n$apiKey = $payload['api_key'];\r\n$apiSecret = $payload['api_secret'];\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 3 \u2014 Verify the signature\r\n\/\/ This confirms the request is genuinely from SKYBIZ\r\n\/\/ ============================================================\r\n$expectedSignature = hash_hmac('sha256', $timestamp . '.' . $rawBody, $apiSecret);\r\n\r\nif (!hash_equals($expectedSignature, $signature)) {\r\nhttp_response_code(401);\r\necho json_encode(['status' =&gt; 'error', 'message' =&gt; 'Signature verification failed']);\r\nexit;\r\n}\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 4 \u2014 Store the credentials SECURELY\r\n\/\/ \r\n\/\/ \u26a0\ufe0f This is the ONLY time the api_secret is in plain text.\r\n\/\/ Save it now. SKYBIZ will NOT send it again.\r\n\/\/\r\n\/\/ Options:\r\n\/\/ A) Write to a secure .env file\r\n\/\/ B) Save to your database (encrypted)\r\n\/\/ C) Push to your secrets manager\r\n\/\/\r\n\/\/ The example below writes to a .env file.\r\n\/\/ ============================================================\r\n$envContent = \"SKYBIZ_API_KEY={$apiKey}\\nSKYBIZ_API_SECRET={$apiSecret}\\n\";\r\n\r\n\/\/ Make sure this path is OUTSIDE your public web root\r\n$envPath = __DIR__ . '\/..\/..\/secure\/.env';\r\n\r\nfile_put_contents($envPath, $envContent);\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 5 \u2014 Respond with 200 OK so SKYBIZ knows delivery was successful\r\n\/\/ ============================================================\r\nhttp_response_code(200);\r\necho json_encode(['status' =&gt; 'received']);\r\nexit;\r\n\r\n\r\n<\/pre>\n<h4>Guide to receive the Keys using Webhook.site<\/h4>\n<p>1.Go to <a href=\"https:\/\/webhook.site\/\">Webhook.site<\/a><\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/webhook.site_.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7010 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/webhook.site_.png\" alt=\"\" width=\"1902\" height=\"943\" \/><\/a><\/p>\n<p>2.Copy your unique URL and use it when registering your credentials as your Callback URL later in Step 2 &#8211; Register Your Credentials.<\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/webhook-url.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7011 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/webhook-url.png\" alt=\"\" width=\"1902\" height=\"943\" \/><\/a><\/p>\n<hr \/>\n<h4>Step 2 \u2014 Register Your Credentials<\/h4>\n<ol>\n<li>Navigate to <strong>API Credentials<\/strong> Section in SKYBIZ Portal<\/li>\n<\/ol>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/api-credentials-section-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7117 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/api-credentials-section-1.png\" alt=\"\" width=\"1673\" height=\"896\" \/><\/a><\/p>\n<p>2. Click the<strong> New Credentials<\/strong> Button on the right side of the API Credentials Section<\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/new-credentials-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7118 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/new-credentials-1.png\" alt=\"\" width=\"1673\" height=\"896\" \/><\/a><\/p>\n<p>4. The <strong>New API Credentials Popup<\/strong> will be displayed<\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/popup.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7002 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/popup.png\" alt=\"\" width=\"476\" height=\"280\" \/><\/a><\/p>\n<p>5. Select the <strong>Integration Type &#8211; API Key<\/strong><\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/type.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7003 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/type.png\" alt=\"\" width=\"477\" height=\"279\" \/><\/a><\/p>\n<p>6. Insert your public <strong>Callback URL or Newly Copied URL From Webhook.site<\/strong><\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/callback.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7004 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/callback.png\" alt=\"\" width=\"478\" height=\"279\" \/><\/a><\/p>\n<p>7. Click the <strong>Create Credentials Button<\/strong><\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/create-credentials.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7005 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/create-credentials.png\" alt=\"\" width=\"476\" height=\"279\" \/><\/a><\/p>\n<p>8. The <strong>API Key\u00a0<\/strong>and <strong>Secret Key<\/strong> will be sent to your Callback URL<\/p>\n<pre>{\r\n\"api_key\": \"a1b2c3d4e5f6a1b2c3d4e5f67\",\r\n\"api_secret\": \"your-64-character-secret-here\"\r\n}<\/pre>\n<p>9. If you are using Webhook.site, the keys will be sent and you can use the keys temporarily. You will need to save it into your database or env files in order to keep it secured.<\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/webhook-result-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7120 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/webhook-result-1.png\" alt=\"\" width=\"1919\" height=\"943\" \/><\/a><\/p>\n<p>10. Your API key comes with a renewal date. Once it expires, all requests made using that key will be rejected. You can check the renewal date from the API Credentials section in the SKYBIZ Portal. To continue using the API after expiry, delete the expired credentials and create a new API key set.<\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/expiry-active.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7124 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/expiry-active.png\" alt=\"\" width=\"1674\" height=\"892\" \/><\/a><\/p>\n<p>11. To delete an API you can navigate to API Credentials Section &gt; triple dot button &gt; and click delete. It will delete your API Key and you are required to create new API Credentials Set to make any API Request.<\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/delete-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7125 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/delete-1.png\" alt=\"\" width=\"1674\" height=\"893\" \/><\/a><\/p>\n<hr \/>\n<h4>Step 3 \u2014 View Module Permissions<\/h4>\n<p>1.Navigate to your newly added <strong>API Credentials<\/strong> set<\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/api-credentials-sets-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7119 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/api-credentials-sets-1.png\" alt=\"\" width=\"1672\" height=\"892\" \/><\/a><\/p>\n<p>2.Click the <strong>Modules Button<\/strong> at the right of the API Credentials set<\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/modules-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7122 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/modules-1.png\" alt=\"\" width=\"1674\" height=\"892\" \/><\/a><\/p>\n<p>3.The modal popup for <strong>Allowed Modules Permission\u00a0<\/strong>for your store will be displayed. You can only make an API Request based on the modules allowed only. Contact your SKYBIZ Administrator for any changes.<\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/modules-permission-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7018 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/modules-permission-1.png\" alt=\"\" width=\"477\" height=\"243\" \/><\/a><\/p>\n<hr \/>\n<h4>Step 4 \u2014 Make your first API Read Request<\/h4>\n<p>Ensure your mode are set to <strong>developer<\/strong> <strong>mode<\/strong> to make a request using HTTP or postman. If you are set to <strong>production mode<\/strong>, you are required to make the request using HTTPS origins only. Also ensure your API Key Expiry Date is still valid.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">All SKYBIZ API endpoints follow the same pattern:<\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3\">\n<li class=\"whitespace-normal break-words pl-2\"><strong>Method:<\/strong> POST<\/li>\n<li class=\"whitespace-normal break-words pl-2\"><strong>Content-Type:<\/strong> application\/json<\/li>\n<li class=\"whitespace-normal break-words pl-2\"><strong>Credentials:<\/strong> included in the request body (not in headers)<\/li>\n<\/ul>\n<p>Base request structure:<\/p>\n<pre>{\r\n\"api_key\": \"your-api-key\",\r\n\"api_secret\": \"your-api-secret\",\r\n\"action\": \"read\",\r\n\"date_from\": \"YYYY-MM-DD\",\r\n\"date_to\": \"YYYY-MM-DD\",\r\n\"fields\": [],\r\n\"filters\": []\r\n}<\/pre>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Date rules (applies to ALL modules):<\/strong><\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3\">\n<li class=\"whitespace-normal break-words pl-2\">Format must be <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">YYYY-MM-DD<\/code> \u2014 e.g. <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"2026-04-01\"<\/code><\/li>\n<li class=\"whitespace-normal break-words pl-2\">Maximum range is <strong>31 days<\/strong><\/li>\n<li class=\"whitespace-normal break-words pl-2\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">date_from<\/code> cannot be after <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">date_to<\/code><\/li>\n<\/ul>\n<h4>Sample Code for making an API READ request using php<\/h4>\n<pre>&lt;?php\r\nheader('Content-Type: application\/json');\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 1: CONFIGURATION\r\n\/\/ ============================================================\r\n\r\n$API_KEY = \"your-api-key\";\r\n$API_SECRET = \"your-api-secret\";\r\n$ACTION = \"read\";\r\n\r\n\/\/ Date range (required for all endpoints, max 31 days)\r\n$DATE_FROM = \"YYYY-MM-DD\";\r\n$DATE_TO = \"YYYY-MM-DD\";\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 2: ENDPOINT\r\n\/\/ ============================================================\r\n\r\n$BASE_URL = \"https:\/\/domain-name\/01\/clientportal\/apiv2\/modules\"; \/\/(replace it with your skybiz domain name url)\r\n$ENDPOINT = \"modules.php\"; \/\/(replace it with your allowed modules permission e.g customer.php\/supplier.php)\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 3: REQUEST PARAMETERS\r\n\/\/ ============================================================\r\n\r\n$requestParams = [\r\n\"date_from\" =&gt; $DATE_FROM,\r\n\"date_to\" =&gt; $DATE_TO,\r\n\"fields\" =&gt; [], \/\/ Leave empty for all fields, or specify like: [\"CusCode\", \"CusName\", \"Email\"]\r\n\"filters\" =&gt; [] \/\/ Optional filters, e.g.: [\"Tel\" =&gt; \"0123456789\"]\r\n];\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 4: BUILD PAYLOAD\r\n\/\/ ============================================================\r\n\r\n$payload = array_merge(\r\n[\r\n\"api_key\" =&gt; $API_KEY,\r\n\"api_secret\" =&gt; $API_SECRET,\r\n\"action\" =&gt; $ACTION\r\n],\r\n$requestParams\r\n);\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 5: SEND REQUEST\r\n\/\/ ============================================================\r\n\r\n$url = rtrim($BASE_URL, '\/') . '\/' . ltrim($ENDPOINT, '\/');\r\n\r\n$ch = curl_init($url);\r\n\r\ncurl_setopt_array($ch, [\r\nCURLOPT_RETURNTRANSFER =&gt; true,\r\nCURLOPT_POST =&gt; true,\r\nCURLOPT_POSTFIELDS =&gt; http_build_query($payload),\r\nCURLOPT_TIMEOUT =&gt; 30,\r\n]);\r\n\r\n$response = curl_exec($ch);\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 6: HANDLE CURL ERROR\r\n\/\/ ============================================================\r\n\r\nif ($response === false) {\r\necho json_encode([\r\n\"status\" =&gt; \"error\",\r\n\"timestamp\" =&gt; date(\"c\"),\r\n\"request_id\" =&gt; uniqid(\"req_\"),\r\n\"message\" =&gt; curl_error($ch)\r\n], JSON_PRETTY_PRINT);\r\ncurl_close($ch);\r\nexit;\r\n}\r\n\r\n$httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);\r\ncurl_close($ch);\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 7: DECODE RESPONSE\r\n\/\/ ============================================================\r\n\r\n$result = json_decode($response, true);\r\n\r\nif (!$result) {\r\necho json_encode([\r\n\"status\" =&gt; \"error\",\r\n\"timestamp\" =&gt; date(\"c\"),\r\n\"request_id\" =&gt; uniqid(\"req_\"),\r\n\"message\" =&gt; \"Invalid JSON from API\",\r\n\"raw_response\" =&gt; $response\r\n], JSON_PRETTY_PRINT);\r\nexit;\r\n}\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 8: RETURN CLEAN JSON FORMAT\r\n\/\/ ============================================================\r\n\r\necho json_encode([\r\n\"status\" =&gt; $result['status'] ?? \"error\",\r\n\"timestamp\" =&gt; date(\"c\"),\r\n\"request_id\" =&gt; $result['request_id'] ?? uniqid(\"req_\"),\r\n\"data\" =&gt; $result['data'] ?? null,\r\n\"message\" =&gt; $result['message'] ?? null\r\n], JSON_PRETTY_PRINT);<\/pre>\n<h4>Step for making an API READ request using postman<\/h4>\n<ol>\n<li>Ensure method are set to POST when make a request<\/li>\n<li>Enter http:\/\/domain-name\/01\/clientportal\/apiv2\/modules\/modules.php for the URL and replace it with your SKYBIZ domain name and allowed modules permission.<\/li>\n<li>Ensure all fields are correctly inserted in Raw-Body-JSON request.<\/li>\n<\/ol>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/postman-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7022 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/postman-1.png\" alt=\"\" width=\"1086\" height=\"305\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<h4>Step 5 \u2014 Make your first API Create Request<\/h4>\n<p>A create request lets you push new documents into SKYBIZ. Unlike a read request, <strong>no date range is required<\/strong> \u2014 instead, you send a structured <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">documents<\/code> array containing your header and line item data.<\/p>\n<p>Ensure your mode are set to <strong>developer<\/strong> <strong>mode<\/strong> to make a request using HTTP or postman. If you are set to <strong>production mode<\/strong>, you are required to make the request using HTTPS origins only. Also ensure your API Key Expiry Date is still valid.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">All SKYBIZ API endpoints follow the same pattern:<\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3\">\n<li class=\"whitespace-normal break-words pl-2\"><strong>Method:<\/strong> POST<\/li>\n<li class=\"whitespace-normal break-words pl-2\"><strong>Content-Type:<\/strong> application\/json<\/li>\n<li class=\"whitespace-normal break-words pl-2\"><strong>Credentials:<\/strong> included in the request body (not in headers)<\/li>\n<li><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"action\"<\/code> must be set to <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"create\"<\/code><\/li>\n<li>You must have <strong>create permission<\/strong> enabled for the module (check via Step 3)<\/li>\n<\/ul>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\">1. SALES (<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">sales.php<\/code>)<\/h3>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Request Key:<\/strong> <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">sales_data<\/code><\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Allowed DocTypes:<\/strong> <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CusInv<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CS<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CusCN<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CusDN<\/code><\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Compulsory Fields:<\/strong><\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3\">\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">Header: <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Doc1No<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CusCode<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCNetAmt<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCDtTax<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">DocType<\/code><\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">Items: <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">ItemCode<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Description<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Qty<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">FactorQty<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">UOM<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCUnitCost<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCLineAmt<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">BlankLine<\/code><\/li>\n<\/ul>\n<p><strong><span class=\"\">Base Request Structure:<\/span><\/strong><\/p>\n<pre>{\r\n\"api_key\": \"your-api-key\",\r\n\"api_secret\": \"your-api-secret\",\r\n\"action\": \"create\",\r\n\"sales_data\": {\r\n\"documents\": [\r\n{\r\n\"Doc1No\": \"---\",\r\n\"Doc2No\": \"---\",\r\n\"Doc3No\": \"---\",\r\n\"D_ate\": \"YYYY-MM-DD\",\r\n\"CusCode\": \"---\",\r\n\"HCNetAmt\": 00.00,\r\n\"HCDtTax\": 00.00,\r\n\"CurCode\": \"---\",\r\n\"CurRate1\": 1,\r\n\"DocType\": \"---\",\r\n\"UD1\": \"---\",\r\n\"items\": [\r\n{\r\n\"ItemCode\": \"---\",\r\n\"Description\": \"---\",\r\n\"Description2\": \"---\",\r\n\"Qty\": 1,\r\n\"FactorQty\": 1,\r\n\"UOM\": \"---\",\r\n\"HCUnitCost\": 00.00,\r\n\"HCLineAmt\": 00.00,\r\n\"HCDiscount\": 0,\r\n\"DisRate1\": 0,\r\n\"HCTax\": 00.00,\r\n\"TaxRate1\": 1,\r\n\"DetailTaxCode\": \"---\",\r\n\"SalesPersonCode\": \"---\",\r\n\"BranchCode\": \"--\",\r\n\"DepartmentCode\": \"---\",\r\n\"ProjectCode\": \"---\",\r\n\"LocationCode\": \"---\",\r\n\"BlankLine\": \"0\",\r\n\"WarrantyDate\": \"YYYY-MM-DD\",\r\n\"DUD1\": \"---\",\r\n\"DUD2\": \"---\",\r\n\"DUD3\": \"\",\r\n\"DUD4\": \"\",\r\n\"DUD5\": \"\",\r\n\"DUD6\": \"\",\r\n\"LineNo\": 1\r\n}\r\n]\r\n}\r\n]\r\n}\r\n}<\/pre>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\">2. PURCHASE (<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">purchase.php<\/code>)<\/h3>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Request Key:<\/strong> <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">purchase_data<\/code><\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Allowed DocTypes:<\/strong> <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">SupInv<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">SupCN<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">SupDN<\/code><\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Compulsory Fields:<\/strong><\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3\">\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">Header: <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Doc1No<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CusCode<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCNetAmt<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCDtTax<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">DocType<\/code><\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">Items: <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">ItemCode<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Description<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Qty<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">FactorQty<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">UOM<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCUnitCost<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCLineAmt<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">BlankLine<\/code><\/li>\n<\/ul>\n<p class=\"ds-markdown-paragraph\"><strong><span class=\"\">Base Request Structure:<\/span><\/strong><\/p>\n<pre>{\r\n\"api_key\": \"your-api-key-here\",\r\n\"api_secret\": \"your-api-secret-here\",\r\n\"action\": \"create\",\r\n\"purchase_data\": {\r\n\"documents\": [\r\n{\r\n\"Doc1No\": \"---\",\r\n\"Doc2No\": \"---\",\r\n\"Doc3No\": \"---\",\r\n\"D_ate\": \"YYYY-MM-DD\",\r\n\"CusCode\": \"---\",\r\n\"HCNetAmt\": 00.00,\r\n\"HCDtTax\": 00.00,\r\n\"CurCode\": \"---\",\r\n\"CurRate1\": 1,\r\n\"DocType\": \"---\",\r\n\"items\": [\r\n{\r\n\"ItemCode\": \"---\",\r\n\"Description\": \"---\",\r\n\"Description2\": \"---\",\r\n\"Qty\": 1,\r\n\"FactorQty\": 1,\r\n\"UOM\": \"---\",\r\n\"UOMSingular\": \"---\",\r\n\"HCUnitCost\": 00.00,\r\n\"HCLineAmt\": 00.00,\r\n\"HCDiscount\": 0,\r\n\"DisRate1\": 0,\r\n\"HCTax\": 00.00,\r\n\"TaxRate1\": 1,\r\n\"DetailTaxCode\": \"---\",\r\n\"BranchCode\": \"---\",\r\n\"DepartmentCode\": \"---\",\r\n\"ProjectCode\": \"---\",\r\n\"LocationCode\": \"---\",\r\n\"BlankLine\": \"0\",\r\n\"WarrantyDate\": \"YYYY-MM-DD\",\r\n\"GRNNo\": \"---\",\r\n\"PORunNo\": 1,\r\n\"PONO\": \"---\",\r\n\"LandingCost\": 0,\r\n\"OCCode\": \"\",\r\n\"OCRate\": 0,\r\n\"OCAmt\": 0,\r\n\"GLCode\": \"---\",\r\n\"FinCatCode\": \"---\",\r\n\"DUD1\": \"---\",\r\n\"DUD2\": \"---\",\r\n\"LineNo\": 1\r\n},\r\n{\r\n\"ItemCode\": \"---\",\r\n\"Description\": \"---\",\r\n\"Qty\": 1,\r\n\"FactorQty\": 1,\r\n\"UOM\": \"---\",\r\n\"HCUnitCost\": 00.00,\r\n\"HCLineAmt\": 00.00,\r\n\"HCTax\": 00.00,\r\n\"TaxRate1\": 1,\r\n\"BlankLine\": \"0\"\r\n}\r\n]\r\n}\r\n]\r\n}\r\n}<\/pre>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\">3. COLLECTION (<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">collection.php<\/code>)<\/h3>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Request Key:<\/strong> <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">collection_data<\/code><\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Allowed DocTypes:<\/strong> <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CS<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Collection<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CF<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CusCN<\/code><\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Compulsory Fields:<\/strong><\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3\">\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Doc1No<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CusCode<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">D_ate<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">DocType<\/code><\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">At least one payment method with amount &gt; 0<\/li>\n<\/ul>\n<p class=\"ds-markdown-paragraph\"><strong><span class=\"\">Base Request Structure:<br \/>\n<\/span><\/strong><\/p>\n<pre>{\r\n\"api_key\": \"your-api-key\",\r\n\"api_secret\": \"your-api-secret\",\r\n\"action\": \"create\",\r\n\"collection_data\": {\r\n\"documents\": [\r\n{\r\n\"Doc1No\": \"INV-001\",\r\n\"CusCode\": \"CUST001\",\r\n\"D_ate\": \"2026-05-12\",\r\n\"T_ime\": \"14:30:00\",\r\n\"DocType\": \"CS\",\r\n\"T_ype\": \"CASH\",\r\n\"CashAmt\": 500.00,\r\n\"CC1Amt\": 0,\r\n\"CC2Amt\": 0,\r\n\"Cheque1Amt\": 0,\r\n\"Cheque2Amt\": 0,\r\n\"VoucherAmt\": 0,\r\n\"Remark\": \"Payment for invoice\"\r\n}\r\n]\r\n}\r\n}<\/pre>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\">4. CUSTOMER (<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">customer.php<\/code>)<\/h3>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Request Key:<\/strong> <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">customer_data<\/code><\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Allowed DocTypes:<\/strong> N\/A (not applicable for Customer)<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Compulsory Fields:<\/strong><\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3\">\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">AccountCode<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CusCode<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CusName<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CurCode<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">D_ay<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CategoryCode<\/code><\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">FinCatCode<\/code> is hardcoded as <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">B55<\/code> (not required from user)<\/li>\n<\/ul>\n<p class=\"ds-markdown-paragraph\"><strong><span class=\"\">Base Request Structure:<\/span><\/strong><\/p>\n<pre>{\r\n\"api_key\": \"your-api-key\",\r\n\"api_secret\": \"your-api-secret\",\r\n\"action\": \"create\",\r\n\"customer_data\": {\r\n\"documents\": [\r\n{\r\n\"AccountCode\": \"AR-001\",\r\n\"CusCode\": \"CUST001\",\r\n\"CusName\": \"Customer Name\",\r\n\"CurCode\": \"MYR\",\r\n\"D_ay\": 30,\r\n\"CategoryCode\": \"RETAIL\",\r\n\"Address1\": \"123 Jalan SS2\",\r\n\"Address2\": \"Section 2\",\r\n\"AreaCode\": \"SEL\",\r\n\"CreditLimit\": 10000.00,\r\n\"SalesPersonCode\": \"SALES01\",\r\n\"Tel\": \"03-12345678\",\r\n\"Tel2\": \"012-3456789\",\r\n\"Fax\": \"03-12345679\",\r\n\"Fax2\": \"\",\r\n\"Contact\": \"John Doe\",\r\n\"ContactTel\": \"012-3456789\",\r\n\"URL\": \"www.customer.com\",\r\n\"Email\": \"customer@test.com\",\r\n\"GSTNo\": \"123456789\",\r\n\"Town\": \"Petaling Jaya\",\r\n\"State\": \"Selangor\",\r\n\"Country\": \"Malaysia\",\r\n\"PostCode\": \"47300\",\r\n\"NRICNo\": \"800101-01-1234\",\r\n\"SalesTaxNo\": \"ST123456\",\r\n\"TaxExemptionNo\": \"TX123456\",\r\n\"TaxTel\": \"03-12345670\",\r\n\"TaxEmail\": \"tax@customer.com\"\r\n}\r\n]\r\n}\r\n}<\/pre>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\">5. SUPPLIER (<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">supplier.php<\/code>)<\/h3>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Request Key:<\/strong> <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">supplier_data<\/code><\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Allowed DocTypes:<\/strong> N\/A (not applicable for Supplier)<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Compulsory Fields:<\/strong><\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3\">\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">AccountCode<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CusCode<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CusName<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CurCode<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">D_ay<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CategoryCode<\/code><\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">FinCatCode<\/code> is hardcoded as <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">B70<\/code> (not required from user)<\/li>\n<\/ul>\n<p class=\"ds-markdown-paragraph\"><strong><span class=\"\">Base Request Structure:<\/span><\/strong><\/p>\n<pre>{\r\n\"api_key\": \"your-api-key\",\r\n\"api_secret\": \"your-api-secret\",\r\n\"action\": \"create\",\r\n\"supplier_data\": {\r\n\"documents\": [\r\n{\r\n\"AccountCode\": \"AP-001\",\r\n\"CusCode\": \"SUPP001\",\r\n\"CusName\": \"Supplier Name\",\r\n\"CurCode\": \"MYR\",\r\n\"D_ay\": 30,\r\n\"CategoryCode\": \"LOCAL\",\r\n\"Address1\": \"123 Industrial Area\",\r\n\"AreaCode\": \"SEL\",\r\n\"CreditLimit\": 100000.00,\r\n\"SalesPersonCode\": \"PURCHASE01\",\r\n\"Tel\": \"03-12345678\",\r\n\"Tel2\": \"012-3456789\",\r\n\"Fax\": \"03-12345679\",\r\n\"Fax2\": \"\",\r\n\"Contact\": \"Ahmad Bin Abdullah\",\r\n\"ContactTel\": \"012-3456789\",\r\n\"URL\": \"www.supplier.com\",\r\n\"Email\": \"supplier@test.com\",\r\n\"GSTNo\": \"123456789\",\r\n\"Town\": \"Shah Alam\",\r\n\"State\": \"Selangor\",\r\n\"Country\": \"Malaysia\",\r\n\"PostCode\": \"40000\",\r\n\"NRICNo\": \"750101-01-1234\",\r\n\"SalesTaxNo\": \"ST123456\",\r\n\"TaxExemptionNo\": \"TX123456\",\r\n\"TaxTel\": \"03-12345670\",\r\n\"TaxEmail\": \"tax@supplier.com\"\r\n}\r\n]\r\n}\r\n}<\/pre>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\">6. SALES ORDER (<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">sales_order.php<\/code>)<\/h3>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Request Key:<\/strong> <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">order_data<\/code><\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Allowed DocTypes:<\/strong> <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">SO<\/code> (Sales Order only)<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Compulsory Fields:<\/strong><\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3\">\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">Header: <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Doc1No<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">CusCode<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCNetAmt<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCDtTax<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">DocType<\/code><\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">Items: <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">ItemCode<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Description<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Qty<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">FactorQty<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">UOM<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCUnitCost<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCLineAmt<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">BlankLine<\/code><\/li>\n<\/ul>\n<p class=\"ds-markdown-paragraph\"><strong><span class=\"\">Base Request Structure:<\/span><\/strong><\/p>\n<pre>{\r\n\"api_key\": \"your-api-key\",\r\n\"api_secret\": \"your-api-secret\",\r\n\"action\": \"create\",\r\n\"order_data\": {\r\n\"documents\": [\r\n{\r\n\"Doc1No\": \"SO-001\",\r\n\"Doc2No\": \"REF-001\",\r\n\"Doc3No\": \"PO-001\",\r\n\"D_ate\": \"2026-05-12\",\r\n\"CusCode\": \"CUST001\",\r\n\"CusName\": \"Customer Name\",\r\n\"HCNetAmt\": 1250.00,\r\n\"HCDtTax\": 75.00,\r\n\"CurCode\": \"MYR\",\r\n\"CurRate1\": 1,\r\n\"DocType\": \"SO\",\r\n\"Address\": \"123 Jalan SS2\",\r\n\"City\": \"Petaling Jaya\",\r\n\"State\": \"Selangor\",\r\n\"Zip\": \"47300\",\r\n\"ContactTel\": \"0123456789\",\r\n\"Email\": \"customer@test.com\",\r\n\"Attention\": \"Urgent order\",\r\n\"items\": [\r\n{\r\n\"ItemCode\": \"ITEM001\",\r\n\"Description\": \"Product 1\",\r\n\"Description2\": \"Additional details\",\r\n\"Qty\": 10,\r\n\"FactorQty\": 1,\r\n\"UOM\": \"PCS\",\r\n\"UOMSingular\": \"Piece\",\r\n\"HCUnitCost\": 100.00,\r\n\"HCLineAmt\": 1000.00,\r\n\"HCDiscount\": 0,\r\n\"DisRate1\": 0,\r\n\"HCTax\": 8.00,\r\n\"TaxRate1\": 8,\r\n\"DetailTaxCode\": \"TX001\",\r\n\"SalesPersonCode\": \"SALES01\",\r\n\"BranchCode\": \"HQ\",\r\n\"DepartmentCode\": \"SALES\",\r\n\"ProjectCode\": \"PROJ001\",\r\n\"LocationCode\": \"WH01\",\r\n\"BlankLine\": \"0\",\r\n\"DeliveryDate\": \"2026-05-15\",\r\n\"DUD1\": \"Batch#ABC123\",\r\n\"DUD2\": \"Handle with care\",\r\n\"LineNo\": 1\r\n}\r\n]\r\n}\r\n]\r\n}\r\n}<\/pre>\n<h4 class=\"text-text-100 mt-2 -mb-1 text-base font-bold\">BlankLine Values<\/h4>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">Each item line requires a <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">BlankLine<\/code> value that tells SKYBIZ the type of line:<\/p>\n<div class=\"overflow-x-auto w-full px-2 mb-6\">\n<table class=\"min-w-full border-collapse text-sm leading-[1.7] whitespace-normal\">\n<thead class=\"text-left\">\n<tr>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">Value<\/th>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">Type<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"0\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Stock Item<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"4\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Other Charge<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"6\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">GL Account<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<blockquote class=\"ml-2 border-l-4 border-border-300\/10 pl-4 text-text-300\">\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">\u26a0\ufe0f SKYBIZ validates that <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCLineAmt = Qty \u00d7 HCUnitCost<\/code> and that the sum of all item <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCLineAmt<\/code> values matches the document header <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCNetAmt<\/code>. Mismatches will cause the entire document to fail.<\/p>\n<\/blockquote>\n<h4 class=\"text-text-100 mt-2 -mb-1 text-base font-bold\">Maximum Documents per Request<\/h4>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">You can send up to <strong>500 documents<\/strong> per create request. If you exceed this, split your data into multiple requests.<\/p>\n<h4>Sample Code for making an API CREATE request using php<\/h4>\n<pre>&lt;?php\r\n\r\nheader('Content-Type: application\/json');\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 1: CONFIGURATION\r\n\/\/ ============================================================\r\n\r\n$API_KEY = \"your-api-key\";\r\n$API_SECRET = \"your-api-secret\";\r\n$ACTION = \"create\";\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 2: ENDPOINT\r\n\/\/ ============================================================\r\n\r\n$BASE_URL = \"https:\/\/domain-name\/01\/clientportal\/apiv2\/modules\"; \/\/ (replace with your SKYBIZ domain name url)\r\n$ENDPOINT = \"modules.php\"; \/\/ (replace with your allowed module e.g. sales.php \/ purchase.php)\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 3: DATA KEY\r\n\/\/\r\n\/\/ Set the data key that matches the module endpoint above.\r\n\/\/ sales.php \u2192 \"sales_data\" (DocTypes: CusInv, CS, CusCN, CusDN)\r\n\/\/ purchase.php \u2192 \"purchase_data\" (DocTypes: SupInv, SupCN, SupDN)\r\n\/\/ ============================================================\r\n\r\n$DATA_KEY = \"sales_data\"; \/\/ (replace with the data key that matches your endpoint above)\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 4: BUILD YOUR DOCUMENTS ARRAY\r\n\/\/\r\n\/\/ Maximum: 500 documents per request.\r\n\/\/ If you have more than 500, split them into multiple requests.\r\n\/\/\r\n\/\/ COMPULSORY HEADER FIELDS (all modules):\r\n\/\/ Doc1No, CusCode, DocType, HCNetAmt, HCDtTax\r\n\/\/\r\n\/\/ COMPULSORY ITEM FIELDS (all modules):\r\n\/\/ ItemCode, Description, Qty, FactorQty, UOM,\r\n\/\/ HCUnitCost, HCLineAmt, BlankLine\r\n\/\/\r\n\/\/ AMOUNT RULES (all modules):\r\n\/\/ - HCLineAmt must equal Qty \u00d7 HCUnitCost\r\n\/\/ - HCTax must equal HCLineAmt \u00d7 (TaxRate1 \/ 100)\r\n\/\/ - Sum of all item HCLineAmt must equal document HCNetAmt\r\n\/\/ - Sum of all item HCTax must equal document HCDtTax\r\n\/\/\r\n\/\/ BLANKLINE VALUES:\r\n\/\/ \"0\" = Stock Item | \"4\" = Other Charge | \"6\" = GL Account\r\n\/\/\r\n\/\/ ============================================================\r\n\/\/ SALES-SPECIFIC NOTES (sales.php):\r\n\/\/ - CusCode = Customer Code\r\n\/\/ - DocType = CusInv | CS | CusCN | CusDN\r\n\/\/ - Date = Required. Defaults to today.\r\n\/\/\r\n\/\/ PURCHASE-SPECIFIC NOTES (purchase.php):\r\n\/\/ - CusCode = Supplier Code\r\n\/\/ - DocType = SupInv | SupCN | SupDN \r\n\/\/ - D_ate = Document date. Format: YYYY-MM-DD. Defaults to today.\r\n\/\/ - Doc2No = Optional. Supplier invoice reference number.\r\n\/\/ - Doc3No = Optional. Additional reference.\r\n\/\/ ============================================================\r\n\r\n$DOCUMENTS = [];\r\n\r\n\/\/ ============================================================\r\n\/\/ OPTION A: MANUAL DOCUMENTS\r\n\/\/ ============================================================\r\n\r\n\/\/ --- SALES example ---\r\n\/\/ $DOCUMENTS[] = [\r\n\/\/ \"Doc1No\" =&gt; \"INV-0001\", \/\/ (required) Your invoice number\r\n\/\/ \"CusCode\" =&gt; \"C-000001\", \/\/ (required) Customer code\r\n\/\/ \"DocType\" =&gt; \"CusInv\", \/\/ (required) CusInv | CS | CusCN | CusDN\r\n\/\/ \"HCNetAmt\" =&gt; 100.00, \/\/ (required) Must equal sum of all item HCLineAmt\r\n\/\/ \"HCDtTax\" =&gt; 8.00, \/\/ (required) Must equal sum of all item HCTax\r\n\/\/ \"CurCode\" =&gt; \"MYR\", \/\/ (optional) Default: MYR\r\n\/\/ \"CurRate1\" =&gt; 1, \/\/ (optional) Default: 1\r\n\/\/ \"items\" =&gt; [\r\n\/\/ [\r\n\/\/ \"LineNo\" =&gt; 1, \/\/ (optional) Auto-assigned if omitted\r\n\/\/ \"ItemCode\" =&gt; \"ITEM001\", \/\/ (required) Must exist in SKYBIZ\r\n\/\/ \"Description\" =&gt; \"Product A\", \/\/ (required)\r\n\/\/ \"Qty\" =&gt; 2, \/\/ (required) Must be &gt; 0\r\n\/\/ \"FactorQty\" =&gt; 1, \/\/ (required) Default: 1. Must be &gt; 0\r\n\/\/ \"UOM\" =&gt; \"PCS\", \/\/ (required)\r\n\/\/ \"HCUnitCost\" =&gt; 50.00, \/\/ (required) Must be &gt; 0 for stock items\r\n\/\/ \"HCLineAmt\" =&gt; 100.00, \/\/ (required) Must equal Qty \u00d7 HCUnitCost\r\n\/\/ \"BlankLine\" =&gt; \"0\", \/\/ (required) \"0\"=Stock, \"4\"=Other Charge, \"6\"=GL\r\n\/\/ \"HCTax\" =&gt; 8.00, \/\/ (optional) Must equal HCLineAmt \u00d7 TaxRate1%\r\n\/\/ \"TaxRate1\" =&gt; 8, \/\/ (optional)\r\n\/\/ \"DetailTaxCode\" =&gt; \"GST8\", \/\/ (optional) Must exist in SKYBIZ if provided\r\n\/\/ \"SalesPersonCode\"=&gt; \"\", \/\/ (optional) Must exist in SKYBIZ if provided\r\n\/\/ \"BranchCode\" =&gt; \"\", \/\/ (optional) Must exist in SKYBIZ if provided\r\n\/\/ \"DepartmentCode\" =&gt; \"\", \/\/ (optional) Must exist in SKYBIZ if provided\r\n\/\/ \"ProjectCode\" =&gt; \"\", \/\/ (optional) Must exist in SKYBIZ if provided\r\n\/\/ \"LocationCode\" =&gt; \"\", \/\/ (optional) Must exist in SKYBIZ if provided\r\n\/\/ \"WarrantyDate\" =&gt; \"\", \/\/ Format: YYYY-MM-DD\r\n\/\/ \"Description2\" =&gt; \"\", \/\/ (optional)\r\n\/\/ \"HCDiscount\" =&gt; 0, \/\/ (optional)\r\n\/\/ \"DisRate1\" =&gt; 0, \/\/ (optional)\r\n\/\/ \"DUD1\" =&gt; \"\", \/\/ (optional) User-defined fields DUD1\u2013DUD6\r\n\/\/ \"DUD2\" =&gt; \"\",\r\n\/\/ \"DUD3\" =&gt; \"\",\r\n\/\/ \"DUD4\" =&gt; \"\",\r\n\/\/ \"DUD5\" =&gt; \"\",\r\n\/\/ \"DUD6\" =&gt; \"\"\r\n\/\/ ]\r\n\/\/ ]\r\n\/\/ ];\r\n\r\n\/\/ --- PURCHASE example ---\r\n\/\/ $DOCUMENTS[] = [\r\n\/\/ \"Doc1No\" =&gt; \"PINV-0001\", \/\/ (required) Your document number\r\n\/\/ \"CusCode\" =&gt; \"S-000001\", \/\/ (required) Supplier code\r\n\/\/ \"DocType\" =&gt; \"SupInv\", \/\/ (required) SupInv | SupCN | SupDN | PurRet\r\n\/\/ \"HCNetAmt\" =&gt; 200.00, \/\/ (required) Must equal sum of all item HCLineAmt\r\n\/\/ \"HCDtTax\" =&gt; 8.00, \/\/ (required) Must equal sum of all item HCTax\r\n\/\/ \"D_ate\" =&gt; \"2026-05-07\", \/\/ Document date. Format: YYYY-MM-DD\r\n\/\/ \"Doc2No\" =&gt; \"PO-12345\", \/\/ (optional) Supplier invoice reference\r\n\/\/ \"Doc3No\" =&gt; \"\", \/\/ (optional) Additional reference\r\n\/\/ \"CurCode\" =&gt; \"MYR\", \/\/ (optional) Default: MYR\r\n\/\/ \"CurRate1\" =&gt; 1, \/\/ (optional) Default: 1. Must be &gt; 0\r\n\/\/ \"items\" =&gt; [\r\n\/\/ [\r\n\/\/ \"LineNo\" =&gt; 1, \/\/ (optional) Auto-assigned if omitted\r\n\/\/ \"ItemCode\" =&gt; \"ITEM001\", \/\/ (required) Must exist in SKYBIZ\r\n\/\/ \"Description\" =&gt; \"Product B\", \/\/ (required)\r\n\/\/ \"Qty\" =&gt; 4, \/\/ (required) Must be &gt; 0\r\n\/\/ \"FactorQty\" =&gt; 1, \/\/ (required) Default: 1. Must be &gt; 0\r\n\/\/ \"UOM\" =&gt; \"PCS\", \/\/ (required)\r\n\/\/ \"HCUnitCost\" =&gt; 50.00, \/\/ (required) Must be &gt; 0 for stock items\r\n\/\/ \"HCLineAmt\" =&gt; 200.00, \/\/ (required) Must equal Qty \u00d7 HCUnitCost\r\n\/\/ \"BlankLine\" =&gt; \"0\", \/\/ (required) \"0\"=Stock, \"4\"=Other Charge, \"6\"=GL\r\n\/\/ \"HCTax\" =&gt; 8.00, \/\/ (optional) Must equal HCLineAmt \u00d7 TaxRate1%\r\n\/\/ \"TaxRate1\" =&gt; 8, \/\/ (optional)\r\n\/\/ \"DetailTaxCode\" =&gt; \"GST8\", \/\/ (optional) Must exist in SKYBIZ if provided\r\n\/\/ \"BranchCode\" =&gt; \"\", \/\/ (optional) Must exist in SKYBIZ if provided\r\n\/\/ \"DepartmentCode\" =&gt; \"\", \/\/ (optional) Must exist in SKYBIZ if provided\r\n\/\/ \"ProjectCode\" =&gt; \"\", \/\/ (optional) Must exist in SKYBIZ if provided\r\n\/\/ \"LocationCode\" =&gt; \"\", \/\/ (optional) Must exist in SKYBIZ if provided\r\n\/\/ \"WarrantyDate\" =&gt; \"\", \/\/ (optional) Format: YYYY-MM-DD\r\n\/\/ \"Description2\" =&gt; \"\", \/\/ (optional)\r\n\/\/ \"UOMSingular\" =&gt; \"\", \/\/ (optional) Singular form of UOM\r\n\/\/ \"GRNNo\" =&gt; \"\", \/\/ (optional) GRN reference number\r\n\/\/ \"PORunNo\" =&gt; 0, \/\/ (optional) PO run number\r\n\/\/ \"PONO\" =&gt; \"\", \/\/ (optional) PO number\r\n\/\/ \"LandingCost\" =&gt; 0, \/\/ (optional)\r\n\/\/ \"OCCode\" =&gt; \"\", \/\/ (optional) Other charge code\r\n\/\/ \"OCRate\" =&gt; 0, \/\/ (optional)\r\n\/\/ \"OCAmt\" =&gt; 0, \/\/ (optional)\r\n\/\/ \"GLCode\" =&gt; \"\", \/\/ (optional)\r\n\/\/ \"FinCatCode\" =&gt; \"\", \/\/ (optional)\r\n\/\/ \"HCDiscount\" =&gt; 0, \/\/ (optional)\r\n\/\/ \"DisRate1\" =&gt; 0, \/\/ (optional)\r\n\/\/ \"DUD1\" =&gt; \"\", \/\/ (optional) User-defined fields DUD1\u2013DUD6\r\n\/\/ \"DUD2\" =&gt; \"\",\r\n\/\/ \"DUD3\" =&gt; \"\",\r\n\/\/ \"DUD4\" =&gt; \"\",\r\n\/\/ \"DUD5\" =&gt; \"\",\r\n\/\/ \"DUD6\" =&gt; \"\"\r\n\/\/ ]\r\n\/\/ ]\r\n\/\/ ];\r\n\r\n\/\/ ============================================================\r\n\/\/ OPTION B: READ FROM DATABASE (replace with your DB query)\r\n\/\/ ============================================================\r\n\r\n\/\/ $sql = \"SELECT * FROM your_source_table LIMIT 500\";\r\n\/\/ $result = mysqli_query($your_conn, $sql);\r\n\/\/ while ($row = mysqli_fetch_assoc($result)) {\r\n\/\/ $DOCUMENTS[] = [\r\n\/\/ \"Doc1No\" =&gt; $row['invoice_no'],\r\n\/\/ \"CusCode\" =&gt; $row['customer_or_supplier_code'],\r\n\/\/ \"DocType\" =&gt; $row['doc_type'],\r\n\/\/ \"HCNetAmt\" =&gt; (float)$row['net_amount'],\r\n\/\/ \"HCDtTax\" =&gt; (float)$row['tax_amount'],\r\n\/\/ \"CurCode\" =&gt; \"MYR\",\r\n\/\/ \"CurRate1\" =&gt; 1,\r\n\/\/ \"items\" =&gt; json_decode($row['items'], true)\r\n\/\/ ];\r\n\/\/ }\r\n\r\n\/\/ ============================================================\r\n\/\/ OPTION C: READ FROM CSV FILE\r\n\/\/ ============================================================\r\n\r\n\/\/ if (($handle = fopen(\"your_data.csv\", \"r\")) !== false) {\r\n\/\/ $rowCount = 0;\r\n\/\/ while (($data = fgetcsv($handle)) !== false &amp;&amp; $rowCount &lt; 500) {\r\n\/\/ $DOCUMENTS[] = [\r\n\/\/ \"Doc1No\" =&gt; $data[0],\r\n\/\/ \"CusCode\" =&gt; $data[1],\r\n\/\/ \"DocType\" =&gt; $data[2],\r\n\/\/ \"HCNetAmt\" =&gt; (float)$data[3],\r\n\/\/ \"HCDtTax\" =&gt; (float)$data[4],\r\n\/\/ \"CurCode\" =&gt; \"MYR\",\r\n\/\/ \"CurRate1\" =&gt; 1,\r\n\/\/ \"items\" =&gt; [\r\n\/\/ [\r\n\/\/ \"ItemCode\" =&gt; $data[5],\r\n\/\/ \"Description\" =&gt; $data[6],\r\n\/\/ \"Qty\" =&gt; (float)$data[7],\r\n\/\/ \"FactorQty\" =&gt; 1,\r\n\/\/ \"UOM\" =&gt; \"UNIT\",\r\n\/\/ \"HCUnitCost\" =&gt; (float)$data[8],\r\n\/\/ \"HCLineAmt\" =&gt; (float)$data[9],\r\n\/\/ \"HCTax\" =&gt; (float)$data[10],\r\n\/\/ \"TaxRate1\" =&gt; 8,\r\n\/\/ \"BlankLine\" =&gt; \"0\"\r\n\/\/ ]\r\n\/\/ ]\r\n\/\/ ];\r\n\/\/ $rowCount++;\r\n\/\/ }\r\n\/\/ fclose($handle);\r\n\/\/ }\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 5: CLIENT-SIDE COUNT CHECK (PLease do not modify this)\r\n\/\/ ============================================================\r\n\r\n$totalDocuments = 0;\r\n\r\nforeach ($DOCUMENTS as $document) {\r\n$totalDocuments++;\r\n\r\nif (empty($document['Doc1No'])) {\r\necho json_encode([\r\n\"status\" =&gt; \"REJECTED_BY_CLIENT\",\r\n\"timestamp\" =&gt; date(\"c\"),\r\n\"request_id\" =&gt; uniqid(\"req_\"),\r\n\"message\" =&gt; \"CLIENT-SIDE REJECTION: Document at position {$totalDocuments} has empty Doc1No\",\r\n\"action_required\" =&gt; \"Fix the document before sending to server\"\r\n], JSON_PRETTY_PRINT);\r\nexit;\r\n}\r\n}\r\n\r\nif ($totalDocuments &gt; 500) {\r\necho json_encode([\r\n\"status\" =&gt; \"REJECTED_BY_CLIENT\",\r\n\"timestamp\" =&gt; date(\"c\"),\r\n\"request_id\" =&gt; uniqid(\"req_\"),\r\n\"message\" =&gt; \"CLIENT-SIDE REJECTION: You have {$totalDocuments} documents. Maximum is 500.\",\r\n\"your_document_count\" =&gt; $totalDocuments,\r\n\"max_allowed\" =&gt; 500,\r\n\"action_required\" =&gt; \"Reduce your documents to 500 or less BEFORE sending to server\"\r\n], JSON_PRETTY_PRINT);\r\nexit;\r\n}\r\n\r\necho \"=== CLIENT-SIDE VALIDATION ===\\n\";\r\necho \"Looped through all {$totalDocuments} documents one by one\\n\";\r\necho \"All documents passed client validation\\n\";\r\necho \"Document count: {$totalDocuments} (max 500)\\n\";\r\necho \"Sending to server...\\n\\n\";\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 6: SEND REQUEST\r\n\/\/ ============================================================\r\n\r\n$url = rtrim($BASE_URL, '\/') . '\/' . ltrim($ENDPOINT, '\/');\r\n\r\n$payload = [\r\n\"api_key\" =&gt; $API_KEY,\r\n\"api_secret\" =&gt; $API_SECRET,\r\n\"action\" =&gt; $ACTION,\r\n$DATA_KEY =&gt; [\"documents\" =&gt; $DOCUMENTS]\r\n];\r\n\r\n$ch = curl_init($url);\r\n\r\ncurl_setopt_array($ch, [\r\nCURLOPT_RETURNTRANSFER =&gt; true,\r\nCURLOPT_POST =&gt; true,\r\nCURLOPT_POSTFIELDS =&gt; json_encode($payload),\r\nCURLOPT_HTTPHEADER =&gt; ['Content-Type: application\/json'],\r\nCURLOPT_TIMEOUT =&gt; 120,\r\n]);\r\n\r\n$response = curl_exec($ch);\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 7: HANDLE CURL ERROR\r\n\/\/ ============================================================\r\n\r\nif ($response === false) {\r\necho json_encode([\r\n\"status\" =&gt; \"error\",\r\n\"timestamp\" =&gt; date(\"c\"),\r\n\"request_id\" =&gt; uniqid(\"req_\"),\r\n\"message\" =&gt; curl_error($ch)\r\n], JSON_PRETTY_PRINT);\r\ncurl_close($ch);\r\nexit;\r\n}\r\n\r\n$httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);\r\ncurl_close($ch);\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 8: DECODE RESPONSE\r\n\/\/ ============================================================\r\n\r\n$result = json_decode($response, true);\r\n\r\nif (!$result) {\r\necho json_encode([\r\n\"status\" =&gt; \"error\",\r\n\"timestamp\" =&gt; date(\"c\"),\r\n\"request_id\" =&gt; uniqid(\"req_\"),\r\n\"message\" =&gt; \"Invalid JSON from API\",\r\n\"raw_response\" =&gt; $response\r\n], JSON_PRETTY_PRINT);\r\nexit;\r\n}\r\n\r\n\/\/ ============================================================\r\n\/\/ STEP 9: RETURN CLEAN JSON FORMAT\r\n\/\/ ============================================================\r\n\r\necho \"=== SERVER RESPONSE ===\\n\";\r\necho json_encode([\r\n\"status\" =&gt; $result['status'] ?? \"error\",\r\n\"timestamp\" =&gt; date(\"c\"),\r\n\"request_id\" =&gt; $result['request_id'] ?? uniqid(\"req_\"),\r\n\"data\" =&gt; $result['data'] ?? null,\r\n\"message\" =&gt; $result['message'] ?? null\r\n], JSON_PRETTY_PRINT);<\/pre>\n<h4 class=\"text-text-100 mt-2 -mb-1 text-base font-bold\">Steps for Create Request Using Postman<\/h4>\n<ol class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3\">\n<li class=\"whitespace-normal break-words pl-2\">Ensure the method is set to <strong>POST<\/strong><\/li>\n<li class=\"whitespace-normal break-words pl-2\">Enter <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">http:\/\/domain-name\/01\/clientportal\/apiv2\/modules\/sales.php<\/code> (or <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">purchase.php<\/code>) and replace with your SKYBIZ domain<\/li>\n<li class=\"whitespace-normal break-words pl-2\">Under <strong>Body<\/strong>, select <strong>raw<\/strong> and set the format to <strong>JSON<\/strong><\/li>\n<li class=\"whitespace-normal break-words pl-2\">Paste your full payload including <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">api_key<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">api_secret<\/code>, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">action<\/code>, and your <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">sales_data<\/code> or <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">purchase_data<\/code><\/li>\n<\/ol>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/postman-post-request.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7115 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/postman-post-request.png\" alt=\"\" width=\"1219\" height=\"898\" \/><\/a><\/p>\n<h4>Step 6 \u2014 Read the Response<\/h4>\n<p>&nbsp;<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">Every response from the API follows the same envelope structure:<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Successful READ response in JSON Format:<\/strong><\/p>\n<pre>{\r\n\"status\": \"success\",\r\n\"timestamp\": \"2026-04-30T04:07:04+00:00\",\r\n\"request_id\": \"req_69f2d56891e57\",\r\n\"data\": {\r\n\"requested_by\": \"4110a68b91ce2e2310fce51d3\",\r\n\"mode\": \"2\",\r\n\"date_range\": {\r\n\"from\": \"2026-03-29\",\r\n\"to\": \"2026-04-28\",\r\n\"days\": 31\r\n},\r\n\"total_returned\": 2,\r\n\"data\": [\r\n{\r\n\"CusCode\": \"C-000180\",\r\n\"CusName\": \"TestAPI\",\r\n\"Address\": \"\",\r\n\"AreaCode\": \"\",\r\n\"CurCode\": \"RM\",\r\n\"Tel\": \"0123456789\",\r\n\"Tel2\": \"\",\r\n\"Fax\": \"\",\r\n\"Fax2\": \"\",\r\n\"Email\": \"test@gmail.com\",\r\n\"Contact\": \"\",\r\n\"ContactTel\": \"0123456789\",\r\n\"Town\": \"Shah Alam\",\r\n\"State\": \"Selangor\",\r\n\"Country\": \"MALAYSIA\",\r\n\"PostCode\": \"40470\",\r\n\"SalesPersonCode\": \"\",\r\n\"CreditLimit\": 0,\r\n\"TermCode\": 1,\r\n\"StatusBadYN\": \"0\",\r\n\"DateStart\": \"2026-04-15\",\r\n\"DOB\": \"0000-00-00\",\r\n\"Sex\": \"Female\",\r\n\"MemberType\": \"\",\r\n\"DateTimeModified\": \"2026-04-09 11:29:47\"\r\n},<\/pre>\n<p><strong>Successful READ response using Postman:<\/strong><\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/result-postman.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7021 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/result-postman.png\" alt=\"\" width=\"1093\" height=\"934\" \/><\/a><\/p>\n<p><strong>Error response:<\/strong><\/p>\n<pre>{\r\n\"status\": \"error\",\r\n\"timestamp\": \"2026-04-07T10:46:15+08:00\",\r\n\"request_id\": \"req_6612f3b9c21a7\",\r\n\"message\": \"Invalid API credentials\"\r\n}<\/pre>\n<p><strong>Always check <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">status<\/code> first<\/strong> \u2014 if it is <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"error\"<\/code>, read <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">message<\/code> to understand what went wrong.<\/p>\n<p><strong>Successful CREATE response in JSON Format:<\/strong><\/p>\n<pre>{\r\n\"status\": \"success\",\r\n\"timestamp\": \"2026-05-07T11:01:04+08:00\",\r\n\"request_id\": \"req_69fc0070d83cf\",\r\n\"data\": {\r\n\"requested_by\": \"4110a68b91ce2e2310fce51d3\",\r\n\"mode\": \"2\",\r\n\"batch_id\": \"API20260507110104\",\r\n\"summary\": {\r\n\"total_documents\": 1,\r\n\"inserted\": 1,\r\n\"failed\": 0\r\n},\r\n\"successful_documents\": [\r\n\"PURCHASE-TEST-001\"\r\n],\r\n\"failed_documents\": [],\r\n\"fail_details\": {\r\n\"compulsory_fields_missing\": [],\r\n\"duplicate_documents\": [],\r\n\"invalid_suppliers\": [],\r\n\"invalid_items\": [],\r\n\"invalid_tax_codes\": [],\r\n\"invalid_locations\": [],\r\n\"invalid_departments\": [],\r\n\"invalid_projects\": [],\r\n\"invalid_branches\": [],\r\n\"amount_mismatch\": [],\r\n\"validation_errors\": []\r\n}\r\n}\r\n}<\/pre>\n<p><strong>Successful CREATE response using Postman:<\/strong><\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/success-post-request.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7116 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/success-post-request.png\" alt=\"\" width=\"1201\" height=\"937\" \/><\/a><\/p>\n<p><strong>Error response:<\/strong><\/p>\n<pre>{\r\n\"status\": \"success\",\r\n\"timestamp\": \"2026-05-07T11:15:48+08:00\",\r\n\"request_id\": \"req_69fc03e446a20\",\r\n\"data\": {\r\n\"requested_by\": \"4110a68b91ce2e2310fce51d3\",\r\n\"mode\": \"2\",\r\n\"batch_id\": \"API20260507111548\",\r\n\"summary\": {\r\n\"total_documents\": 1,\r\n\"inserted\": 0,\r\n\"failed\": 1\r\n},\r\n\"successful_documents\": [],\r\n\"failed_documents\": [\r\n\"PURCHASE-TEST-001\"\r\n],\r\n\"fail_details\": {\r\n\"compulsory_fields_missing\": [],\r\n\"duplicate_documents\": [\r\n\"PURCHASE-TEST-001\"\r\n],\r\n\"invalid_suppliers\": [],\r\n\"invalid_items\": [],\r\n\"invalid_tax_codes\": [],\r\n\"invalid_locations\": [],\r\n\"invalid_departments\": [],\r\n\"invalid_projects\": [],\r\n\"invalid_branches\": [],\r\n\"amount_mismatch\": [],\r\n\"validation_errors\": []\r\n}\r\n}\r\n}<\/pre>\n<p>Always check <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">summary.failed<\/code> \u2014 if it is greater than 0, inspect <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">fail_details<\/code> and <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">failed_documents<\/code> to understand what went wrong before retrying.<\/p>\n<hr \/>\n<h4>Step 6 \u2014 Read Audit Logs<\/h4>\n<p>Every response from the API will submit an Audit Logs, you can view the audit logs in the SKYBIZ Portal &gt; Active API Sessions.<\/p>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/audit.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7029 size-full\" src=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/audit.png\" alt=\"\" width=\"927\" height=\"456\" \/><\/a><\/p>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\">Quick Reference \u2014 Common Errors<\/h3>\n<div class=\"overflow-x-auto w-full px-2 mb-6\">\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>General (all requests)<\/strong><\/p>\n<div class=\"overflow-x-auto w-full px-2 mb-6\">\n<table class=\"min-w-full border-collapse text-sm leading-[1.7] whitespace-normal\">\n<thead class=\"text-left\">\n<tr>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">Message<\/th>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">What It Means<\/th>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">Fix<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"API key and secret are required\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Missing credentials in body<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Add both <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">api_key<\/code> and <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">api_secret<\/code> to every request<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"Invalid API credentials\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Wrong key or secret<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Check your credentials. Re-register if needed<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"Invalid API credentials: No expiry date set.\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">API key has no renewal date configured<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Delete the credentials and create a new API key set<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"API key expired on YYYY-MM-DD.\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">API key has passed its renewal date<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Delete the expired credentials and create a new API key set<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"API integration is disabled for this account\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Mode is set to Disabled<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Ask your administrator to enable API Integration<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"HTTPS is required for Production mode\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Calling over plain HTTP<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Switch to HTTPS<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"Rate limit exceeded\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Too many requests<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Wait and retry with backoff<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<\/div>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Read action only<\/strong><\/p>\n<div class=\"overflow-x-auto w-full px-2 mb-6\">\n<table class=\"min-w-full border-collapse text-sm leading-[1.7] whitespace-normal\">\n<thead class=\"text-left\">\n<tr>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">Message<\/th>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">What It Means<\/th>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">Fix<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"date_from and date_to are required\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Missing date range<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Add both fields to every request<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"Invalid date format. Use YYYY-MM-DD format.\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Wrong date format<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Use YYYY-MM-DD \u2014 e.g. <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"2026-04-01\"<\/code><\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"Date range cannot exceed 31 days.\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Date range too wide<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Narrow range to 30 days or fewer<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"No valid fields requested\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">No recognised field names<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Check field names against the Field Reference<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"[Module] read permission denied\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">No read permission<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Enable permission in portal \u2192 Modules<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Create action only<\/strong><\/p>\n<div class=\"overflow-x-auto w-full px-2 mb-6\">\n<table class=\"min-w-full border-collapse text-sm leading-[1.7] whitespace-normal\">\n<thead class=\"text-left\">\n<tr>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">Message<\/th>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">What It Means<\/th>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">Fix<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"sales_data is required for create action\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Missing data payload<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Add <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">sales_data<\/code> or <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">purchase_data<\/code> to your request body<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"sales_data.documents must be a non-empty array\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Documents array is empty or wrong type<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Pass at least one document inside <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">documents<\/code><\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"Maximum 500 documents allowed. You sent X.\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Too many documents<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Split into multiple requests of max 500 each<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"[Module] create permission denied\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">No create permission<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Enable permission in portal \u2192 Modules<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"Missing header fields - ...\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Compulsory header fields not provided<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Include all required header fields<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"Missing fields - ...\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Compulsory item fields not provided<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Include all required item fields per line<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"HCLineAmt does not match Qty \u00d7 HCUnitCost\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Amount calculation wrong<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Ensure <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCLineAmt = Qty \u00d7 HCUnitCost<\/code><\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"Header HCNetAmt does not match sum of HCLineAmt\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Header total doesn&#8217;t add up<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Sum all item <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCLineAmt<\/code> and put the total in <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">HCNetAmt<\/code><\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"Document already exists\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Duplicate <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Doc1No<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Use a unique <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">Doc1No<\/code><\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"ItemCode 'X' does not exist\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Invalid item code<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Check the item code exists in SKYBIZ<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">\"Customer\/Supplier Code 'X' does not exist\"<\/code><\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Invalid customer or supplier code<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Check the code exists in SKYBIZ<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\">Integration Mode Reference<\/h3>\n<table class=\"min-w-full border-collapse text-sm leading-[1.7] whitespace-normal\">\n<thead class=\"text-left\">\n<tr>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">Mode<\/th>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">Name<\/th>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">Where to Use<\/th>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\" scope=\"col\">HTTPS Required<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">0<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Disabled<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">\u2014<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">\u2014<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">1<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Production<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Live environment<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Yes<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">2<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Developer<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Local development<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">No (localhost only)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\">Need More Detail?<\/h3>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">This guide covers the essentials to get you connected and making requests. For complete field references, full error documentation, and security guidelines, refer to the: <a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_advanced\/\"><strong>SKYBIZ API Setup (Advanced)<\/strong><\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>How to connect and use the SKYBIZ API Version 2.0 Introduction This guide is for developers and POS vendors who want to quickly get started with the SKYBIZ API. It covers the essential steps such as getting your credentials, making your first request, and understanding the responses. For full technical details, field references, and error ..<\/p>\n<div class=\"clear-fix\"><\/div>\n<p><a href=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/\" title=\"read more...\">Read more<\/a><\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[213],"tags":[],"class_list":["post-6990","post","type-post","status-publish","format-standard","hentry","category-10-api-documentation"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>SKYBIZ API Setup - Standard - SKYBIZ Cloud ERP Support<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SKYBIZ API Setup - Standard - SKYBIZ Cloud ERP Support\" \/>\n<meta property=\"og:description\" content=\"How to connect and use the SKYBIZ API Version 2.0 Introduction This guide is for developers and POS vendors who want to quickly get started with the SKYBIZ API. It covers the essential steps such as getting your credentials, making your first request, and understanding the responses. For full technical details, field references, and error ..Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/\" \/>\n<meta property=\"og:site_name\" content=\"SKYBIZ Cloud ERP Support\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-30T04:16:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-20T06:13:20+00:00\" \/>\n<meta name=\"author\" content=\"team 03\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"team 03\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/apisetup_standard\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/apisetup_standard\\\/\"},\"author\":{\"name\":\"team 03\",\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/#\\\/schema\\\/person\\\/f3a2bcb10e55b23238c1b160bb06d9a9\"},\"headline\":\"SKYBIZ API Setup &#8211; Standard\",\"datePublished\":\"2026-04-30T04:16:04+00:00\",\"dateModified\":\"2026-05-20T06:13:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/apisetup_standard\\\/\"},\"wordCount\":1388,\"image\":{\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/apisetup_standard\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/webhook.site_.png\",\"articleSection\":[\"10. API Documentation\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/apisetup_standard\\\/\",\"url\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/apisetup_standard\\\/\",\"name\":\"SKYBIZ API Setup - Standard - SKYBIZ Cloud ERP Support\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/apisetup_standard\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/apisetup_standard\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/webhook.site_.png\",\"datePublished\":\"2026-04-30T04:16:04+00:00\",\"dateModified\":\"2026-05-20T06:13:20+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/#\\\/schema\\\/person\\\/f3a2bcb10e55b23238c1b160bb06d9a9\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/apisetup_standard\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/apisetup_standard\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/apisetup_standard\\\/#primaryimage\",\"url\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/webhook.site_.png\",\"contentUrl\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/webhook.site_.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/apisetup_standard\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SKYBIZ API Setup &#8211; Standard\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/#website\",\"url\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/\",\"name\":\"SKYBIZ Cloud ERP Support\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/#\\\/schema\\\/person\\\/f3a2bcb10e55b23238c1b160bb06d9a9\",\"name\":\"team 03\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ed4575e459e48798469dd7ea3f93c83386ac432dd3bfebbf7d56837d067cbb88?s=96&d=blank&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ed4575e459e48798469dd7ea3f93c83386ac432dd3bfebbf7d56837d067cbb88?s=96&d=blank&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ed4575e459e48798469dd7ea3f93c83386ac432dd3bfebbf7d56837d067cbb88?s=96&d=blank&r=g\",\"caption\":\"team 03\"},\"sameAs\":[\"http:\\\/\\\/skybiz.com.my\"],\"url\":\"https:\\\/\\\/aisupport.skybizglobal.com\\\/skybizclouderp\\\/author\\\/team03skybiz-com-my\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SKYBIZ API Setup - Standard - SKYBIZ Cloud ERP Support","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"SKYBIZ API Setup - Standard - SKYBIZ Cloud ERP Support","og_description":"How to connect and use the SKYBIZ API Version 2.0 Introduction This guide is for developers and POS vendors who want to quickly get started with the SKYBIZ API. It covers the essential steps such as getting your credentials, making your first request, and understanding the responses. For full technical details, field references, and error ..Read more","og_url":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/","og_site_name":"SKYBIZ Cloud ERP Support","article_published_time":"2026-04-30T04:16:04+00:00","article_modified_time":"2026-05-20T06:13:20+00:00","author":"team 03","twitter_card":"summary_large_image","twitter_misc":{"Written by":"team 03","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/#article","isPartOf":{"@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/"},"author":{"name":"team 03","@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/#\/schema\/person\/f3a2bcb10e55b23238c1b160bb06d9a9"},"headline":"SKYBIZ API Setup &#8211; Standard","datePublished":"2026-04-30T04:16:04+00:00","dateModified":"2026-05-20T06:13:20+00:00","mainEntityOfPage":{"@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/"},"wordCount":1388,"image":{"@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/#primaryimage"},"thumbnailUrl":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/webhook.site_.png","articleSection":["10. API Documentation"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/","url":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/","name":"SKYBIZ API Setup - Standard - SKYBIZ Cloud ERP Support","isPartOf":{"@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/#website"},"primaryImageOfPage":{"@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/#primaryimage"},"image":{"@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/#primaryimage"},"thumbnailUrl":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/webhook.site_.png","datePublished":"2026-04-30T04:16:04+00:00","dateModified":"2026-05-20T06:13:20+00:00","author":{"@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/#\/schema\/person\/f3a2bcb10e55b23238c1b160bb06d9a9"},"breadcrumb":{"@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/#primaryimage","url":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/webhook.site_.png","contentUrl":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-content\/uploads\/2026\/04\/webhook.site_.png"},{"@type":"BreadcrumbList","@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/apisetup_standard\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/"},{"@type":"ListItem","position":2,"name":"SKYBIZ API Setup &#8211; Standard"}]},{"@type":"WebSite","@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/#website","url":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/","name":"SKYBIZ Cloud ERP Support","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/#\/schema\/person\/f3a2bcb10e55b23238c1b160bb06d9a9","name":"team 03","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ed4575e459e48798469dd7ea3f93c83386ac432dd3bfebbf7d56837d067cbb88?s=96&d=blank&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ed4575e459e48798469dd7ea3f93c83386ac432dd3bfebbf7d56837d067cbb88?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ed4575e459e48798469dd7ea3f93c83386ac432dd3bfebbf7d56837d067cbb88?s=96&d=blank&r=g","caption":"team 03"},"sameAs":["http:\/\/skybiz.com.my"],"url":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/author\/team03skybiz-com-my\/"}]}},"_links":{"self":[{"href":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-json\/wp\/v2\/posts\/6990","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-json\/wp\/v2\/comments?post=6990"}],"version-history":[{"count":37,"href":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-json\/wp\/v2\/posts\/6990\/revisions"}],"predecessor-version":[{"id":7216,"href":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-json\/wp\/v2\/posts\/6990\/revisions\/7216"}],"wp:attachment":[{"href":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-json\/wp\/v2\/media?parent=6990"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-json\/wp\/v2\/categories?post=6990"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aisupport.skybizglobal.com\/skybizclouderp\/wp-json\/wp\/v2\/tags?post=6990"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}