{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"006d1002-43dc-409c-b76c-a944b29d7878","name":"Arcadier API v2.0","description":"### **Platform Architecture – At a Glance**\n\nUnderstanding the architecture before writing integration code prevents the most common structural mistakes. This section explains how Arcadier is layered, what role each part plays, and how the three-portal model shapes API behaviour. The platform is structured into three layers that developers will interact with:\n\n**Frontend Layer - API Template (React / Node.js)**\n\nThe API Template is a reference frontend implementation. It is your starting point for all UI development.\n\n- Built with React and Node.js.\n    \n- Hosted on a WebApp or VM that you provision and own.\n    \n- Read-only repository access via Azure DevOps.\n    \n- You retain full ownership of the cloned codebase.\n    \n\n**API Layer - Arcadier REST API**\n\nAll marketplace operations, such as listings, orders, users, payments, and more, are exposed through the Arcadier REST API. Portal features are backed by API endpoints. The default UI is optional for custom builds.\n\n- See REST API Standards guide.\n    \n\n**Admin Portal Layer**\n\nThe Admin Portal is Arcadier's proprietary operational control centre. Many integration dependencies (categories, custom fields, payment methods, commissions) must be configured here before they can be used via API. Developers should be familiar with its structure.\n\n**REST API Standards**\n\nAll Arcadier API integrations follow consistent REST conventions. These affect authentication, pagination, error handling, and response parsing.\n\nHTTP Methods\n\n| Method | Usage |  \n| GET | Retrieve resources. Does not modify data. Supports query parameters for filtering and pagination. |  \n| POST | Create resources. Request body in JSON. |  \n| PUT | Update resources. Always include the full intended set of values - PUT operations overwrite the target fields. |  \n| DELETE | Remove resources. Some deletions are soft deletes; the record is deactivated but remains in the database. |\n\n**Data Format**\n\n- All request and response bodies: JSON format.\n    \n- Character encoding: UTF-8.\n    \n- Timestamps: Unix epoch values (integer seconds).\n    \n- Primary identifiers: GUIDs throughout the platform.\n    \n\n**Authentication**\n\n- Bearer token in every protected request: Authorization: Bearer {{ACCESS_TOKEN}}\n    \n- Role-scoped tokens determine accessible endpoints and data.\n    \n- Stateless request model - each request must contain all authentication context.\n    \n- OAuth 2.0 using Client ID and Client Secret issued per environment.\n    \n\n**Additional Standards**\n\n- List responses are paginated.\n    \n- Consistent error response format.\n    \n- HTTP status codes aligned with REST conventions.\n    \n- Response objects include a Total field indicating total records available\n    \n\n# Authentication\n\nOur APIs use the [<b>Bearer token</b>](https://learning.postman.com/docs/sending-requests/authorization/#bearer-token) authorization method.\n\nThe \"token\" in question is a text string. Each persona (Buyer, Seller, Admin, Sub-Buyer and Sub-Merchants) on a marketplace possesses a unique token that enables them to use the APIs.\n\nThis \"token\" can be obtained in 2 ways:\n\n1. Authentication API\n    \n    The [Log In/Get Admin Token API](https://apiv2.arcadier.com/#546294a8-cf01-4543-a994-5929c5be2c41) responds with user's `access_token` which can be used as token to authenticate our APIs.\n    \n2. A cookie present in the session of a user logged in on a marketplace\n    \n    The token within the cookie can be viewed by logging in to any page (including the Admin portal) as a registered user.\n    \n    - Log in to any user's account on the marketplace (this can also be the admin portal)\n        \n    - Right click on the page\n        \n    - Click \"Inspect\"\n        \n    - Once the Chrome Dev Tools open, go the the `Application` tab, then click on the `Cookies` dropdown, and find the 'webapitoken' cookie. That cookie's value is the user's token.\n        \n\n```\nAlternatively, you can use JavaScript in your Plug-In to fetch the value of the 'webapitoken' cookie mentionned above.\n\n ```\n\n``` javascript\nvar token = getCookie('webapitoken');\nvar settings = {\n    \"url\": \"\", \n    \"method\": \"\", \n    \"headers\": { \n        \"Content-Type\": \"application/json\",\n        \"Authorization\": \"Bearer \" + token //notice the space character between \"Bearer\" and token\n    }, \n    \"data\": \"\" //JSON object\n};\n$.ajax(settings).done(function(response) { console.log(response); });\nfunction getCookie(name){\n    var value = '; ' + document.cookie;\n    var parts = value.split('; ' + name + '=');\n    if (parts.length === 2) {\n        return parts.pop().split(';').shift();\n    }\n}\n\n ```\n\n## Using the token in Postman\n\nOnce you have the token, you can prepend \"Bearer \" to it and use that as authorization in Arcadier's APIs. Arcadier's Postman collection already handles this for you.\n\nOnce you obtain the token value, replace the `{{admintoken}}` placeholder with that value. (Don't forget space between \"Bearer\" and the token)\n\n<img src=\"https://bootstrap.arcadier.com/github/endpoint\" alt=\"Endpoint Example\">\n\nAlternatively, you can give fixed values to these placeholders and make them act as variables.\n\nClick on[<img src=\"https://run.pstmn.io/button.svg\" alt=\"Run in Postman\">](https://app.getpostman.com/run-collection/346b915f84ec00600260)to download Postman with Arcadier's API collection\n\nWhen the download is complete, click on \"Manage Environments\" on the top right\n\n<p><img src=\"https://bootstrap.arcadier.com/github/Environment.png\"></p>\n\nClick on the \"Add\" button\n\n<img src=\"https://bootstrap.arcadier.com/github/Manage\" alt=\"Add Button\">\n\nFill it up with the following variables, a paste your token's value in the \"admintoken\" row, in the \"CURRENT VALUE\" column.\n\n<img src=\"https://bootstrap.arcadier.com/github/variable\" alt=\"Variables List\">\n\nYou can extend the same logic to all the other variables to make playing around with several APIs a much less tedious experience.\n\n# Webhooks & Event Triggers\n\nWebhooks enable real-time, event-driven communication between the platform and external systems. Instead of polling the API for updates, your application can subscribe to specific events and receive HTTP POST notifications whenever those events occur.\n\n**Supported Events**\n\nArcadier webhooks are triggered by predefined system events such as:\n\n- User account creation or updates\n    \n- Order creation, status changes\n    \n- Payment and transaction updates\n    \n- Listing creation, updates, or deletions\n    \n\nEach webhook event sends a structured payload to a designated endpoint (your server), containing relevant metadata and object details associated with the event. This allows downstream systems to:\n\n- Synchronize data with external CRMs, ERPs, or inventory systems\n    \n- Trigger fulfilment workflows\n    \n- Send transactional notifications\n    \n- Perform audit logging or analytics processing\n    \n\n**Event Delivery**\n\n- Webhooks are delivered via HTTPS POST requests.\n    \n- Payloads follow a standardized JSON structure.\n    \n- Your endpoint must return a successful HTTP status code (e.g., 200 OK) to acknowledge receipt.\n    \n\n**Security Considerations**\n\n- Validate the request source and signature (if signature verification is enabled).\n    \n- Use HTTPS endpoints only.\n    \n- Implement idempotency logic to prevent duplicate processing in case of retries.\n    \n- Log incoming webhook events for traceability and debugging.\n    \n\n# Arcadier SDK - Node.js\n\nThe Arcadier Node.js SDK is a wrapper around Arcadier's REST API that lets developers make API calls using simple method calls rather than constructing raw HTTP requests. It covers user management, items, cart, orders, transactions, and other core platform operations.\n\nThe SDK is initialised with a configuration object containing marketplace credentials. Once initialised, API resource groups are available as properties of the client object. Each resource group exposes methods that map one-to-one to Arcadier REST API endpoints.\n\n**What can you build with the SDK**\n\n- Backend integrations: Synchronise data with external CRMs, ERPs, or inventory systems in near real-time.\n    \n- Workflow automation:\n    \n- Drive workflow automation for operational tasks such as bulk item creation, order status updates, user provisioning, or custom table population without polling the API continuously.\n    \n- Trigger fulfilment workflows when an order is confirmed.\n    \n- Send transactional notifications to external messaging services.\n    \n- Perform audit logging or analytics processing.\n    \n- Custom marketplace applications: Build web or mobile applications where Arcadier handles the marketplace backend, i.e. product listings, cart, checkout, order management, while a custom frontend or app layer handles the user experience.\n    \n\n#### **Before you begin**\n\nConfirm the following before setting up the SDK:\n\n- [Node.js](https://nodejs.org/en) is installed on the development machine or server.\n    \n- A Client ID and Client Secret are available for the target marketplace. See Authentication of this guide for how to obtain credentials.\n    \n- Access to the private GitHub repository and npm install command.\n    \n\n**SDK installation & initialization**\n\nContact Arcadier to receive access to private Github repository and the npm install command for access. Once received, run it in your project root into node_modules. Create a config.js file in your project containing the marketplace credentials. This file is loaded by all scripts that make API calls.\n\n// config.js\n\nmodule.exports = {\n\n```\nclient: { \n    apiBaseUrl:    \"\",   // marketplace domain, e.g. yourmarketplace.arcadier.io \n    protocol:      \"\",   // \"https\" for all production and staging environments \n    clientId:      \"\", \n    clientSecret:  \"\", \n} \n\n ```\n\n}\n\n**Load the SDK and instantiate the client**\n\nAt the top of each script that makes API calls, import the SDK and the configuration file, then create the client:\n\nconst ArcadierClient = require(\"path-to-sdk/sdk\");\n\nconst config = require(\"./config.js\");\n\nconst client = new ArcadierClient(config);\n\nWith the client instantiated, all resource groups are accessible as client properties, e.g., client.Items, client.Orders, client.Users.\n\n**Development tasks with the SDK**\n\nThe following tasks cover the most common integration scenarios. All examples assume the client has been initialised as described above.\n\n**SDK resource group coverage**\n\nThe table below lists all resource groups exposed by the SDK and the categories of operations available in each.\n\n| Resource Group | Operations |  \n| User Accounts | Retrieve, create, update, and delete user records. Upgrade user roles. Manage password reset tokens. |  \n| Addresses | Retrieve, create, update, and delete addresses associated with user accounts. |  \n| Items & Listings | Retrieve, search, create, edit, and delete items and listings. Manage item tags. Supports variants and booking-type listings. |  \n| Cart | Retrieve a buyer's cart. Add, edit, and remove cart items. |  \n| Orders | Retrieve order details by GUID or invoice. Update individual or multiple orders. |  \n| Transactions & Invoices | Retrieve transaction data at marketplace or buyer level. Update transaction records. |  \n| Custom Tables | Read, create, update, and delete rows in plug-in custom tables. |  \n| Categories | Category management operations. |  \n| Custom Fields | Custom field read and write operations. |  \n| Shipping / Delivery | Delivery method configuration and retrieval. |  \n| Checkout | Checkout flow operations. |  \n| Marketplace | Retrieve top-level marketplace configuration and metadata. |  \n| Event Triggers | Create and manage custom event triggers. |  \n| Email | Trigger and manage outbound email notifications. |\n\n# Pagination\n\nAll APIs that return an array/list of records will have the option to paginate the results obatined. Pagination can be done via query parameters in the URL.\n\nDefinition from [techtarget.com](https://whatis.techtarget.com/definition/pagination):\n\n> \"...pagination also refers to the automated process of adding consecutive numbers to identify the sequential order of pages. Some types of website content benefit from being broken into separate pages to make them more user-friendly, such as search engine results pages (SERP), blogs and discussion forums.\" \n  \n\nIn Arcadier's APIs:\n\n`pageSize` specifies the number of results to display within 1 response.\n\n`pageNumber` specifies the page number\n\nIf an API reports `\"TotalRecords\": 20`, then\n\n- `?pageNumber=1&pageSize=10` will make the API respond with the first 10.\n    \n- `?pageNumber=2&pageSize=10` will make the API respond with the next 10.\n    \n- `?pageNumber=1&pageSize=20` will make the API respond with all of the 20.\n    \n\n**Note**: Our APIs accept a `pageSize` of maximum value **500**. In Arcadier API responses.\n\n- It is advised to use extra filters when doing searches.\n    \n- If the intention is to get 100% of Records, where the number of Records exceed 500, combine `pageSize` with `pageNumber` and do a couple of API calls.\n    \n\nSome APIs that use pagination:\n\n- [Get All Users](https://apiv2.arcadier.com/?version=latest#5282732e-0930-43b5-b98f-eeb3d5ce94b8)\n    \n- [Item Search APIs](https://apiv2.arcadier.com/?version=latest#75cfc057-f670-4c92-b07a-312acafd6fd4)\n    \n- [Transaction History APIs](https://apiv2.arcadier.com/?version=latest#fd876791-d71f-43bd-be02-bfe6bf17747a)\n    \n\n# User IDs\n\nAdmin, Merchant and Buyer ID's can be found by inspecting the page when logged in as each of them.\n\n``` html\n<input type=\"hidden\" id=\"userGuid\" value=\"{{userID}}\">\n\n ```\n\n# API Changelog\n\nAll past and upcoming changes in our APIs will be documented in our [API Changelog](https://arcadier.github.io/API-Changelog).\n\n# Frequently Asked Questions\n\nYou can visit our [Developer Community Support](https://github.com/Arcadier/Developer-Community-Support/issues) to view FAQ's and issues reported by developers. You can also submit your own questions, bug reports and feature requests.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":true,"owner":"6410759","team":319599,"collectionId":"006d1002-43dc-409c-b76c-a944b29d7878","publishedId":"TVmMec8m","public":true,"publicUrl":"https://apiv2.arcadier.com","privateUrl":"https://go.postman.co/documentation/6410759-006d1002-43dc-409c-b76c-a944b29d7878","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"2D535E"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":"Integrate Arcadier's API Seamlessly. Explore our Detailed Documentation &amp; Start Building Innovative Apps Now!"},{"name":"title","value":"Arcadier API Documentation"}],"appearance":{"default":"system_default","themes":[{"name":"dark","logo":"https://content.pstmn.io/903af53d-6b9f-484c-ba21-91d31f181ed0/QXJjYWRpZXIgSWNvbi1OZW9uLnBuZw==","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"Aeff83"}},{"name":"light","logo":"https://content.pstmn.io/a7c4b22f-3189-4cae-b760-0f742150999d/QXJjYWRpZXIgSWNvbi1EYXJrIFRlYWwucG5n","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"2D535E"}}]}},"version":"8.10.1","publishDate":"2024-07-05T07:23:43.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"Arcadier API Documentation","description":"Integrate Arcadier's API Seamlessly. Explore our Detailed Documentation &amp; Start Building Innovative Apps Now!"},"logos":{"logoLight":"https://content.pstmn.io/a7c4b22f-3189-4cae-b760-0f742150999d/QXJjYWRpZXIgSWNvbi1EYXJrIFRlYWwucG5n","logoDark":"https://content.pstmn.io/903af53d-6b9f-484c-ba21-91d31f181ed0/QXJjYWRpZXIgSWNvbi1OZW9uLnBuZw=="}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/8badce0d7a0fd1afae26e28a209a3c778b8cd48831680d65c63be419ffa65458","favicon":"https://res.cloudinary.com/postman/image/upload/v1720165008/team/jggd6ugdkgo9h6tpkp7a.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://apiv2.arcadier.com/view/metadata/TVmMec8m"}