ACMA (App Content Management API)
अंतिम अपडेट: 22 जून 2026
ACMA(App Content Management API) वह API है जिससे उत्पाद में साइन अप किए सदस्य, यानी ServiceUser, Content और Media को सीधे संभालते हैं. इसे ऐसे समझें कि Weegloo User जो काम CMA से कंटेंट पर करता है, वही काम सदस्य अपनी पहचान से करता है. सदस्य ACMA से Content और Media बनाते हैं (Create), पढ़ते हैं (Read), बदलते हैं (Update) और मिटाते हैं (Delete). हर काम की अनुमति की सीमा ServiceUserRole तय करता है.
ACMA कॉल के लिए ServiceLogin द्वारा जारी किया गया Bearer टोकन इस्तेमाल होता है. यह टोकन केवल ACMA और ACDA में मान्य है और CMA, CDA में इस्तेमाल नहीं किया जा सकता (टोकन जारी करने की प्रक्रिया के लिए Auth API देखें). जिस ढाँचे का सदस्य अनुसरण करता है, वह Content Type ACMA में न बनाया जाता है न बदला जाता है. Content Type को Weegloo User CMA में प्रबंधित करता है, और ACMA में Content Type बनाने, बदलने के एंडपॉइंट नहीं हैं.
CMA से अंतर
ACMA, CMA के समकक्ष है पर पहचान, स्वामित्व सीमा, प्रकाशन व्यवहार में अलग है.
| मद | ACMA (ServiceUser) | CMA (Weegloo User) |
|---|---|---|
| पहचान | ServiceLogin में साइन अप किया ServiceUser. अनुमति ServiceUserRole से तय होती है. | Weegloo User. अनुमति SpaceRole से तय होती है. |
| पहुँच सीमा | पढ़ने, बदलने, मिटाने की सीमा ServiceUserRole तय करता है (ACDA की सदस्य-वार पढ़ाई की तरह). रोल नियमों में createdBy को :self पर सेट करने पर वह काम केवल अपने बनाए ज़रिये तक सीमित हो जाता है, और आमतौर पर बदलने, मिटाने पर इसे ऐसे लागू किया जाता है. पढ़ाई में रोल जितना अनुमति दे, उतना दूसरे सदस्यों का ज़रिया भी शामिल हो सकता है. | SpaceRole जितनी अनुमति दे, उस सीमा में पूरे Space के ज़रिए को संभालता है. |
| बनाते समय प्रकाशन | Content, Media बनाने पर तुरंत प्रकाशित हो जाते हैं. अलग से प्रकाशन कॉल नहीं होती. | Content बनाने के बाद अलग प्रकाशन कॉल होने पर ही डिलीवरी पथ पर आता है. |
| मिटाते समय प्रकाशन | मिटाने पर प्रकाशन-रद्द अपने आप साथ हो जाता है. पहले प्रकाशन-रद्द करने की ज़रूरत नहीं. | प्रकाशित अवस्था वाला ज़रिया आमतौर पर पहले प्रकाशन-रद्द करके मिटाया जाता है. |
| अपनी प्रोफ़ाइल | GET /me से देखी जाती है (/spaces/{spaceId}/me नहीं). | GET /me (वर्तमान Weegloo User). |
| Content Type | बनाने, बदलने के एंडपॉइंट नहीं हैं. ढाँचा CMA के अधिकार में है. | Content Type को बनाता, बदलता, प्रकाशित करता है. |
जिस सदस्य का ServiceUser.isAdmin true है, वह केवल दूसरे सदस्यों का ज़रिया मिटाना अतिरिक्त रूप से कर सकता है. यह रोल द्वारा अनुमत कामों के ऊपर जुड़ने वाली अनुमति है, इससे दूसरे सदस्यों के ज़रिये पर बदलने की अनुमति या पढ़ने की अनुमति नहीं बढ़ती. वह भी केवल उस सदस्य के ServiceUserRole द्वारा अनुमत कामों की सीमा में ही संभव है.
ऊपर के व्यवहार (स्वामित्व सीमा, बनाते समय अपने आप प्रकाशन, मिटाते समय अपने आप प्रकाशन-रद्द,
isAdminसीमा) की विस्तृत व्याख्या के लिए ServiceUser लॉगिन (अवधारणा) देखें.
मेरी जानकारी (Me)
GET /me वर्तमान टोकन के ServiceUser की अपनी जानकारी लौटाता है. CMA की तरह Space पथ से गुज़रे बिना /me को सीधे कॉल किया जाता है.
नीचे ServiceUser की प्रतिक्रिया संरचना है. sys में पहचान और साइन-अप जानकारी होती है, और मुख्य भाग में nickname, avatarUrl जैसी प्रदर्शन-उपयोगी विशेषताएँ होती हैं.
{
"sys": {
"id": "3trmXRM3RqbgSnifyg7PSrUm9k2BaZ",
"type": "ServiceUser",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"provider": "google",
"email": "minji.kim@example.com",
"createdAt": "2026-06-17T09:12:03.114Z",
"updatedAt": "2026-06-17T09:12:03.114Z"
},
"nickname": "मिंजी",
"avatarUrl": "https://lh3.googleusercontent.com/a/example-avatar",
"enableLogin": true,
"isAdmin": false
}मुख्य कुंजियाँ:
sys.id: ServiceUser का अद्वितीय पहचानकर्ता है. सदस्य के बनाए Content, Media काcreatedByइसी मान की ओर इशारा करता है.sys.type: रिसोर्स का प्रकार, ServiceUser के लिए हमेशा"ServiceUser"होता है.sys.space: इस सदस्य के Space की ओर इशारा करने वाला संदर्भ है.sys.provider: लॉगिन के लिए इस्तेमाल किया गया प्रदाता है (उदाहरण:google).sys.email: लॉगिन प्रदाता द्वारा दिया गया ईमेल पता है.nickname: सदस्य का प्रदर्शन नाम है (आवश्यक).avatarUrl: प्रोफ़ाइल छवि का पता है (वैकल्पिक).roleOverride: इस सदस्य पर ही कोई अलग ServiceUserRole लागू करते समय उस रोल की ओर इशारा करने वाला संदर्भ है (वैकल्पिक). सेट न करने पर ServiceLogin के डिफ़ॉल्ट रोल का अनुसरण होता है.enableLogin: लॉगिन अनुमति है या नहीं.isAdmin:trueहोने पर दूसरे सदस्यों का ज़रिया मिटाया जा सकता है (ऊपर CMA से अंतर देखें).
बदलाव केवल nickname और avatarUrl का संभव है. provider, email, isAdmin जैसे मान सदस्य सीधे नहीं बदलता.
Content
Content वह व्यक्तिगत ज़रिया है जो Content Type नामक ढाँचे का अनुसरण करता है. कपड़े की दुकान का शॉपिंग मॉल हो तो "उत्पाद" Content Type का अनुसरण करने वाला हर एक उत्पाद Content है. ACMA में सदस्य अपने Content को Space और Content Type से जुड़े पथ (/spaces/{spaceId}/content-types/{contentTypeId}/contents) से संभालते हैं.
नीचे डेमो Space का "उत्पाद" Content एक है.
{
"sys": {
"id": "3trmXRM3RqbgSnifyg7OGhwhlqvAvq",
"type": "Content",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } },
"publish": {
"version": 3,
"at": "2026-06-16T14:35:11.210Z",
"firstAt": "2026-06-15T15:16:20.180Z",
"counter": 3,
"by": { "sys": { "id": "3trmXRM3RqbgSnifyg7PSrUm9k2BaZ", "type": "Refer", "targetType": "ServiceUser" } }
},
"createdBy": { "sys": { "id": "3trmXRM3RqbgSnifyg7PSrUm9k2BaZ", "type": "Refer", "targetType": "ServiceUser" } },
"createdAt": "2026-06-15T15:16:12.151Z",
"updatedAt": "2026-06-16T14:35:11.210Z",
"updatedBy": { "sys": { "id": "3trmXRM3RqbgSnifyg7PSrUm9k2BaZ", "type": "Refer", "targetType": "ServiceUser" } },
"version": 4,
"status": "Published"
},
"fields": {
"price": { "ko-KR": 18000 },
"description": { "ko-KR": "이중 진공 단열로 보온·보냉이 오래갑니다. 500ml 대용량." },
"photo": {},
"productName": { "ko-KR": "스테인리스 텀블러 500ml" }
},
"metadata": { "tags": [] }
}मुख्य कुंजियाँ:
sys.id: Content का अद्वितीय पहचानकर्ता है. एकल देखने, बदलने, मिटाने के पथ के{contentId}में आता है.sys.contentType: यह Content जिस Content Type का अनुसरण करता है, उसकी ओर इशारा करने वाला संदर्भ है.sys.status: प्रकाशन अवस्था है. ACMA में बनाया Content तुरंत प्रकाशित होकरPublishedमें लौटता है.sys.version: रिसोर्स का संस्करण है, हर बदलाव पर 1 बढ़ता है.sys.publish: प्रकाशन इतिहास है (version,at,firstAt,counter,by).fields: हर फ़ील्ड का मान{ apiName: { locale: value } }रूप में रखता है. ऊपर का उदाहरणprice,description,photo,productNameकोko-KRलोकेल में रखता है. जिस फ़ील्ड में मान नहीं है (photo) वह खाली ऑब्जेक्ट है.metadata.tags: इस Content पर लगे Tag की सूची है.
सूची देखना मानक क्वेरी पैरामीटर (limit, skip, next, prev, order, select, include) लेता है, और प्रतिक्रिया items ऐरे और links (पेज कर्सर) को साथ लौटाती है.
Media
Media अपलोड किया गया फ़ाइल संपत्ति है (छवि, वीडियो, दस्तावेज़ आदि). सदस्य को Media बनाने के लिए पहले Upload API से फ़ाइल अपलोड करके Upload प्राप्त करना होता है, और उस Upload की sys.id को Media बनाने के अनुरोध में डालना होता है. Media भी ACMA में बनाने के साथ ही अपने आप प्रकाशित हो जाता है.
नीचे डेमो Space में अपलोड किया गया टम्बलर फ़ोटो Media है.
{
"sys": {
"id": "3trmXRM3RqbgSnifyg7OGjUMsPV3uU",
"type": "Media",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"publish": {
"version": 1,
"at": "2026-06-15T15:17:30.825Z",
"firstAt": "2026-06-15T15:17:30.825Z",
"counter": 1,
"by": { "sys": { "id": "3trmXRM3RqbgSnifyg7PSrUm9k2BaZ", "type": "Refer", "targetType": "ServiceUser" } }
},
"createdBy": { "sys": { "id": "3trmXRM3RqbgSnifyg7PSrUm9k2BaZ", "type": "Refer", "targetType": "ServiceUser" } },
"createdAt": "2026-06-15T15:17:30.589Z",
"updatedAt": "2026-06-15T15:17:30.825Z",
"updatedBy": { "sys": { "id": "3trmXRM3RqbgSnifyg7PSrUm9k2BaZ", "type": "Refer", "targetType": "ServiceUser" } },
"version": 2,
"status": "Published"
},
"fields": {
"title": { "ko-KR": "스테인리스 텀블러 500ml 정면 컷" },
"description": { "ko-KR": "흰 배경에서 찍은 텀블러 정면 제품 사진입니다." },
"file": {
"ko-KR": {
"fileName": "tumbler.png",
"contentType": "image/png",
"mimeGroups": ["Image"],
"url": "https://weegloo-media.com/medias/HnQ32YiH/3uU/3trmXRM3RqbgSnifyg7OGjUMsPV3uU/ko-KR/1/tumbler.png",
"detail": { "size": 50847, "image": { "width": 900, "height": 900 } }
}
}
},
"metadata": { "tags": [] }
}मुख्य कुंजियाँ:
sys.id: Media का अद्वितीय पहचानकर्ता है. एकल देखने, मिटाने के पथ के{mediaId}में आता है, और जब Content किसी फ़ोटो का संदर्भ देता है तो वही मान इशारा करता है.sys.status: प्रकाशन अवस्था है. ACMA में बनाया Media तुरंत प्रकाशित होकरPublishedमें लौटता है.fields.title,fields.description: संपत्ति का शीर्षक, विवरण लोकेल मैप में रखते हैं (वैकल्पिक).fields.file: लोकेल-वार फ़ाइल जानकारी है (आवश्यक). प्रसंस्करण समाप्त होने परurl(डिलीवरी पता),mimeGroups,detail(आकार, छवि रिज़ॉल्यूशन आदि) भर जाते हैं.
Media बनाने के अनुरोध के fields.file में प्रसंस्करण से पहले की अवस्था वाला Upload संदर्भ रखा जाता है. हर फ़ाइल मद में fileName, contentType, mimeGroups, state, upload सभी शामिल होते हैं, और state हमेशा "PENDING" होता है, upload में Upload API से प्राप्त Upload की sys.id डाली जाती है. बनाने के तुरंत बाद प्लेटफ़ॉर्म फ़ाइल को प्रोसेस करता है, और प्रसंस्करण समाप्त होने पर ऊपर की प्रतिक्रिया की तरह url और detail भर जाते हैं.
संबंधित दस्तावेज़
- Auth API: ACMA कॉल में इस्तेमाल होने वाले टोकन को जारी करवाने का OAuth प्रवाह.
- ACDA: सदस्यों को प्रकाशित कंटेंट पहुँचाने वाला पढ़ाई API.
- ServiceUser लॉगिन (अवधारणा): ServiceLogin, ServiceUserRole सेटिंग.
- Upload API: Media बनाने से पहले फ़ाइल अपलोड.
