{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"a76bd84e-4c79-48d0-93af-f8e77681b511","name":"ChannelDock API V2","description":"Version 2 of ChannelDock's API. Our API's are divided per user type: Fulfillment centers and Sellers. If you use the wrong sub set of API's you will receive a error message saying so.\n\n## Webhooks\n\nYou can subscribe to our webhook events to receive real-time notifications when events occur in your ChannelDock account, eliminating the need to constantly poll our API endpoints.\n\n##### Key Features\n\n- Event Timing: Webhooks are fired approximately 1 minute after an event occurs\n    \n- Payload Consistency: Webhook payloads match the data structure returned by our corresponding API endpoints\n    \n- Automatic Retries: Failed webhook deliveries are automatically retried up to 5 times with exponential backoff delays\n    \n- Security Protection: Webhooks are automatically disabled after 10 total failed attempts to prevent resource waste and security issues\n    \n\n##### Retry Schedule\n\nOur exponential backoff strategy uses the following delays:\n\n- Attempt 1: Immediate delivery\n    \n- Attempt 2: 30 seconds delay\n    \n- Attempt 3: 60 seconds delay\n    \n- Attempt 4: 120 seconds delay\n    \n- Attempt 5: 240 seconds delay\n    \n\n##### Webhook Management\n\n- Setup: Configure webhooks via Settings > API & Webhooks in your ChannelDock dashboard\n    \n- Authentication: Each webhook can have a custom secret for payload verification\n    \n- Event Types: Subscribe to specific events like order updates, shipment creation, stock changes, and returns\n    \n- Endpoint Requirements: Your webhook endpoint must return HTTP 200 status code to confirm successful delivery\n    \n\n##### Best Practices\n\n- Ensure your webhook endpoint can handle the expected payload size and format\n    \n- Implement idempotency to handle duplicate webhook deliveries\n    \n- Use the webhook signature for payload verification when a secret is configured\n    \n- Monitor webhook delivery status through the ChannelDock dashboard\n    \n\n### **API Rate Limiting and Access Restrictions**\n\nTo ensure a reliable and fair usage experience for all users, our API implements comprehensive **rate limiting** and **access restriction** mechanisms. The following provides an overview of these features, detailing how they work, the associated headers, and best practices for interacting with our API effectively.\n\n##### **Hourly Call Limit**\n\nTo maintain optimal performance and prevent abuse, each API client is subject to an **hourly call limit**. This limit defines the maximum number of API requests you can make within a rolling one-hour window.\n\n- **Default Limit:** Each API key is allowed up to **1,000 requests per hour**.\n    \n- **Custom Limits:** Depending on your subscription tier or specific agreements, your hourly call limit (hourly_call_limit) may vary. Please refer to your account details or contact support for more information.\n    \n\n**Note:** The call count resets **every hour** from the time of the first request in the current window.\n\n##### **Rate Limiting Headers**\n\nEvery response from our API includes specific headers that inform you about your current rate limit status. Monitoring these headers allows you to manage your API usage proactively.\n\n- X-RateLimit-Limit\n    \n    - **Description:** The maximum number of API calls allowed within the current hour.\n        \n    - **Example:** X-RateLimit-Limit: 1000\n        \n- X-RateLimit-Remaining\n    \n    - **Description:** The number of API calls you have left in the current hour.\n        \n    - **Example:** X-RateLimit-Remaining: 750\n        \n- X-RateLimit-Reset\n    \n    - **Description:** The UNIX timestamp indicating when the current rate limit window resets.\n        \n    - **Example:** X-RateLimit-Reset: 1615125600\n        \n\n##### **Handling Rate Limit Exceeded**\n\nIf you exceed your hourly API call limit, the API will respond with a **429 Too Many Requests** status code, along with relevant rate limiting headers.\n\n- **Status Code:** 429 Too Many Requests\n    \n- **Response Headers:**\n    \n    - X-RateLimit-Limit: Your maximum allowed requests per hour.\n        \n    - X-RateLimit-Remaining: 0 (indicating no remaining requests).\n        \n    - X-RateLimit-Reset: The UNIX timestamp when the rate limit resets.\n        \n- **Error Response Body:**\n    \n\n``` json\n{\n  \"response\": \"error\",\n  \"status\": \"Rate limit exceeded\",\n  \"message\": \"API call limit exceeded. Please try again later.\"\n}\n\n ```\n\n#### **Best Practices**\n\nTo ensure smooth and uninterrupted access to our API, consider the following best practices:\n\n1. **Monitor Rate Limiting Headers:**\n    \n    1. Always check the X-RateLimit-Remaining and X-RateLimit-Reset headers in API responses to manage your request flow effectively.\n        \n2. **Implement Retry Logic:**\n    \n    1. In the event of receiving a 429 Too Many Requests response, implement exponential backoff strategies to retry after the specified reset time.\n        \n3. **Optimize API Calls:**\n    \n    1. Batch requests when possible and avoid unnecessary API calls to stay within your rate limits.\n        \n4. **Handle Access Restrictions Gracefully:**\n    \n    1. Ensure your application can detect 403 Forbidden responses related to access restrictions and adjust its behavior accordingly.\n        \n5. **Stay Informed:**\n    \n    1. Keep abreast of any changes to rate limiting policies or access restrictions by regularly reviewing our API documentation.\n        \n\n#### **Frequently Asked Questions (FAQ)**\n\n**Q1: How is the** X-RateLimit-Reset **timestamp calculated?**\n\n- **A:** The X-RateLimit-Reset header provides a UNIX timestamp indicating when your current rate limit window will reset. After this time, your X-RateLimit-Remaining will be refreshed to your maximum limit.\n    \n\n**Q2: Can I increase my hourly call limit?**\n\n- **A:** Yes, depending on your subscription tier or specific needs, you can request an increase to your hourly call limit by contacting our support team.\n    \n\n**Q3: What happens if I ignore the rate limiting headers and continue making requests?**\n\n- **A:** Exceeding your rate limit will result in 429 Too Many Requests responses. Continuous abuse may lead to temporary suspension of your API access.\n    \n\n**Q4: Are there different rate limits for different API endpoints?**\n\n- **A:** Currently, the rate limits are applied per API key, not per endpoint. All endpoints share the same hourly call limit associated with your credentials.\n    \n\n**Q5: How does the access restriction affect API usage during peak hours?**\n\n- **A:** Access restrictions ensure that API usage remains controlled and predictable. By limiting requests to specific times, we can better manage server load and provide a stable experience for all users.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"16435285","team":2126116,"collectionId":"a76bd84e-4c79-48d0-93af-f8e77681b511","publishedId":"2sBXcGEf7d","public":true,"publicUrl":"https://documenter-api.postman.tech/view/16435285/2sBXcGEf7d","privateUrl":"https://go.postman.co/documentation/16435285-a76bd84e-4c79-48d0-93af-f8e77681b511","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"3cba75"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"3cba75"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"3cba75"}}]}},"version":"8.10.1","publishDate":"2026-02-25T10:37:21.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":null,"logoDark":null}},"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/fd8f37e04c1806eb6e25350f7ac2f81289c3fde7417b710a302bf7484fdff8da","favicon":"https://res.cloudinary.com/postman/image/upload/v1690486007/team/jdmuepf312swxrmin4bu.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://documenter.gw.postman.com/view/metadata/2sBXcGEf7d"}