{"_id":"@aurastride/sdk","_rev":"8-b12080e5d618b378b8aacaf96f8f81d7","name":"@aurastride/sdk","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@aurastride/sdk","version":"0.1.0","keywords":["aurastride","cms","crm","sdk","api","headless"],"author":{"name":"aurastride"},"license":"MIT","_id":"@aurastride/sdk@0.1.0","maintainers":[{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"}],"dist":{"shasum":"fb1b0018bb1c0849c6c86055e5804073f51d6ac1","tarball":"https://registry.npmjs.org/@aurastride/sdk/-/sdk-0.1.0.tgz","fileCount":6,"integrity":"sha512-cKVmElD4c4SeS2JfAc1ypwlq0/ZJqiw34uGBVHNIwoh4efHUc/whPghxPZ6HANQaSfWsGC8QML7BvY9gXLkcIw==","signatures":[{"sig":"MEUCIQCSPOq9k8YWb3g8CLoTgUX3cRBCXYRHaybtrm9p5T9JtgIgChFIeF4d4hrpwhkBYh7NauCjBdGs3n2mjWKzDWg8TjA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":361894},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"3fba1efa9c3a0d5cf09cc8137b8e97647cd32e03","scripts":{"dev":"tsup --watch","build":"tsup","clean":"rm -rf dist","add-api":"node scripts/add-api.js","build:types":"tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"},"_npmVersion":"11.8.0","description":"Official JavaScript SDK for the aurastride API platform","directories":{},"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.0_1776767367710_0.7257879652366945","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aurastride/sdk","version":"0.1.1","keywords":["aurastride","cms","crm","sdk","api","headless"],"author":{"name":"aurastride"},"license":"MIT","_id":"@aurastride/sdk@0.1.1","maintainers":[{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"}],"dist":{"shasum":"7abd7125a98a3678bb88e54adad8b6829bc3f318","tarball":"https://registry.npmjs.org/@aurastride/sdk/-/sdk-0.1.1.tgz","fileCount":6,"integrity":"sha512-XRnTwmj0d7xgiBe8xxT6NIXRdRLMRy6Bq3J6tZEXBYoBt8vZfuJqmzRQwLWxlrSh+/0mVqS+m+ua+iLYPHsdQA==","signatures":[{"sig":"MEUCIH+wlnutUWb5B0Qy+XDWdsVstuQYtdk8VoeVbh9luoAcAiEAs128Me16l4ZBxPqY/Ha3x/3UexjhHP11YPHsVlQLhYo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":375926},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"4f74dde7e9105ec1f4640ff7c602d23fd5f5411a","scripts":{"dev":"tsup --watch","build":"tsup","clean":"rm -rf dist","add-api":"node scripts/add-api.js","build:types":"tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"},"_npmVersion":"11.8.0","description":"Official JavaScript SDK for the aurastride API platform","directories":{},"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.1_1776770169892_0.9484112074551079","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@aurastride/sdk","version":"0.1.2","keywords":["aurastride","cms","crm","sdk","api","headless"],"author":{"name":"aurastride"},"license":"MIT","_id":"@aurastride/sdk@0.1.2","maintainers":[{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"}],"dist":{"shasum":"adeeefec86ead1695fb4f7bf8c1029875fdf9b5c","tarball":"https://registry.npmjs.org/@aurastride/sdk/-/sdk-0.1.2.tgz","fileCount":6,"integrity":"sha512-+U6fgZfWlguFsDh6l5P8+FtLtG3bnO8n+3jWvGHL25YMNxY6tdDzqUaLsAVEiqiSD6JQdfZJ2AbFM78UIAparA==","signatures":[{"sig":"MEUCIHVRx4XTopEvjtkBzf4x1wpzVgAJqSmJcgGsNFTlJC68AiEAvTHswPfYmdUfDB9p8aoYIZxHE8Cb3CyLxOKxHFzcb6I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":376890},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"826e132224d24e2b4833fe82426003b5c371276c","scripts":{"dev":"tsup --watch","build":"tsup","clean":"rm -rf dist","add-api":"node scripts/add-api.js","build:types":"tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"},"_npmVersion":"11.8.0","description":"Official JavaScript SDK for the aurastride API platform","directories":{},"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.2_1776922822810_0.4894405154781041","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@aurastride/sdk","version":"0.1.3","keywords":["aurastride","cms","crm","sdk","api","headless"],"author":{"name":"aurastride"},"license":"MIT","_id":"@aurastride/sdk@0.1.3","maintainers":[{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"}],"dist":{"shasum":"ed7e6fd8924e25687c94c7bb2d6f26e5afd402eb","tarball":"https://registry.npmjs.org/@aurastride/sdk/-/sdk-0.1.3.tgz","fileCount":6,"integrity":"sha512-Byvkgj9R6Z0xadICc9+KSCH6ptUyHBcANx8auE5vteQq0qVQjKrK40JVplaLutsiJNViEvaTf4bO80ByoAACmA==","signatures":[{"sig":"MEUCIDJ5Xw/YksZ+MwIyIZOUCW7AVamYGvjYnoy9Ydxtu9dHAiEAqE4lJdmJDEpDGdovT7TlV01BzUFbdqKJhCRqTsLaPxo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":376890},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"254508539bbbd751bb8cd85f23670e17f4a0ea2c","scripts":{"dev":"tsup --watch","build":"tsup","clean":"rm -rf dist","add-api":"node scripts/add-api.js","build:types":"tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"},"_npmVersion":"11.8.0","description":"Official JavaScript SDK for the aurastride API platform","directories":{},"_nodeVersion":"25.6.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.3_1777384246960_0.02095985569612524","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@aurastride/sdk","version":"0.1.4","keywords":["aurastride","cms","crm","sdk","api","headless"],"author":{"name":"aurastride"},"license":"MIT","_id":"@aurastride/sdk@0.1.4","maintainers":[{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"}],"dist":{"shasum":"9382f5522e51edcc9c58325e93fbbe9ded2fdec0","tarball":"https://registry.npmjs.org/@aurastride/sdk/-/sdk-0.1.4.tgz","fileCount":6,"integrity":"sha512-06xehlPplcUCFE0xtvYvgu4qO/96ggTAUQ3ZGJXVzKF3jREoLfUkSkRA+4I2T7H1fMZ91Dexmc/oP6ZI2EsGQA==","signatures":[{"sig":"MEYCIQC5EpX9KarBdbOGbyG8cDOHnCT7ofbS44etelmARehCogIhAM+8sIVqOEtQeNHt3aMfhOkq7nEDQkg8dC/EuIQJDMc/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":359516},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"c742e5b626b33d80e5fb8e1c8a78fd5d108bc294","scripts":{"dev":"tsup --watch","build":"tsup","clean":"rm -rf dist","add-api":"node scripts/add-api.js","build:types":"tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"},"_npmVersion":"11.12.1","description":"Official JavaScript SDK for the aurastride API platform","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.4_1778567260313_0.8750824173977458","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@aurastride/sdk","version":"0.1.5","keywords":["aurastride","cms","crm","sdk","api","headless"],"author":{"name":"aurastride"},"license":"MIT","_id":"@aurastride/sdk@0.1.5","maintainers":[{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"}],"dist":{"shasum":"75994e154fc969c6eb4eb5566f93717b32e1b6df","tarball":"https://registry.npmjs.org/@aurastride/sdk/-/sdk-0.1.5.tgz","fileCount":6,"integrity":"sha512-FBzznTE6SaOR4S2o/GFdLJUxugOWW9LIpTlGATV+maMX2qXCQJbF1olUL7f9rZSqbxaJJ8cTpiXgrwVbC09/Mw==","signatures":[{"sig":"MEQCICQ+nRqHyKd/Dn7BhWPMm3eWSAE/ploh08xmrRW3lqF4AiBIrMqomfKwkyMWKKL8DNHifXVcQhenG5d4BH9ozBMEbg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":392186},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"41687b83a85afef765045c3ef2a9c51cf9897c8d","scripts":{"dev":"tsup --watch","build":"tsup","clean":"rm -rf dist","add-api":"node scripts/add-api.js","build:types":"tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"},"_npmVersion":"11.12.1","description":"Official JavaScript SDK for the aurastride API platform","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.5_1778842524599_0.22509566901302214","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@aurastride/sdk","version":"0.1.6","keywords":["aurastride","cms","crm","sdk","api","headless"],"author":{"name":"aurastride"},"license":"MIT","_id":"@aurastride/sdk@0.1.6","maintainers":[{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"}],"dist":{"shasum":"b6cb85416b864fdd45270b4bcfce23a41d58ca80","tarball":"https://registry.npmjs.org/@aurastride/sdk/-/sdk-0.1.6.tgz","fileCount":6,"integrity":"sha512-qyMO9jLTtK24hwiDZykcYZTN2TXCx50Or2wl4QZxv+GIflfrimQMKTRwuiAK4CSCMtJqSE1GJUyH557o3WvqYg==","signatures":[{"sig":"MEYCIQDAonD+2SmukWapzJkd7ZFq4CeFPHK6FTkuYKK357mgLAIhAJ+MREwjikiltUlBAdql9Y/tlpIP5bsIBYSfTGdoPEtK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":398562},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"369b1eb742a4c582e4e7f6d277d34cba55cee234","scripts":{"dev":"tsup --watch","build":"tsup","clean":"rm -rf dist","add-api":"node scripts/add-api.js","build:types":"tsc --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"},"_npmVersion":"11.12.1","description":"Official JavaScript SDK for the aurastride API platform","directories":{},"_nodeVersion":"25.9.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.6_1785405684273_0.4952716776099859","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aurastride/sdk","version":"0.2.0","description":"Official JavaScript SDK for the aurastride API platform","type":"module","author":{"name":"aurastride"},"license":"MIT","keywords":["aurastride","cms","crm","sdk","api","headless"],"engines":{"node":">=18.0.0"},"main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"scripts":{"build":"tsup","build:types":"tsc --emitDeclarationOnly --outDir dist","dev":"tsup --watch","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build","add-api":"node scripts/add-api.js"},"devDependencies":{"tsup":"^8.0.0","typescript":"^5.4.0"},"gitHead":"073a2d22751a7eceaa6c880de3a2e199383fdf1b","_id":"@aurastride/sdk@0.2.0","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-18TymTZRf+hA7nli+18NE3NUMRLJshtPql9URq7Dg4eurI1CBzYq9VLxZU4RbvTmV/vnKfujtFbM6UoPa693HA==","shasum":"66d122467268dd240aba1a99dfc4ab7a32f76488","tarball":"https://registry.npmjs.org/@aurastride/sdk/-/sdk-0.2.0.tgz","fileCount":6,"unpackedSize":401653,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIE3W+8NpB+qP9R1/ZaezEO4788HaseMTAQeKsn/Ju2+FAiEAyfWxMZ6ZhZURPqxwg/GEt1STfs9xEv9EEDEo8UHSVaQ="}]},"_npmUser":{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"},"directories":{},"maintainers":[{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_0.2.0_1787133225053_0.9267062492725022"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-21T10:29:27.595Z","modified":"2026-08-19T09:53:45.464Z","0.1.0":"2026-04-21T10:29:27.914Z","0.1.1":"2026-04-21T11:16:10.029Z","0.1.2":"2026-04-23T05:40:22.950Z","0.1.3":"2026-04-28T13:50:47.118Z","0.1.4":"2026-05-12T06:27:40.462Z","0.1.5":"2026-05-15T10:55:24.901Z","0.1.6":"2026-07-30T10:01:24.429Z","0.2.0":"2026-08-19T09:53:45.189Z"},"author":{"name":"aurastride"},"license":"MIT","keywords":["aurastride","cms","crm","sdk","api","headless"],"description":"Official JavaScript SDK for the aurastride API platform","maintainers":[{"name":"itsupport_vsourz","email":"itsupport@vsourz.com"}],"readme":"<div align=\"center\">\n\n# 🚀 @aurastride/sdk\n\n**Official JavaScript & TypeScript SDK for the [aurastride](https://aurastride.com) headless CMS/CRM platform.**\n\n[![npm version](https://img.shields.io/npm/v/@aurastride/sdk?style=for-the-badge&color=6366f1&logo=npm)](https://www.npmjs.com/package/@aurastride/sdk)\n[![license](https://img.shields.io/npm/l/@aurastride/sdk?style=for-the-badge&color=22c55e)](https://github.com/aurastride/aurastride-sdk-npm/blob/main/LICENSE)\n[![Node.js](https://img.shields.io/badge/Node.js-18%2B-339933?style=for-the-badge&logo=nodedotjs&logoColor=white)](https://nodejs.org/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-3178c6?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)\n[![Zero Dependencies](https://img.shields.io/badge/Dependencies-0-brightgreen?style=for-the-badge)](https://www.npmjs.com/package/@aurastride/sdk)\n\n</div>\n\n---\n\n### ✨ Key Features\n\n- ⚡ **Zero Runtime Dependencies** — Powered by standard native `fetch` API.\n- 📦 **Universal Module Support** — Native **CommonJS**, **ESM**, and **TypeScript** declarations.\n- 🔑 **Automated OAuth2 Engine** — Seamless token injection & auto-refresh before expiration.\n- 🛡️ **Enterprise Resilience** — Smart exponential backoff retries & configurable in-memory caching.\n- 🧩 **Comprehensive Coverage** — Direct access to CRM, CMS Content Hub, Asset Management, & System APIs.\n\n---\n\n| 📦 SDK version | 🌐 Supported API version | 🎯 Default API version |\n|:---:|:---:|:---:|\n| `0.1.x` | `v4` | `v4` |\n\n---\n\n<a id=\"table-of-contents\"></a>\n## 📌 Table of Contents\n\n- 📦 [Installation](#installation)\n- ⚡ [Quick Start](#quick-start)\n- ⚙️ [Configuration](#configuration)\n  - 🌐 [Environment Selection](#environment-selection)\n- 🔑 [Authentication](#authentication)\n  - 🔄 [Exchange Authorization Code](#exchange-authorization-code)\n  - ⏳ [Manual Token Refresh](#manual-token-refresh)\n  - ✅ [Verify Token](#verify-token)\n  - 🛡️ [Access the Raw Token Set](#access-the-raw-token-set)\n- 🧩 [Services Overview](#services-overview)\n- 🛠️ [System Configuration](#system-configuration)\n  - 👤 [User](#user)\n  - 🌐 [Language](#language)\n  - 💱 [Currency](#currency)\n  - 🏷️ [System Category](#system-category)\n  - ⚙️ [System Variable](#system-variable)\n- 👥 [CRM](#crm)\n  - 🎯 [Lead](#lead)\n  - 📇 [Contact](#contact)\n  - 🏢 [Organization](#organization)\n- 📝 [Content](#content)\n  - 📐 [Content Model](#content-model)\n  - 📑 [Content Field](#content-field)\n- 📊 [Field Type Complete Content Field Example](#field-type-complete-content-field-example)\n  - ⚡ [Field Types Quick Reference](#field-types-quick-reference)\n    - 🔤 [Text & Input](#text--input)\n    - ☑️ [Selection & Choice](#selection--choice)\n    - 📅 [Date & Time](#date--time)\n    - 🎨 [Rich Content & Media](#rich-content--media)\n    - ✨ [Special](#special)\n    - 🔗 [Relation - Entities](#relation---entities)\n    - 👤 [Relation - System Users](#relation---system-users)\n    - 📇 [Relation - CRM Contacts](#relation---crm-contacts)\n    - 🎯 [Relation - CRM Leads](#relation---crm-leads)\n    - 🔄 [Repeaters (CMS Only)](#repeaters-cms-only)\n  - 💡 [Full Example](#full-example)\n- 🗂️ [Content Hub](#content-hub)\n  - 📊 [Content Hub Full Field Type Example](#content-hub-full-field-type-example)\n- 🖼️ [Digital Asset Management](#digital-asset-management)\n  - 📁 [Media Directory](#media-directory)\n  - 🖼️ [Media](#media)\n- ⭐ [Features](#features)\n  - 📅 [Activity](#activity)\n  - 🚦 [Status](#status)\n  - 🏷️ [Label Group](#label-group)\n  - 🏷️ [Label](#label)\n  - 📝 [Notes](#notes)\n  - 📄 [Documents](#documents)\n  - 💰 [Pricing](#pricing)\n  - 🎛️ [Manage Feature Counts & Info](#manage-feature)\n- 🔔 [Notification](#notification)\n  - 📢 [Announcement](#announcement)\n  - ⏱️ [Timeline](#timeline)\n- 🔌 [Integration](#integration)\n  - 🪝 [Webhook](#webhook)\n  - 🔑 [SSO Token](#sso-token)\n- 🛍️ [MarketPlace App](#marketplace-app)\n  - ⚙️ [Manage APP Counts & Info](#manage-app-counts--info)\n    - 🎛️ [App Feature Management](#app-feature-management)\n    - 📖 [Read App Feature Data](#read-app-feature-data)\n  - 📲 [Read Installed App Data](#read-installed-app-data)\n    - 📱 [Read Installed Apps](#read-installed-apps)\n    - 📦 [Read Installed APP Models](#read-installed-app-models)\n- 📄 [Default Filter & Pagination](#default-filter--pagination)\n- 📑 [Pagination](#pagination)\n- ⚡ [Caching](#caching)\n- 🔀 [Interceptors](#interceptors)\n- ⚠️ [Error Handling](#error-handling)\n- 📘 [TypeScript Usage](#typescript-usage)\n- 📚 [Constants Reference](#constants-reference)\n- 📜 [License](#license)\n\n---\n\n<a id=\"installation\"></a>\n## 📦 Installation\n\nInstall `@aurastride/sdk` using your preferred package manager:\n\n| Package Manager | Installation Command |\n|:---:|---|\n| 📦 **npm** | `npm install @aurastride/sdk` |\n| 🧶 **yarn** | `yarn add @aurastride/sdk` |\n| 🚀 **pnpm** | `pnpm add @aurastride/sdk` |\n| 🥟 **bun** | `bun add @aurastride/sdk` |\n\n```bash\n# npm\nnpm install @aurastride/sdk\n\n# yarn\nyarn add @aurastride/sdk\n\n# pnpm\npnpm add @aurastride/sdk\n\n# bun\nbun add @aurastride/sdk\n```\n\n> [!IMPORTANT]\n> **Requirement:** Node.js 18 or higher is required.\n\n---\n\n<a id=\"quick-start\"></a>\n## ⚡ Quick Start\n\n```js\n// CommonJS\nconst { aurastrideClient } = require('@aurastride/sdk');\n\n// ES Module / TypeScript\nimport { aurastrideClient } from '@aurastride/sdk';\n\nconst client = new aurastrideClient({\n  apiKey:       'YOUR_X_API_KEY',\n  clientId:     'YOUR_CLIENT_ID',\n  clientSecret: 'YOUR_CLIENT_SECRET',\n  redirectUri:  'https://your-domain.aurastride.com',\n});\n\n// Step 1 – exchange auth code for tokens\nawait client.auth.exchangeCode('AUTH_CODE');\n\n// Step 2 – all services are now available\nconst leads = await client.lead.read({ pagination: { page: 1, limit: 20 } });\nconsole.log(leads);\n```\n\n---\n\n<a id=\"configuration\"></a>\n## ⚙️ Configuration\n\nPass a config object to `aurastrideClient`. `apiKey`, `clientId`, `clientSecret`, and `redirectUri` are all required.\n\n| ⚙️ Option | 📝 Type | 🎯 Default | 📄 Description |\n|---|---|---|---|\n| `apiKey` | `string` | **required** | Your `x-api-key` HTTP header value |\n| `clientId` | `string` | **required** | OAuth2 client ID |\n| `clientSecret` | `string` | **required** | OAuth2 client secret |\n| `redirectUri` | `string` | **required** | aurastride customer domain |\n| `environment` | `string` | `'production'` | Target environment: `'production'` or `'staging'` |\n| `autoRefresh` | `boolean` | `true` | Silently refresh the access token 60 s before expiry |\n| `maxRetries` | `number` | `3` | Max retry attempts on network errors / 5xx / rate limits |\n| `retryBaseDelayMs` | `number` | `300` | Base delay (ms) for exponential backoff with jitter |\n| `apiVersion` | `string` | `'v4'` | API version to target (appended to the base URL, e.g. `'v3'`, `'v4'`) |\n\n<a id=\"environment-selection\"></a>\n### 🌐 Environment Selection\n\nPass the `environment` option to the client config to select the API endpoint. This is managed the same way as `apiKey` - no environment variable is read by the SDK.\n\nThe API version defaults to `v4` and is appended to the base URL automatically. You can override it with the `apiVersion` config option.\n\n| 🌐 `environment` | 🔗 Base URL |\n|---|---|\n| `'production'` *(default)* | `https://api.aurastride.com/webapi` |\n| `'staging'` | `https://betaapi.aurastride.com/webapi` |\n\nThe resolved URL becomes `<base>/<apiVersion>`, e.g. `https://api.aurastride.com/webapi/v4`.\n\n```js\n// Staging\nconst client = new aurastrideClient({\n  apiKey:       'xak_...',\n  clientId:     'cid_...',\n  clientSecret: 'cs_...',\n  redirectUri:  'https://your-domain.aurastride.com',\n  environment:  'staging',   // omit or set to 'production' for production\n});\n```\n\n```js\nconst client = new aurastrideClient({\n  apiKey:             'xak_...',\n  clientId:           'cid_...',\n  clientSecret:       'cs_...',\n  redirectUri:        'https://your-domain.aurastride.com',\n  environment:        'production', // optional - defaults to 'production'\n  autoRefresh:        true,\n  maxRetries:         5,\n  retryBaseDelayMs:   500,\n  apiVersion:         'v4',         // optional - defaults to 'v4'\n});\n```\n\n---\n\n<a id=\"authentication\"></a>\n## 🔑 Authentication\n\naurastride uses OAuth2. You obtain an **authorization code** through a customer portal under the OAuth Tokens section of Manage Token entry, then exchange it for access + refresh tokens once.  \nAfter that, the SDK handles all token injection (via `Authorization: Bearer` header) and silent refresh automatically.\n\n<a id=\"exchange-authorization-code\"></a>\n### 🔄 Exchange Authorization Code\n\nSends `grant_type: \"authorization_code\"` to the token endpoint.\n\n```js\n// The `code` query parameter from the OAuth2 callback URL is the only required argument.\n// clientId, clientSecret and redirectUri come from the constructor config.\nconst tokens = await client.auth.exchangeCode('AUTH_CODE');\n\n// tokens.data.access_token  – injected as Authorization: Bearer <token> on every subsequent request\n// tokens.data.refresh_token – stored and used for auto-refresh\n```\n\nTo override credentials at call time:\n\n```js\nconst tokens = await client.auth.exchangeCode('AUTH_CODE', {\n  clientId:     'other-client-id',\n  clientSecret: 'other-secret',\n  redirectUri:  'https://your-domain.aurastride.com',\n});\n```\n\n<a id=\"manual-token-refresh\"></a>\n### ⏳ Manual Token Refresh\n\nSends `grant_type: \"refresh_token\"` to get a new access token.  \nBy default `autoRefresh: true` handles this automatically. To refresh manually (if `autoRefresh: false`):\n\n```js\nconst tokens = await client.auth.refreshToken();\n// tokens.data.access_token – the new access token\n```\n\n<a id=\"verify-token\"></a>\n### ✅ Verify Token\n\nSends `grant_type: \"verify_token\"` with the current access token in the `Authorization: Bearer` header.\n\n```js\nconst result = await client.auth.verifyToken();\n// result.status === true  →  token is still valid\n```\n\n<a id=\"access-the-raw-token-set\"></a>\n### 🛡️ Access the Raw Token Set\n\n```js\nconst tokenSet = client.tokenManager.getTokenSet();\n// { access_token, refresh_token, expires_at }\n```\n\n---\n\n<a id=\"services-overview\"></a>\n## 🧩 Services Overview\n\nAll services are available as properties on the client instance.\n\n| 🔹 Property | 🧩 Service | ⚙️ Operations |\n|---|---|---|\n| `client.user` | UserService | read |\n| `client.language` | LanguageService | read |\n| `client.currency` | CurrencyService | read |\n| `client.systemCategory` | SystemCategoryService | create, read, update, delete |\n| `client.systemVariable` | SystemVariableService | create, read, update, delete |\n| `client.lead` | LeadService | create, read, update, delete |\n| `client.contact` | ContactService | create, read, update, delete, readByModule, apply |\n| `client.organization` | OrganizationService | create, read, update, delete |\n| `client.contentModel` | ContentModelService | create, read, update, delete |\n| `client.contentField` | ContentFieldService | create, read, update, updateMeta |\n| `client.contentHub` | ContentHubService | create, read, update, delete, verifyPassword |\n| `client.mediaDirectory` | MediaDirectoryService | create, read, update, delete |\n| `client.mediaRepository` | MediaRepositoryService | create, read, update, delete |\n| `client.activity` | ActivityService | create, read, update, delete |\n| `client.status` | StatusService | create, read, update, apply, readByModule |\n| `client.labelGroup` | LabelGroupService | create, read, update, delete |\n| `client.label` | LabelService | create, read, update, delete, readByModule, apply, removeApplied |\n| `client.note` | NoteService | create, read |\n| `client.document` | DocumentService | read, delete |\n| `client.pricing` | PricingService | create, read |\n| `client.manageFeature` | ManageFeatureService | manageContent, manageApp |\n| `client.notification` | NotificationService | create |\n| `client.timeline` | TimelineService | create |\n| `client.webhook` | WebhookService | create, read, update, delete |\n| `client.sso` | SsoService | generateToken |\n| `client.marketplace` | MarketplaceService | read, readAppFeatures, readInstalledApps |\n\n---\n\n<a id=\"system-configuration\"></a>\n## 🛠️ System Configuration\n\n<a id=\"user\"></a>\n### 👤 User\n\n```js\n// Read system users\nconst users = await client.user.read({\n  filter:     { search_by: 'ALL', search: '' },\n  pagination: { page: 1, limit: 10, sort: 'name', order: 'asc' },\n});\n```\n\n<a id=\"language\"></a>\n### 🌐 Language\n\n```js\n// Read languages\nconst languages = await client.language.read({\n  pagination: { page: 1, limit: 50, sort: 'name', order: 'asc' },\n});\n```\n\n<a id=\"currency\"></a>\n### 💱 Currency\n\n```js\n// Read currencies\nconst currencies = await client.currency.read({\n  pagination: { page: 1, limit: 50, sort: 'name', order: 'asc' },\n});\n```\n\n<a id=\"system-category\"></a>\n### 🏷️ System Category\n\n```js\n// Create a system category (settings group)\nawait client.systemCategory.create({\n  name:        'Test Settings Group',\n  description: 'Created via SDK',\n});\n\n// Read system categories\nconst categories = await client.systemCategory.read({\n  filter:     { added_on: { from: '2026-04-01', to: '2026-04-30' } },\n  pagination: { page: 1, limit: 20, sort: 'name', order: 'asc' },\n});\n\n// Update a category\nawait client.systemCategory.update('SYSTEM_CATEGORY_ID', {\n  name:        'Updated Settings Group',\n  description: 'Updated via SDK',\n});\n\n// Delete a category\nawait client.systemCategory.delete('SYSTEM_CATEGORY_ID');\n```\n\n<a id=\"system-variable\"></a>\n### ⚙️ System Variable\n\n```js\n// Create a variable under a category\nawait client.systemVariable.create('SYSTEM_CATEGORY_ID', {\n  variable: {\n    code:               'IMGHI',\n    name:               'Image Height',\n    description:        'Used to set the height of an image.',\n    type:               'IN',\n    value:              100,\n    allow_modification: true,\n  },\n});\n\n// Read system variables\nconst vars = await client.systemVariable.read({\n  filter:     { system_category_id: ['SYSTEM_CATEGORY_ID'], type: ['IN'] },\n  pagination: { page: 1, limit: 20, sort: 'added_on', order: 'desc' },\n});\n\n// Update a variable\nawait client.systemVariable.update('SYSTEM_CATEGORY_ID', 'SYSTEM_VARIABLE_ID', {\n  variable: {\n    code:               'IMGHI',\n    name:               'Image Height - Updated',\n    description:        'Updated description.',\n    type:               'IN',\n    value:              300,\n    allow_modification: true,\n  },\n});\n\n// Delete a variable\nawait client.systemVariable.delete('SYSTEM_VARIABLE_ID');\n```\n\n---\n\n<a id=\"crm\"></a>\n## 👥 CRM\n\n<a id=\"lead\"></a>\n### 🎯 Lead\n\n```js\n// Create\nawait client.lead.create({\n  data: {\n    name:        'Test Lead',\n    received_on: '2026-04-07',\n    contact: {\n      id: 123, // Optional: provide Contact Id to link an existing contact instead of creating a new one.\n      title:       'MR',\n      first_name:  'John',\n      middle_name: 'due',\n      last_name:   '',\n      email: {\n        default: { meta: 'WK', value: 'test@example.com' },\n      },\n    },\n    organization: {\n      id: 123, // Optional: provide Organization Id to link an existing organization instead of creating a new one.\n      name:   'Test Org',\n      number: 9876543213,\n      email:  'test@example.com',\n    },\n    features: {\n      status:     { meta: 'OK', due_on: '2026-04-23', note: 'Note from SDK' },\n      visibility: { owner: 1, assigned_to: 1, shared_with: [1] },\n      labels:     { values: ['medium', 'low', 'high'] },\n    },\n    meta: {},\n  },\n});\n\n// Read with filter + pagination\nconst result = await client.lead.read({\n  filter:     { search_by: 'ALL', search: '' },\n  pagination: { page: 1, limit: 10, sort: 'added_on', order: 'desc' },\n});\n\n// Update\nawait client.lead.update('LEAD_ID', {\n  data: { name: 'Updated Lead Name', received_on: '2026-04-10' },\n});\n\n// Delete\nawait client.lead.delete('LEAD_ID');\n```\n\n<a id=\"contact\"></a>\n### 📇 Contact\n\n```js\n// Create\nawait client.contact.create({\n  data: {\n    contact: {\n      title:       'MR',\n      first_name:  'John',\n      middle_name: '',\n      last_name:   'Doe',\n      email: {\n        default: { meta: 'WK', value: 'test@example.com' },\n        other:   [{ meta: 'HM', value: 'home@example.com' }],\n      },\n      number: {\n        default: { meta: 'WK', value: '+1234567893' },\n        other:   [{ meta: 'WK', value: '9638527415' }],\n      },\n      organization: {\n        id: 123, // Optional: provide Organization Id to link an existing organization instead of creating a new one.\n        name:   'Test Organization',\n        number: 9876543213,\n        email:  'organization@example.com',\n      },\n    },\n    features: {\n      labels:     { values: ['grade_labels', 'informative_labels'] },\n      visibility: { type: 'PB' },\n    },\n    meta: {\n      designation:   'Manager',\n      department:    'Sales',\n      website:       'www.example.com',\n      address:       '26, Caroline',\n      city:          'London',\n      zip_code:      'SW19 3QL',\n      country:       'UK',\n      date_of_birth: '1993-04-16',\n    },\n  },\n});\n\n// Read with filter + pagination\nconst contacts = await client.contact.read({\n  filter:     { search_by: 'ALL', search: '' },\n  pagination: { page: 1, limit: 10, sort: 'added_on', order: 'desc' },\n});\n\n// Update\nawait client.contact.update('CONTACT_ID', {\n  data: {\n    contact: { title: 'Mr', first_name: 'John', middle_name: 'Spy', last_name: 'Doe' },\n  },\n});\n\n// Delete\nawait client.contact.delete('CONTACT_ID');\n\n// Read contacts linked to a specific lead\nawait client.contact.readByModule({\n  filter:     { lead_id: 'LEAD_ID' },\n  pagination: { page: 1, limit: 100, sort: 'added_on', order: 'desc' },\n});\n\n// Link a contact to a lead\nawait client.contact.apply('LEAD_ID', 'CONTACT_ID');\n```\n\n<a id=\"organization\"></a>\n### 🏢 Organization\n\n```js\n// Create\nawait client.organization.create({\n  data: {\n    name:    'Acme Corp',\n    number:  '+19638527410',\n    email:   'acme@example.com',\n    website: 'https://acme.example.com',\n    address: '26, Caroline, London, SW19 3QL',\n    features: {\n      labels:     { values: ['organelle', 'organs'] },\n      visibility: { type: 'PB' },\n    },\n    meta: { city: 'London', zip_code: 'SW19 3QL', country: 'United Kingdom' },\n  },\n});\n\n// Read\nawait client.organization.read({\n  filter:     { search_by: 'ALL', search: '' },\n  pagination: { page: 1, limit: 10, sort: 'added_on', order: 'desc' },\n});\n\n// Update\nawait client.organization.update('ORGANIZATION_ID', {\n  data: {\n    name:    'Acme Corp Updated',\n    number:  '+17418529635',\n    email:   'acme@example.com',\n    website: 'https://acme.example.com',\n    address: '24, Caroline, London, SW19 3QL',\n  },\n});\n\n// Delete\nawait client.organization.delete('ORGANIZATION_ID');\n```\n\n---\n\n<a id=\"content\"></a>\n## 📝 Content\n\n<a id=\"content-model\"></a>\n### 📐 Content Model\n\nA content model (form) defines the structure of a custom content type.\n\n```js\n// Create a form\nawait client.contentModel.create({\n  data: {\n    name:        'Test Module',\n    meta:        'form_meta',\n    description: 'Created via SDK',\n    type:        'MF',\n    features: {\n      activity:           true,\n      note:               true,\n      document:           true,\n      audit_trail:        true,\n      import_excel:       false,\n      export_excel:       true,\n      language_meta:      ['EN'],\n      status:             true,\n      label:              true,\n      pricing:            true,\n      content_visibility: false,\n      aurastride_form:    false,\n    },\n  },\n});\n\n// Read forms\nconst models = await client.contentModel.read({\n  filter:     { search_by: 'ALL', search: '' },\n  pagination: { page: 1, limit: 100, sort: 'added_on', order: 'asc' },\n});\n\n// Update a form\nawait client.contentModel.update('form_meta', {\n  data: {\n    name:        'Updated Module Name',\n    description: 'Updated via SDK',\n    features: { aurastride_form: false, activity: false, document: false },\n  },\n});\n\n// Delete a form\nawait client.contentModel.delete('form_meta');\n```\n\n<a id=\"content-field\"></a>\n### 📑 Content Field\n\nCustom fields (tabs, groups, fields) define the schema of a content model.\n\n```js\n// Create tabs, groups, and fields\nawait client.contentField.create('form_meta', {\n  tab: [\n    { meta: 'overview_sdk', name: 'Overview', note: 'Overview tab' },\n  ],\n  group: [\n    {\n      meta: 'primary_grp',\n      name: 'Primary Details',\n      note: 'Primary Details group',\n      hierarchy: { tab: { meta: 'overview_sdk' } },\n    },\n  ],\n  field: [\n    {\n      meta:     'prname_fld',\n      name:     'Name',\n      type:     'TB',\n      note:     'Name field',\n      required: true,\n      unique:   true,\n      hierarchy: { group: { meta: 'primary_grp' } },\n    },\n  ],\n});\n\n// Read field definitions\nconst fields = await client.contentField.read('form_meta', {\n  filter:     { search_by: 'ALL', search: '' },\n  pagination: { page: 1, limit: 50, sort: 'added_on', order: 'desc' },\n});\n\n// Update field definitions\nawait client.contentField.update('form_meta', {\n  field: [\n    { meta: 'prname_fld', name: 'Name Updated' },\n  ],\n}, 'language_meta'); // Optional language_meta (E.g. 'EN', 'FR'); use a language meta from client.language.read().\n\n// Rename a field's meta key\nawait client.contentField.updateMeta('form_meta', {\n  field: [\n    { index: 1, old: 'name', new: 'prmname_fld' },\n  ],\n});\n```\n\n---\n\n<a id=\"field-type-complete-content-field-example\"></a>\n## 📊 Field Type Complete Content Field Example\n\nThe following example demonstrates how to create tabs, groups, and every supported field type in a single `contentField.create` call.\n\n<a id=\"field-types-quick-reference\"></a>\n### ⚡ Field Types Quick Reference\n\n---\n\n<a id=\"text--input\"></a>\n#### 🔤 Text & Input\n\n| 🏷️ Code | 📌 Name | 📄 Description |\n|---|---|---|\n| `TB` | Single Line | Basic input for short, unformatted text. Use when the data does not require paragraphs or special formatting. |\n| `TB-NM` | Number | Captures numerical (mathematical) data only — no letters or symbols. |\n| `TB-SL` | Slug | Generates a URL-safe string from text (e.g. `my-first-post`). |\n| `TA` | Multi Line | Multi-line plain-text input for medium-to-long content without formatting. |\n| `EM` | Email | Captures and validates internet email addresses. |\n| `PH` | Phone Number | Captures, formats, and validates international telephone numbers. |\n\n```js\n// TB - Single Line\n{ meta: 'title', name: 'Title', type: 'TB', required: true, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n\n// TB-NM - Number\n{ meta: 'price', name: 'Price', type: 'TB-NM', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n\n// TB-SL - Slug\n{ meta: 'slug', name: 'Slug', type: 'TB-SL', required: true, unique: true,\n  hierarchy: { group: { meta: 'my_group' } }, dependencies: { slug_meta: ''} }\n\n// TA - Multi Line\n{ meta: 'description', name: 'Description', type: 'TA', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n\n// EM - Email\n{ meta: 'email', name: 'Email', type: 'EM', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n\n// PH - Phone Number\n{ meta: 'phone', name: 'Phone Number', type: 'PH', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n```\n\n---\n\n<a id=\"selection--choice\"></a>\n#### ☑️ Selection & Choice\n\n> [!TIP]\n> All choice-based fields (`DD`, `DM`, `CK`, `RB`) require a `values` array to define the available options.  \n> Each option has three properties:  \n> - `meta` — unique key for the option (used internally by the API)  \n> - `name` — display label shown to content authors  \n> - `default` — `true` to pre-select this option, `false` otherwise  \n>\n> `BL` (Boolean) does not use `values` — it always stores `true` or `false`.\n\n| 🏷️ Code | 📌 Name | 📄 Description |\n|---|---|---|\n| `DD` | Single Selection | Dropdown that allows selecting exactly one option from a predefined list. |\n| `DM` | Multiple Selection | Dropdown that allows selecting one or more options at the same time. |\n| `CK` | Checkbox | Binary Yes/No toggle, or a visible group for multi-choice selections. |\n| `RB` | Radio Button | Presents a small set of mutually exclusive options — selecting one deselects the rest. |\n| `BL` | Boolean | Stores a strict `true` / `false` value (saved as `1` or `0` in the database). |\n\n```js\n// DD - Single Selection\n{ meta: 'status', name: 'Status', type: 'DD', required: true, unique: false,\n  hierarchy: { group: { meta: 'my_group' } },\n  values: [\n    { meta: 'draft',     name: 'Draft',     default: true  },\n    { meta: 'published', name: 'Published', default: false },\n  ]\n }\n\n// DM - Multiple Selection\n{ meta: 'tags', name: 'Tags', type: 'DM', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } },\n  values: [\n    { meta: 'tag_news',  name: 'News',  default: false },\n    { meta: 'tag_blog',  name: 'Blog',  default: true  },\n    { meta: 'tag_video', name: 'Video', default: false },\n  ]\n }\n\n// CK - Checkbox\n{ meta: 'features', name: 'Features', type: 'CK', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } },\n  values: [\n    { meta: 'wifi',     name: 'WiFi',     default: true  },\n    { meta: 'parking',  name: 'Parking',  default: false },\n    { meta: 'pool',     name: 'Pool',     default: false },\n  ]\n }\n\n// RB - Radio Button\n{ meta: 'priority', name: 'Priority', type: 'RB', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } },\n  values: [\n    { meta: 'low',    name: 'Low',    default: false },\n    { meta: 'medium', name: 'Medium', default: true  },\n    { meta: 'high',   name: 'High',   default: false },\n  ]\n }\n\n// BL - Boolean\n{ meta: 'is_active', name: 'Is Active', type: 'BL', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n```\n\n---\n\n<a id=\"date--time\"></a>\n#### 📅 Date & Time\n\n| 🏷️ Code | 📌 Name | 📄 Description |\n|---|---|---|\n| `DP` | Date Picker | Captures a specific calendar date and time. Enables scheduling and sorting. |\n| `DR` | Date Range | Dual-input capturing a start date and an end date together. |\n| `TP` | Time Picker | Captures a specific time of day independently of a calendar date. |\n| `TR` | Time Range | Dual-input capturing a start time and end time within a single day. |\n\n```js\n// DP - Date Picker\n{ meta: 'published_on', name: 'Published On', type: 'DP', required: true, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n\n// DR - Date Range\n{ meta: 'event_dates', name: 'Event Dates', type: 'DR', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n\n// TP - Time Picker\n{ meta: 'open_time', name: 'Opening Time', type: 'TP', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n\n// TR - Time Range\n{ meta: 'shift_hours', name: 'Shift Hours', type: 'TR', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n```\n\n---\n\n<a id=\"rich-content--media\"></a>\n#### 🎨 Rich Content & Media\n\n| 🏷️ Code | 📌 Name | 📄 Description |\n|---|---|---|\n| `ED` | Editor (Rich Text) | WYSIWYG field for long-form formatted content (bold, headers, bullet points, links, media). |\n| `FL-PB` | Public Asset File | Stores files accessible via a public URL or CDN — anyone can view or download. |\n| `FL-PV` | Private Asset File | Stores files behind authentication/signed tokens — not accessible by the public. |\n\n```js\n// ED - Editor\n{ meta: 'body', name: 'Body', type: 'ED', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n\n// FL-PB - Public Asset File\n{ meta: 'cover_image', name: 'Cover Image', type: 'FL-PB', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n\n// FL-PV - Private Asset File\n{ meta: 'contract_pdf', name: 'Contract PDF', type: 'FL-PV', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n```\n\n---\n\n<a id=\"special\"></a>\n#### ✨ Special\n\n| 🏷️ Code | 📌 Name | 📄 Description |\n|---|---|---|\n| `LC` | Location | Captures latitude, longitude, and a human-readable address for map pinning and distance calculations. |\n| `HF` | Hidden Field | Stores system-generated data not visible to content authors (e.g. tracking IDs, computed values). |\n| `JN` | JSON | Stores a free-form JSON object or array. Use when the data has a flexible or nested structure that does not fit any other field type. |\n\n```js\n// LC - Location\n{ meta: 'office_location', name: 'Office Location', type: 'LC', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n\n// HF - Hidden Field\n{ meta: 'tracking_id', name: 'Tracking ID', type: 'HF', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n\n// JN - JSON\n{ meta: 'json_data', name: 'JSON Data', type: 'JN', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n```\n\n---\n\n<a id=\"relation---entities\"></a>\n#### 🔗 Relation - Entities\n\n> [!NOTE]\n> **How it works — two steps:**\n>\n> **Step 1 — Point to the target Content Model**  \n> Set `dependencies.form_meta` to the `meta` of the content model you want to link to.  \n> Ensure that this target content model already exists before creating the field.\n>\n> **Step 2 — Select records at content entry time**  \n> Once the field is created, authors can use it while creating or editing a content entry. They will be able to search for and select records from the linked content model.  \n> The field stores the selected record's identifier:\n> - **One-to-One (`OT`):** stores a single `content_id`\n> - **One-to-Many (`OM`):** stores an array of `content_id` values\n>\n> **Important notes:**\n> - Self-referencing is not supported. You cannot use the same content model's `meta` as the target.\n> - `dependencies.form_meta` must always point to a **different** content model.\n> - When mapping related entities, ensure that the required data is first created in the target model. Only after that should you link it by storing its `content_id` in this field.\n\n| 🏷️ Code | 📌 Name | 📄 Description |\n|---|---|---|\n| `OT` | Related Entities (One to One) | Links a content entry to exactly one entry in the target content model. |\n| `OM` | Related Entities (One to Many) | Links a content entry to multiple entries in the target content model. |\n\n```js\n// OT - Related Entity (One to One)\n// Set dependencies.form_meta to the meta of the target content model\n{ meta: 'author', name: 'Author', type: 'OT', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } },\n  dependencies: { form_meta: 'target_content_model_meta' } }\n\n// OM - Related Entity (One to Many)\n// Set dependencies.form_meta to the meta of the target content model\n{ meta: 'related_products', name: 'Related Products', type: 'OM', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } },\n  dependencies: { form_meta: 'target_content_model_meta' } }\n```\n\n---\n\n<a id=\"relation---system-users\"></a>\n#### 👤 Relation - System Users\n\n> [!NOTE]\n> The selectable users for `OU` and `MU` fields are pulled directly from your **System Users** list — these are the internal team members, administrators, and staff accounts registered in your aurastride platform (accessible via `client.user.read()`).  \n> No extra configuration is needed; the field automatically presents the system user list when authors fill in a content entry.\n\n| 🏷️ Code | 📌 Name | 📄 Description |\n|---|---|---|\n| `OU` | System User (One to One) | Links a content entry to exactly one authenticated system user (team member, admin). |\n| `MU` | System User (One to Many) | Links a content entry to multiple authenticated system users for collaboration or access control. |\n\n```js\n// OU - System User (One to One)\n{ meta: 'assigned_to', name: 'Assigned To', type: 'OU', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n\n// MU - System User (One to Many)\n{ meta: 'reviewers', name: 'Reviewers', type: 'MU', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n```\n\n---\n\n<a id=\"relation---crm-contacts\"></a>\n#### 📇 Relation - CRM Contacts\n\n> [!IMPORTANT]\n> **CMS Use Only:** These fields are available exclusively inside **CMS content models** — they are not used within the CRM module itself.  \n> They let a CMS content entry reference one or more existing CRM Contact records, creating a bridge between your content and your customer data.  \n> The selectable contacts come from your CRM Contacts list (accessible via `client.contact.read()`).\n\n| 🏷️ Code | 📌 Name | 📄 Description |\n|---|---|---|\n| `OC` | Contacts (One to One) | Links a content entry to exactly one CRM contact profile. |\n| `MC` | Contacts (One to Many) | Links a content entry to multiple CRM contact profiles. |\n\n```js\n// OC - Contact (One to One)\n{ meta: 'primary_contact', name: 'Primary Contact', type: 'OC', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n\n// MC - Contact (One to Many)\n{ meta: 'attendees', name: 'Attendees', type: 'MC', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n```\n\n---\n\n<a id=\"relation---crm-leads\"></a>\n#### 🎯 Relation - CRM Leads\n\n> [!IMPORTANT]\n> **CMS Use Only:** These fields are available exclusively inside **CMS content models** — they are not used within the CRM module itself.  \n> They let a CMS content entry reference one or more existing CRM Lead records, creating a bridge between your content and your sales pipeline data.  \n> The selectable leads come from your CRM Leads list (accessible via `client.lead.read()`).\n\n| 🏷️ Code | 📌 Name | 📄 Description |\n|---|---|---|\n| `OL` | Leads (One to One) | Links a content entry to exactly one CRM lead (prospective customer not yet converted). |\n| `ML` | Leads (One to Many) | Links a content entry to multiple CRM leads (e.g. a campaign targeting multiple prospects). |\n\n```js\n// OL - Lead (One to One)\n{ meta: 'quote_lead', name: 'Quote Lead', type: 'OL', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n\n// ML - Lead (One to Many)\n{ meta: 'campaign_leads', name: 'Campaign Leads', type: 'ML', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } } }\n```\n\n---\n\n<a id=\"repeaters-cms-only\"></a>\n#### 🔄 Repeaters (CMS Only)\n\n| 🏷️ Code | 📌 Name | 📐 `fields` shape | 📄 Description |\n|---|---|---|---|\n| `SR` | Single Repeater | single object | Dynamic list with exactly one repeating field type (e.g. a list of text entries). |\n| `GR` | Group Repeater | array of objects | Dynamic list where each row contains multiple field types bundled as a cohesive block. |\n\n> [!NOTE]\n> **Supported child field types for both SR and GR:**  \n> `TB` `TA` `ED` `TB-NM` `EM` `PH` `DD` `DM` `FL-PB` `FL-PV` `RB` `CK` `DP` `DR` `TP` `TR` `OU` `OM` `LC`\n\n```js\n// SR - Single Repeater (one child field type only)\n{ meta: 'image_gallery', name: 'Image Gallery', type: 'SR', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } },\n  fields: {\n    meta: 'gallery_image', name: 'Image', type: 'FL-PB', required: false, unique: false,\n    hierarchy: { group: { meta: 'my_group' } },\n  } }\n\n// GR - Group Repeater (multiple field types per row)\n{ meta: 'faq_list', name: 'FAQ List', type: 'GR', required: false, unique: false,\n  hierarchy: { group: { meta: 'my_group' } },\n  fields: [\n    { meta: 'faq_question', name: 'Question', type: 'TB', required: true, unique: false,\n      hierarchy: { group: { meta: 'my_group' } } },\n    { meta: 'faq_answer', name: 'Answer', type: 'TA', required: false, unique: false,\n      hierarchy: { group: { meta: 'my_group' } } },\n  ] }\n```\n\n---\n\n<a id=\"full-example\"></a>\n### 💡 Full Example\n\n> [!TIP]\n> **Runnable Example File:** [`examples/aurastride-sdk/content-field/create-full-example.js`](../../examples/aurastride-sdk/content-field/create-full-example.js)  \n> Creates all tabs, groups, and every field type in one call.  \n> To create a matching content entry with values for every field, see [`examples/aurastride-sdk/content-hub/create-full-example.js`](../../examples/aurastride-sdk/content-hub/create-full-example.js).\n\n```js\nawait client.contentField.create('22052', {\n\n  // --- Tabs ---\n  tab: [\n    {\n      meta: 'overview',\n      name: 'Overview',\n      note: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.\\nSed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',\n    },\n    {\n      meta: 'basic_element',\n      name: 'Basic Element',\n      note: 'This is Tab you can choose which ever you want',\n    },\n    {\n      meta: 'date_time_tab',\n      name: 'Date Time Tab',\n      note: 'This is Date and Time Tab',\n    },\n    {\n      meta: 'other_tab',\n      name: 'Other Tab',\n      note: 'This is sample Other Tab',\n    },\n  ],\n\n  // --- Groups ---\n  group: [\n    {\n      meta:      'primary_details',\n      name:      'Primary Details',\n      note:      '',\n      hierarchy: { tab: { meta: 'overview' } },\n    },\n    {\n      meta:      'basic_element_group',\n      name:      'Basic Element Group',\n      note:      'This is Tab wise group you need to change base of your need',\n      hierarchy: { tab: { meta: 'basic_element' } },\n    },\n    {\n      meta:      'date_time_element_group',\n      name:      'Date & Time Element',\n      note:      'This is Group for Date and Time Group',\n      hierarchy: { tab: { meta: 'date_time_tab' } },\n    },\n    {\n      meta:      'other_group',\n      name:      'Other Group',\n      note:      'This is Sample Other Group data',\n      hierarchy: { tab: { meta: 'other_tab' } },\n    },\n  ],\n\n  // --- Fields ---\n  field: [\n\n    // TEXT & INPUT\n    // TB - Single-line text\n    {\n      meta: 'text_box', name: 'Text Box', type: 'TB',\n      note:     'A Text Box (TB) CMS field is a basic input field used to capture short, unformatted text.',\n      required: true, unique: true,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n    },\n\n    // TB-NM - Number\n    {\n      meta: 'number_field', name: 'Number Field', type: 'TB-NM',\n      note:     'A Number (TB-NM) field captures numerical data.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n    },\n\n    // TB-SL - Slug\n    {\n      meta: 'slug_field', name: 'Slug', type: 'TB-SL',\n      note:     'A Slug (TB-SL) field generates a URL-safe string from text.',\n      required: true, unique: true,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n      dependencies: { slug_meta: '' },\n    },\n\n    // TA - Multi-line text\n    {\n      meta: 'textarea_field', name: 'Text Area', type: 'TA',\n      note:     'A Text Area (TA) CMS field is a multi-line plain-text input.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n    },\n\n    // EM - Email\n    {\n      meta: 'email', name: 'Email', type: 'EM',\n      note:     'A Email (EM) CMS field captures and validates email addresses.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n    },\n\n    // PH - Phone Number\n    {\n      meta: 'phone_number', name: 'Phone Number', type: 'PH',\n      note:     'A Phone Number (PH) CMS field captures international telephone numbers.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n    },\n\n    // SELECTION & CHOICE\n    // DD - Single Selection / Dropdown\n    {\n      meta: 'single_selection', name: 'Single Selection', type: 'DD',\n      note:     'A Single Selection / Dropdown (DD) CMS field selects exactly one option from a list.',\n      required: true, unique: true,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n      values: [\n        { meta: 'options_1', name: 'Option 1', default: false },\n        { meta: 'option_2',  name: 'Option 2', default: true  },\n        { meta: 'options_3', name: 'Option 3', default: false },\n      ],\n    },\n\n    // DM - Multi Selection / Dropdown Multiple\n    {\n      meta: 'multi_selection', name: 'Multi Selection', type: 'DM',\n      note:     'A Multi-Selection / Dropdown Multiple (DM) CMS field selects one or more options.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n      values: [\n        { meta: 'mutli_selection_1', name: 'Multi Selection 1', default: false },\n        { meta: 'mutli_selection_2', name: 'Multi Selection 2', default: true  },\n        { meta: 'mutli_selection_3', name: 'Multi Selection 3', default: false },\n        { meta: 'mutli_selection_4', name: 'Multi Selection 4', default: true  },\n      ],\n    },\n\n    // CK - Checkbox\n    {\n      meta: 'checkbox', name: 'Checkbox', type: 'CK',\n      note:     'A Checkbox (CK) CMS field acts as a binary switch or a visible multi-choice group.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n      values: [\n        { meta: 'checkbox_1', name: 'Checkbox 1', default: false },\n        { meta: 'checkbox_2', name: 'Checkbox 2', default: true  },\n        { meta: 'checkbox_3', name: 'Checkbox 3', default: false },\n        { meta: 'checkbox_5', name: 'Checkbox 5', default: true  },\n      ],\n    },\n\n    // RB - Radio Button\n    {\n      meta: 'radio_button', name: 'Radio Button', type: 'RB',\n      note:     'A Radio Button (RB) CMS field presents mutually exclusive options.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n      values: [\n        { meta: 'radio_button1', name: 'Radio Button 1', default: false },\n        { meta: 'radio_button2', name: 'Radio Button 2', default: true  },\n        { meta: 'radio_button3', name: 'Radio Button 3', default: false },\n      ],\n    },\n\n    // BL - Boolean\n    {\n      meta: 'boolean', name: 'Boolean', type: 'BL',\n      note:     'A Boolean (BL) CMS field stores a strict true / false value.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'other_group' } },\n    },\n\n    // DATE & TIME\n    // DP - Date Picker\n    {\n      meta: 'date_picker', name: 'Date Picker', type: 'DP',\n      note:     'A Date Picker (DP) CMS field captures a specific calendar date.',\n      required: true, unique: true,\n      hierarchy:    { group: { meta: 'date_time_element_group' } },\n    },\n\n    // DR - Date Range Picker\n    {\n      meta: 'date_range_picker', name: 'Date Range Picker', type: 'DR',\n      note:     'A Date Range Picker (DR) CMS field captures a start date and end date.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'date_time_element_group' } },\n    },\n\n    // TP - Time Picker\n    {\n      meta: 'time_picker', name: 'Time Picker', type: 'TP',\n      note:     'A Time Picker (TP) CMS field captures a specific time of day.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'date_time_element_group' } },\n    },\n\n    // TR - Time Range Picker\n    {\n      meta: 'time_range_picker', name: 'Time Range Picker', type: 'TR',\n      note:     'A Time Range Picker (TR) CMS field captures a start time and end time.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'date_time_element_group' } },\n    },\n\n    // RICH CONTENT & MEDIA\n    // ED - Rich Text Editor\n    {\n      meta: 'editor', name: 'Editor', type: 'ED',\n      note:     'An Editor (ED) CMS field is a rich text / WYSIWYG field for long-form content.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n    },\n\n    // FL-PB - Public Asset File\n    {\n      meta: 'public_file_field', name: 'Public Asset File', type: 'FL-PB',\n      note:     'A Public Asset File (FL-PB) CMS field stores files served via public URL / CDN.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n    },\n\n    // FL-PV - Private Asset File\n    {\n      meta: 'private_file_field', name: 'Private Asset File', type: 'FL-PV',\n      note:     'A Private Asset File (FL-PV) CMS field stores files behind signed / authenticated URLs.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n    },\n\n    // SPECIAL\n    // LC - Location\n    {\n      meta: 'location', name: 'Location', type: 'LC',\n      note:     'A Location (LC) CMS field captures latitude, longitude, and a human-readable address.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'other_group' } },\n    },\n\n    // HF - Hidden Field\n    {\n      meta: 'hidden_field', name: 'Hidden Field', type: 'HF',\n      note:     'A Hidden Field (HF) CMS field stores system-generated data not visible to authors.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'other_group' } },\n    },\n\n    // JN - JSON\n    {\n      meta: 'json_data', name: 'JSON Data', type: 'JN',\n      note:     'A JSON (JN) CMS field stores a free-form JSON object or array for flexible or nested data structures.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'other_group' } },\n    },\n\n    // RELATION - ENTITIES\n\n    // OT - Related Entity (One-to-One)\n    {\n      meta: 'related_entity_one_to_one', name: 'Related Entity (One-to-One)', type: 'OT',\n      note:     'A Related Entity One-to-One (OT) CMS field links to exactly one entry in another content model.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n      dependencies: {  form_meta: '#form_meta' },\n    },\n\n    // OM - Related Entity (One-to-Many)\n    {\n      meta: 'related_entity_one_many', name: 'Related Entity (One-to-Many)', type: 'OM',\n      note:     'A Related Entity One-to-Many (OM) CMS field links to multiple entries in another content model.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n      dependencies: {  form_meta: '2525252' },\n    },\n\n    // RELATION - SYSTEM USERS\n\n    // OU - System User (One-to-One)\n    {\n      meta: 'system_user', name: 'System User (One-to-One)', type: 'OU',\n      note:     'A System User One-to-One (OU) CMS field links to exactly one system user account.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'other_group' } },\n    },\n\n    // MU - System User (One-to-Many)\n    {\n      meta: 'system_user_one_to_many', name: 'System User (One-to-Many)', type: 'MU',\n      note:     'A System User One-to-Many (MU) CMS field links to multiple system user accounts.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'other_group' } },\n    },\n\n    // RELATION - CRM CONTACTS\n\n    // OC - Contact (One-to-One)\n    {\n      meta: 'contact_one_to_one', name: 'Contact (One-to-One)', type: 'OC',\n      note:     'A Contact One-to-One (OC) CMS field links to exactly one CRM contact.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'other_group' } },\n    },\n\n    // MC - Contact (One-to-Many)\n    {\n      meta: 'contact_one_to_many', name: 'Contact (One-to-Many)', type: 'MC',\n      note:     'A Contact One-to-Many (MC) CMS field links to multiple CRM contacts.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'other_group' } },\n    },\n\n    // RELATION - CRM LEADS\n\n    // OL - Lead (One-to-One)\n    {\n      meta: 'lead_one_to_one', name: 'Lead (One-to-One)', type: 'OL',\n      note:     'A Lead One-to-One (OL) CMS field links to exactly one CRM lead.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'other_group' } },\n    },\n\n    // ML - Lead (One-to-Many)\n    {\n      meta: 'lead_one_to_many', name: 'Lead (One-to-Many)', type: 'ML',\n      note:     'A Lead One-to-Many (ML) CMS field links to multiple CRM leads.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'other_group' } },\n    },\n\n    // REPEATERS (CMS ONLY)\n\n    // SR - Single Repeater\n    // `fields` is a single object - only one child field type is allowed per SR.\n    {\n      meta: 'single_repeater', name: 'Single Repeater', type: 'SR',\n      note:     'A Single Repeater (SR) CMS field creates a dynamic list with one repeating field type.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n      fields: {\n        meta: 'sr_text_item', name: 'Text Item', type: 'TB',\n        note:     'Repeating text entry.',\n        required: true, unique: true,\n        hierarchy:    { group: { meta: 'basic_element_group' } },\n      },\n    },\n\n    // GR - Group Repeater\n    // `fields` is an array - each row repeats the entire set of child fields.\n    {\n      meta: 'group_repeater', name: 'Group Repeater', type: 'GR',\n      note:     'A Group Repeater (GR) CMS field creates a dynamic list where each row contains multiple field types.',\n      required: false, unique: false,\n      hierarchy:    { group: { meta: 'basic_element_group' } },\n      fields: [\n        {\n          meta: 'gr_text_item', name: 'Text Item', type: 'TB',\n          note:     'Text column in repeater row.',\n          required: true, unique: false,\n          hierarchy:    { group: { meta: 'basic_element_group' } },\n        },\n        {\n          meta: 'gr_date_item', name: 'Date Item', type: 'DP',\n          note:     'Date column in repeater row.',\n          required: false, unique: false,\n          hierarchy:    { group: { meta: 'basic_element_group' } },\n        },\n      ],\n    },\n\n  ],\n});\n```\n\n---\n\n<a id=\"content-hub\"></a>\n### 🗂️ Content Hub\n\nContent hub stores the actual records for any content model.\n\n> [!TIP]\n> **Full field type example:** See [`examples/aurastride-sdk/content-hub/create-full-example.js`](../../examples/aurastride-sdk/content-hub/create-full-example.js) for a complete `contentHub.create` call that covers every supported field type (text, selection, date/time, rich content, location, all relation types, and repeaters).  \n> The companion content field definition lives in [`examples/aurastride-sdk/content-field/create-full-example.js`](../../examples/aurastride-sdk/content-field/create-full-example.js).\n\n```js\n// Create a content entry\nconst entry = await client.contentHub.create('form_meta', {\n  meta: {\n    title:       'My Entry',\n    shared_with: [1, 2],\n    pname_field: 'SDK test',\n  },\n});\n\n// Read entries with filtering and pagination\nconst entries = await client.contentHub.read('form_meta', {\n  filter:     { search_by: 'ALL', search: '' },\n  pagination: { page: 1, limit: 10, sort: 'added_on', order: 'desc' },\n});\n\n// Update an entry\nawait client.contentHub.update('form_meta', 'CONTENT_ID', {\n  meta: { title: 'My Entry - Updated', pname_field: 'SDK test - Updated' },\n}, 'language_meta');  // Optional language_meta (E.g. 'EN', 'FR'); use a language meta from client.language.read().\n\n// Delete an entry\nawait client.contentHub.delete('form_meta', 'CONTENT_ID');\n\n// Verify a password-type field value\nconst ok = await client.contentHub.verifyPassword(\n  'form_meta', 'CONTENT_ID', 'PASSWORD_FIELD_META', '123456'\n);\n```\n\n<a id=\"content-hub-full-field-type-example\"></a>\n#### 📊 Content Hub Full Field Type Example\n\nA complete `contentHub.create` call that covers every supported field type in a single payload.  \nThe content model (tabs, groups, and fields) this example targets is created by the [Full Example](#full-example) in the Field Type reference above, and its standalone runnable version is at [`examples/aurastride-sdk/content-hub/create-full-example.js`](../../examples/aurastride-sdk/content-hub/create-full-example.js).\n\n> [!NOTE]\n> **How to set Relation (Entity) field values**\n>\n> For `OT`, `OM`, `OU`, `MU`, `OC`, `MC`, `OL`, and `ML` fields, you do **not** pass raw data — you pass the **identifier(s)** of records that already exist in the linked source.\n>\n> | 🏷️ Field type | 📄 What to pass | 🔍 How to get the value |\n> |---|---|---|\n> | `OT` — Related Entity (One-to-One) | A single `content_id` string | `client.contentHub.read('target_model_meta')` → pick a record's `content_id` |\n> | `OM` — Related Entity (One-to-Many) | An array of `content_id` strings | Same as above, collect multiple |\n> | `OU` — System User (One-to-One) | A single user ID (integer) | `client.user.read()` → pick a record's `id` |\n> | `MU` — System User (One-to-Many) | An array of user IDs | Same as above, collect multiple |\n> | `OC` — CRM Contact (One-to-One) | A single `contact_id` string | `client.contact.read()` → pick a record's `contact_id` |\n> | `MC` — CRM Contact (One-to-Many) | An array of `contact_id` strings | Same as above, collect multiple |\n> | `OL` — CRM Lead (One-to-One) | A single `lead_id` string | `client.lead.read()` → pick a record's `lead_id` |\n> | `ML` — CRM Lead (One-to-Many) | An array of `lead_id` strings | Same as above, collect multiple |\n>\n> **Prerequisite:** the linked records must exist **before** you create or update the content entry that references them.\n\n```js\nawait client.contentHub.create('22052', {\n  meta: {\n\n    // TEXT & INPUT\n    text_box:       'Sample single-line text',\n    number_field:   42,\n    slug_field:     'sample-single-line-text',\n    textarea_field: 'This is a longer multi-line text.\\nLine two of the text area.',\n    email:          'user@example.com',\n    phone_number:   '+1234567890',\n\n    // SELECTION & CHOICE\n    single_selection: 'option_2',               // DD: single option meta\n    multi_selection:  ['mutli_selection_2', 'mutli_selection_4'], // DM: array of option metas\n    checkbox:         ['checkbox_2', 'checkbox_5'],               // CK: array of option metas\n    radio_button:     'radio_button2',           // RB: single option meta\n    boolean:          true,                      // BL: true or false\n\n    // DATE & TIME\n    date_picker:       '2026-05-15',\n    date_range_picker: { from: '2026-05-01', to: '2026-05-31' },\n    time_picker:       '09:00',\n    time_range_picker: { from: '09:00', to: '17:00' },\n\n    // RICH CONTENT & MEDIA\n    editor:             '<p>This is <strong>rich text</strong> content created via SDK.</p>',\n    public_file_field:  'BASE64_ENCODED_FILE_DATA',\n    private_file_field: 'BASE64_ENCODED_FILE_DATA',\n\n    // SPECIAL\n    location:     { lat: 51.5074, lng: -0.1278, address: '10 Downing Street, London, UK' },\n    hidden_field: 'system-generated-value',\n    json_data:    { key: 'value', tags: ['a', 'b'], nested: { count: 3 } }, // JN: any valid JSON\n\n    // RELATION - ENTITIES\n    related_entity_one_to_one: 'TARGET_CONTENT_ID',                        // OT: single content_id\n    related_entity_one_many:   ['TARGET_CONTENT_ID_1', 'TARGET_CONTENT_ID_2'], // OM: array of content_ids\n\n    // RELATION - SYSTEM USERS\n    system_user:             1,       // OU: single user ID\n    system_user_one_to_many: [1, 2],  // MU: array of user IDs\n\n    // RELATION - CRM CONTACTS\n    contact_one_to_one:  'CONTACT_ID',                       // OC: single contact_id\n    contact_one_to_many: ['CONTACT_ID_1', 'CONTACT_ID_2'],   // MC: array of contact_ids\n\n    // RELATION - CRM LEADS\n    lead_one_to_one:  'LEAD_ID',                   // OL: single lead_id\n    lead_one_to_many: ['LEAD_ID_1', 'LEAD_ID_2'],  // ML: array of lead_ids\n\n    // REPEATERS\n    // SR - array of row objects; each row has one key matching the child field meta\n    single_repeater: [\n      { sr_text_item: 'First repeating text' },\n      { sr_text_item: 'Second repeating text' },\n      { sr_text_item: 'Third repeating text' },\n    ],\n\n    // GR - array of row objects; each row has keys for every child field meta\n    group_repeater: [\n      { gr_text_item: 'What is aurastride?',    gr_date_item: '2026-05-01' },\n      { gr_text_item: 'How does the SDK work?', gr_date_item: '2026-05-10' },\n    ],\n\n  },\n});\n```\n\n---\n\n<a id=\"digital-asset-management\"></a>\n## 🖼️ Digital Asset Management\n\n<a id=\"media-directory\"></a>\n### 📁 Media Directory\n\n```js\n// Create a directory (empty string = root)\nawait client.mediaDirectory.create({\n  directory_id: '',   // '' or parent directory ID to nest\n  name:         'Test SDK Folder',\n});\n\n// Read directories\nconst dirs = await client.mediaDirectory.read({\n  pagination: { page: 1, limit: 20, sort: 'added_on', order: 'desc' },\n});\n\n// Update a directory name\nawait client.mediaDirectory.update('DIRECTORY_ID', { name: 'Updated SDK Folder' });\n\n// Delete a directory\nawait client.mediaDirectory.delete('DIRECTORY_ID');\n```\n\n<a id=\"media\"></a>\n### 🖼️ Media\n\n```js\n// Upload a file (base64) to a directory\nawait client.mediaRepository.create('DIRECTORY_ID', {\n  documents: [\n    { name: 'example.png', data: 'BASE64_STRING' },\n  ],\n  features: { labels: { values: ['1_star'] } },\n});\n\n// Read media files\nconst files = await client.mediaRepository.read({\n  filter:     { added_on: { from: '2026-04-01', to: '2026-04-07' } },\n  pagination: { page: 1, limit: 20, sort: 'added_on', order: 'desc' },\n});\n\n// Update a file's data and advanced metadata\nawait client.mediaRepository.update('MEDIA_ID', {\n  document: { name: 'example.png', data: 'BASE64_STRING' },\n  advanced:   { title: 'example.png', alternativetext: 'example file' },\n});\n\n// Delete a file\nawait client.mediaRepository.delete('MEDIA_ID');\n```\n\n---\n\n<a id=\"features\"></a>\n## ⭐ Features\n\n<a id=\"activity\"></a>\n### 📅 Activity\n\nActivities are events: meetings (`MET`), calls (`CAL`), emails (`EML`), tasks (`TSK`).\n\n```js\n// Create an activity\nawait client.activity.create({\n  name:        'SDK Meeting',\n  description: 'Activity for SDK meeting.',\n  category:    'CAL',\n  start:       { date: '2026-04-01', time: '01:00' },\n  end:         { date: '2026-04-07', time: '02:00' },\n  priority:    'LW',\n  status:      'P',\n  linked_to:   { form_meta: 'form_meta', reference_id: 'CONTENT_ID' },\n  features: {\n    labels:      { values: ['3_star', '4_star'] },\n    visibility:  { assigned_by: [1], assigned_to: [1] },\n    documents: [{ name: 'file.png', data: 'BASE64_STRING' }],\n  },\n});\n\n// Read activities\nconst activities = await client.activity.read({\n  filter:     { search_by: 'ALL', search: '' },\n  pagination: { page: 1, limit: 10, sort: 'added_on', order: 'desc' },\n});\n\n// Update an activity\nawait client.activity.update('ACTIVITY_ID', {\n  name:        'SDK Meeting Updated',\n  description: 'Updated description.',\n  category:    'CAL',\n  start:       { date: '2026-04-01', time: '01:00' },\n  end:         { date: '2026-04-07', time: '02:00' },\n  priority:    'LW',\n  status:      'P',\n  linked_to:   { form_meta: 'form_meta', reference_id: 'CONTENT_ID' },\n  features: {\n    labels:     { values: ['3_star', '4_star'] },\n    visibility: { assigned_by: [1], assigned_to: [1] },\n  },\n});\n\n// Delete an activity\nawait client.activity.delete('ACTIVITY_ID');\n```\n\n<a id=\"status\"></a>\n### 🚦 Status\n\n```js\n// Create a status\nawait client.status.create('form_meta', {\n  name:          'Success',\n  default:       true,\n  note_required: false,\n  bg_color:      '#116b18',\n  fg_color:      '#ffffff',\n});\n\n// Read statuses for a form\nconst statuses = await client.status.read('form_meta', {\n  filter:     { added_on: { from: '2026-04-01', to: '2026-04-30' } },\n  pagination: { page: 1, limit: 20, sort: 'name', order: 'asc' },\n});\n\n// Read statuses applied to specific content records\nconst appliedStatuses = await client.status.readByModule('form_meta', {\n  filter: {\n    content_id: ['CONTENT_ID'],\n    added_on:   { from: '2026-04-01', to: '2026-04-30' },\n    added_by:   [],\n  },\n  pagination: { page: 1, limit: 100, sort: 'added_on', order: 'desc' },\n});\n\n// Update a status\nawait client.status.update('form_meta', 'STATUS_META', {\n  name:  'In Review (Updated)',\n  color: '#FF8C00',\n});\n\n// Apply status to a content record\nawait client.status.apply('form_meta', 'CONTENT_ID', {\n  status_meta: 'STATUS_META',\n  note:        'Status applied via SDK',\n  due_date:    '2026-05-01',\n});\n```\n\n<a id=\"label-group\"></a>\n### 🏷️ Label Group\n\n```js\n// Create label groups for a form/module\nawait client.labelGroup.create('form_meta', {\n  group: [{ name: 'Priority' }],\n});\n\n// Read label groups\nconst groups = await client.labelGroup.read({\n  pagination: { page: 1, limit: 20, sort: 'added_on', order: 'desc' },\n});\n\n// Update a label group (provide meta key from dropdown)\nawait client.labelGroup.update('form_meta', {\n  group: [{ meta: 'priority', name: 'Priority Level' }],\n}, 'language_meta');  // Optional language_meta (E.g. 'EN', 'FR'); use a language meta from client.language.read().\n\n// Delete a label group\nawait client.labelGroup.delete('form_meta', { meta: 'priority' });\n```\n\n<a id=\"label\"></a>\n### 🏷️ Label\n\nLabels are tags that can be attached to content records.\n\n```js\n// Create a label group with labels\nawait client.label.create('form_meta', {\n  group: [{ name: 'Star' }],\n  label: [\n    { meta: '1star', name: '1 Star' },\n    { meta: '2star', name: '2 Star' },\n    { meta: '3star', name: '3 Star' },\n    { meta: '4star', name: '4 Star' },\n    { meta: '5star', name: '5 Star' },\n  ],\n});\n\n// Read labels\nconst labels = await client.label.read('form_meta', {\n  hierarchy:  true,\n  pagination: { page: 1, limit: 20, sort: 'name', order: 'asc' },\n});\n\n// Read labels available for a specific module / content record\nconst moduleLabels = await client.label.readByModule('form_meta', {\n  filter: {\n    content_id: 'CONTENT_ID',\n    added_on:   { from: '2026-04-01', to: '2026-04-30' },\n  },\n  pagination: { page: 1, limit: 100, sort: 'labels.values.name', order: 'desc' },\n});\n\n// Update a label group and labels\nawait client.label.update('form_meta', {\n  group: [{ meta: 'LABEL_GROUP_META', name: 'Stars' }],\n  label: [\n    { meta: '1_star', name: '1 Star (*)' },\n    { meta: '2_star', name: '2 Stars (**)' },\n  ],\n}, 'language_meta');  // Optional language_meta (E.g. 'EN', 'FR'); use a language meta from client.language.read().\n\n// Delete a label by its meta\nawait client.label.delete('form_meta', { label_meta: 'LABEL_META' });\n\n// Assign labels to a content record\nawait client.label.apply('form_meta', 'CONTENT_ID', ['1_star', '2_star']);\n\n// Remove assigned labels\nawait client.label.removeApplied('form_meta', 'CONTENT_ID', ['1_star']);\n```\n\n<a id=\"notes\"></a>\n### 📝 Notes\n\n```js\n// Create a note with optional file attachments\nawait client.note.create('form_meta', 'CONTENT_ID', {\n  note:        'This is a test note created via the SDK.',\n  documents: {\n    documents: [{ name: 'example.png', data: 'BASE64_STRING' }],\n  },\n});\n\n// Read notes\nconst notes = await client.note.read('form_meta', {\n  filter:     { content_id: 'CONTENT_ID' },\n  pagination: { page: 1, limit: 10, sort: 'added_on', order: 'desc' },\n});\n```\n\n<a id=\"documents\"></a>\n### 📄 Documents\n\n```js\n// Read documents attached to a content record\nconst docs = await client.document.read('form_meta', 'CONTENT_ID', {\n  filter:     { added_on: { from: '2026-04-01', to: '2026-04-08' } },\n  pagination: { page: 1, limit: 20, sort: 'LTS', order: 'desc' },\n});\n\n// Delete a specific document\nawait client.document.delete('form_meta', 'CONTENT_ID', 'DOCUMENT_ID');\n```\n\n<a id=\"pricing\"></a>\n### 💰 Pricing\n\n```js\n// Create a pricing entry\nawait client.pricing.create('form_meta', 'CONTENT_ID', {\n  currency: { meta: 'USD', cost: '99.99' },\n  note:     'Pricing entry created via SDK',\n});\n\n// Read pricing records\nconst prices = await client.pricing.read('form_meta', {\n  filter:     { content_id: ['CONTENT_ID'] },\n  pagination: { page: 1, limit: 20, sort: 'added_on', order: 'desc' },\n});\n```\n\n<a id=\"manage-feature\"></a>\n### 🎛️ Manage Feature\n\n```js\n// Enable / update a feature on a content record\nawait client.manageFeature.manageContent('form_meta', 'CONTENT_ID', {\n  feature: {\n    code: 'LABEL',\n    data: { count: 1, value: '120', other: {} },\n  },\n});\n\n// Update a feature configuration for a marketplace app\nawait client.manageFeature.manageApp('APP_ID', 'form_meta', 'CONTENT_ID', {\n  feature: {\n    data: { count: 1, value: '120', other: {} },\n  },\n});\n```\n\n---\n\n<a id=\"notification\"></a>\n## 🔔 Notification\n\n<a id=\"announcement\"></a>\n### 📢 Announcement\n\n```js\n// Send an in-platform notification to users\nawait client.notification.create({\n  title:        'Hello!',\n  user_ids:     [5, 27],\n  content:      '<p>Welcome to the platform!</p>',\n  from_date:    '2026-04-20',\n  type:         'SUCES',   // SUCES | INFO | WARN | DANGE\n  display_type: 'DASH',\n});\n```\n\n<a id=\"timeline\"></a>\n### ⏱️ Timeline\n\n```js\n// Create a timeline / notification entry\nawait client.timeline.create(\n  'form_meta',\n  'CONTENT_ID',\n  'USER_ID',\n  'Timeline entry created via SDK.',\n);\n```\n\n---\n\n<a id=\"integration\"></a>\n## 🔌 Integration\n\n<a id=\"webhook\"></a>\n### 🪝 Webhook\n\n```js\n// Create a webhook\nawait client.webhook.create({\n  title:       'CMS Record Creation Hook',\n  description: 'Webhook created from SDK.',\n  action: {\n    event:      'form_meta.CREATE',\n    triggeredon: '',\n    method:     'GET',\n    requesturl: 'https://webhook.example.com/receive',\n  },\n  headers: {\n    basic_auth:  { username: 'admin', password: 'password123' },\n    custom_data: { key: 'x-api-key', value: 'YOUR_API_KEY' },\n  },\n});\n\n// Read webhooks\nconst hooks = await client.webhook.read({\n  filter:     { added_on: { from: '2026-02-01', to: '2026-04-30' } },\n  pagination: { page: 1, limit: 20, sort: 'added_on', order: 'desc' },\n});\n\n// Update a webhook\nawait client.webhook.update('WEBHOOK_ID', {\n  title:       'CMS Record Creation Hook - Updated',\n  description: 'Webhook updated via SDK.',\n  action: {\n    event:      'form_meta.CREATE',\n    triggeredon: '',\n    method:     'GET',\n    requesturl: 'https://webhook.example.com/updated-receive',\n  },\n  headers: {\n    basic_auth:  { username: 'admin', password: 'password123' },\n    custom_data: { key: 'x-api-key', value: 'YOUR_API_KEY' },\n  },\n});\n\n// Delete a webhook\nawait client.webhook.delete('WEBHOOK_ID');\n```\n\n<a id=\"sso-token\"></a>\n### 🔑 SSO To","readmeFilename":"README.md"}