{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"1b73e0e1-d38e-4d67-9592-255307c5d6ff","name":"Catsy API Docs","description":"Welcome to the Catsy API Documentation\n\n# **What is Catsy?**\n\nCatsy is a Product Information Management (PIM) and Digital Asset Management (DAM) platform designed to simplify how teams manage, enrich, and distribute product content across multiple channels. From a centralized hub, you can streamline content workflows, ensure data consistency, and speed up time-to-market.\n\n---\n\n# What is the Catsy API for?\n\nThe Catsy REST API empowers you to seamlessly integrate your product content with other systems in your tech stack. Use it to automate updates, sync product data, and build custom workflows tailored to your business needs.\n\nThis guide provides a breakdown of available endpoints, usage examples, and best practices to help you get the most out of the API.\n\n---\n\n# Authentication\n\nAll API requests require authentication using a Bearer Token. This token must be included in the header of each request.\n\nTo obtain your API Bearer Token, inside Catsy, navigate to:  \nMore > Administration > Users & Roles.\n\n1. Add a new role called 'Web API'\n    \n2. Add a user under this role. You can give a random email address.\n    \n3. Click on username and open the popup. Copy the API key.\n    \n4. Set attributes you want this role to have access to by going to _Admin > Attribute Access_\n    \n\n---\n\n# Testing the API in Postman\n\nYou can quickly explore and test Catsy’s API using Postman. Here’s how:\n\n### **1\\. Run in Postman**\n\n- Click the **\"Run in Postman\"** button at the top-right of the documentation page.\n    \n\n### **2\\. Fork the Collection**\n\n- In the window that opens, select **\"Postman Web\"**.\n    \n- Sign in to your Postman account (or register if you don’t have one).\n    \n- Choose a workspace (or create a new one).\n    \n- Click **\"Fork Collection\"**.\n    \n\n### **3\\. Set Your API Key**\n\n- Once forked, you’ll land on the **collection overview page**.\n    \n- Click the **“Variables”** tab.\n    \n- In the `API_KEY` row, enter your **Bearer Token** under **Current Value**.\n    \n\n### **4\\. Browse and Test Endpoints**\n\n- Use the sidebar to explore different folders and find the endpoint you want to test.\n    \n- Click a request to open it.\n    \n\n### **5\\. Understand & Edit the Request**\n\n- Under the **Params** tab, check for any **required parameters**.\n    \n- Under the **Body** tab, customize the request body as needed for your test.\n    \n\n### **6\\. Send and View Response**\n\n- Once ready, click **Send**.\n    \n- The **API response** will appear in the lower panel with status code, headers, and data.\n    \n\n---\n\n# Resources\n\nThe Catsy API is organized around **RESTful principles**, allowing clients to manage product information, digital assets, relationships, and custom entities with predictable, structured endpoints. Each **resource** represents a data object or collection, with clearly defined operations, attributes, and relationships.\n\nThis documentation outlines all available **resources** and their supported operations (e.g., create, retrieve, update, delete). Individual sections provide specific details on formats, expected parameters, filtering, sorting, pagination, and usage examples.\n\n### Request & Response Format\n\nAll Catsy API interactions must be performed using **`application/json`** format for both requests and responses. This ensures consistency, reliability, and compatibility across systems.\n\n### Rate Limiting\n\nCatsy’s API enforces rate limiting using the **token bucket algorithm** to ensure fair usage and system stability.\n\n- Clients are allowed **2 requests per second**, with a **maximum burst capacity of 10 requests**.\n    \n- The bucket refills at a rate of **2 tokens per second**, up to the 10-request limit.\n    \n- If a client exceeds the available token count, the server responds with a **429 Too Many Requests** status.\n    \n\n#### **Recommendations for Clients**\n\n- Handle 429 responses gracefully by implementing retry logic with exponential backoff.\n    \n- Monitor your request rates to ensure you’re staying within limits.\n    \n- Where possible, batch requests or reduce frequency to avoid hitting rate limits.\n    \n\nThis rate-limiting strategy helps balance performance and resource availability across all API users.\n\n### Required Headers\n\nTo authenticate and properly format your requests, always include the following headers:\n\n``` json\nContent-Type: application/json\nAccept: application/json\nAuthorization: Bearer {{your_access_token}}\n\n ```\n\n### HTTP Status Codes\n\n| **Status Code** | **Description** |\n| --- | --- |\n| **200** | OK – Everything is working |\n| **201** | OK – New resource has been created |\n| **204** | OK – The resource was successfully deleted |\n| **304** | Not Modified – The client can use cached data |\n| **400** | Bad Request – The request was invalid or cannot be served. Error details should be provided. |\n| **401** | Unauthorized – The request requires user authentication |\n| **403** | Forbidden – The server understood the request but refuses to authorize it |\n| **404** | Not Found – There is no resource behind the requested URI |\n| **422** | Unprocessable Entity – The server cannot process the request (e.g., missing required attributes) |\n| **500** | Internal Server Error – A catch-all error; stack trace should be logged, not returned |\n\n### Filtered Searches\n\nTo authenticate and properly format your requests, always include the following headers:\n\n### Simple Filter\n\nA simple filter requires:\n\n| Field | Description | Required | Type |\n| --- | --- | --- | --- |\n| attributeKey | The field to filter on | ✅ | `string` |\n| operator | Operation to perform | ✅ | `string` |\n| value | Value(s) to filter with | ⚠️ Only required for some | `string` / `array` / `object` |\n\n#### Example – Products with `status` equal to \"Active\":\n\n``` json\n{\n  \"attributeKey\": \"status\",\n  \"operator\": \"is\",\n  \"value\": \"Active\"\n}\n\n ```\n\n### Compound Filter (AND conditions)\n\nA compound filter is an array of simple filters. All filters must be true.\n\n#### Example – Products with `status` = Active AND `capacity` containing \"13\":\n\n``` json\n[\n  {\n    \"attributeKey\": \"status\",\n    \"operator\": \"is\",\n    \"value\": \"Active\"\n  },\n  {\n    \"attributeKey\": \"capacity\",\n    \"operator\": \"contains\",\n    \"value\": \"13\"\n  }\n]\n\n ```\n\n### Supported Operators:\n\n| **Operator** | **Description** | **Operator** | **Description** |\n| --- | --- | --- | --- |\n| `is` | Equal to (case-insensitive for strings) | `not` | Not equal to |\n| `contains` | Value contains substring | `does not contain` | Value does not contain substring |\n| `is empty` | True when the attribute has no value or is null | `is not empty` | True when the attribute has any value |\n| `starts with` | Value starts with a given string | `does not start with` | Value does not start with a given string |\n| `ends with` | Value ends with a given string | `does not end with` | Value does not end with a given string |\n| `between` | Range check using `lowerBoundValue` and `upperBoundValue` | `is exactly bulk` | Multiline match (newline-delimited string list) |\n| `>` | Greater than (use with `lowerBoundValue`) | `>=` | Greater than or equal (use with `lowerBoundValue`) |\n| `<` | Less than (use with `upperBoundValue`) | `<=` | Less than or equal (use with `upperBoundValue`) |\n\n# Python SDK\n\nEasily integrate with the Catsy API using our official Python SDK. Watch the quick overview below to get started. You can download the latest Python SDK as a ZIP file by logging into Catsy.\n\n<video src=\"https://player.vimeo.com/video/1078958299\" width=\"665\" height=\"389\"></video>\n\n# JavaScript SDK\n\nUse the Catsy JavaScript SDK to connect your applications seamlessly to the Catsy API. Watch the quick walkthrough below. The JavaScript SDK is available for download as a ZIP file inside Catsy.\n\n<video src=\"https://player.vimeo.com/video/1078958356\" width=\"653\" height=\"424\"></video>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":true,"owner":"43566738","team":7048024,"collectionId":"1b73e0e1-d38e-4d67-9592-255307c5d6ff","publishedId":"2sB2cd5JSd","public":true,"publicUrl":"https://api-docs.catsy.com","privateUrl":"https://go.postman.co/documentation/43566738-1b73e0e1-d38e-4d67-9592-255307c5d6ff","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":"https://content.pstmn.io/41a590e0-b910-4ae6-bd9a-a4ddcd07393b/Y2F0c3ktbG9nby5qcGc=","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":"https://content.pstmn.io/41a590e0-b910-4ae6-bd9a-a4ddcd07393b/Y2F0c3ktbG9nby5qcGc=","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.10.0","publishDate":"2025-08-07T18:43:44.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":"https://content.pstmn.io/41a590e0-b910-4ae6-bd9a-a4ddcd07393b/Y2F0c3ktbG9nby5qcGc=","logoDark":"https://content.pstmn.io/41a590e0-b910-4ae6-bd9a-a4ddcd07393b/Y2F0c3ktbG9nby5qcGc="}},"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/e7abeef0e99ecb0f941e1f4acf1e3a2a62db4772521e2ab8e28f2d5e0654bda2","favicon":"https://res.cloudinary.com/postman/image/upload/v1745336256/team/1c6d73b8f781f885404c0e43d4d387f0.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://api-docs.catsy.com/view/metadata/2sB2cd5JSd"}