खोज केवल इस्तेमाल करने पर लोड होती है। नीचे सभी श्रेणियाँ देखें।

सर्वर API संदर्भ

SosoAPI प्रकाशन API: प्रमाणीकरण, अनुरोध और परिणाम

हर गंतव्य के लिए एक Scheduled Post के आधार पर सर्वर-साइड प्रकाशन इंटीग्रेशन बनाएँ। इस संदर्भ में 20 अक्टूबर 2026 को समीक्षा किया गया प्रकाशन API कॉन्ट्रैक्ट है। उदाहरणों में प्लेसहोल्डर हैं और वे इस पेज पर नहीं चलते।

Markdown में पढ़ें

SosoAPI टीम द्वारा समीक्षा ·

1. अपने सर्वर से प्रमाणित करें

SosoAPI App → Settings → Agents & API Access में API key बनाएँ। सर्वर एनवायरनमेंट में SOSOAPI_API_KEY के रूप में रखें। अनुरोध Authorization: Bearer <your-key> और Content-Type: application/json इस्तेमाल करते हैं। वेबसाइट, मोबाइल ऐप बंडल, URL या सार्वजनिक रिपॉज़िटरी में key कभी एम्बेड न करें।

नीचे के सभी एंडपॉइंट JSON बॉडी के साथ POST इस्तेमाल करते हैं। keys और प्रत्यायोजित एजेंट अधिकार अपनी क्षमताओं, अनुमत Workspaces और मालिक की वर्तमान सदस्यता से सीमित हैं। पढ़ने के लिए agent:operate व कम से कम viewer एक्सेस; प्रकाशन बदलाव के लिए agent:publish व कम से कम editor एक्सेस चाहिए। प्राधिकरण मालिक के अधिकार बढ़ा नहीं सकता।

ऐप का वर्तमान वर्कस्पेस और जुड़े खाते इस्तेमाल करें, या इस्तेमाल के लिए अधिकृत IDs खोजने को /identity-api/workspace/list और /identity-api/user/social-accounts/list कॉल करें। ग्राहक के वर्कस्पेस या खाते की ID का अनुमान न लगाएँ।

// Node.js 20+; run only on your server.
const apiKey = process.env.SOSOAPI_API_KEY;
if (!apiKey) throw new Error("Set SOSOAPI_API_KEY on your server");
const apiBase = "https://gqeshlawtcexsapabaui.supabase.co/functions/v1";

async function sosoPost(path, body) {
  const response = await fetch(apiBase + path, {
    method: "POST",
    headers: {
      Authorization: "Bearer " + apiKey,
      "Content-Type": "application/json"
    },
    body: JSON.stringify(body)
  });
  const result = await response.json();
  if (!response.ok) {
    const requestId = result.request_id ?? response.headers.get("x-request-id");
    // Handler errors use code/message; schema-validation 400s instead use
    // success:false and error:{name:"ZodError",message:...}.
    // Preserve status, available code and requestId in server diagnostics.
    // Never log the key or an Authorization header.
    throw new Error("SosoAPI " + response.status + " (" +
      (requestId ?? "no request id") + ")");
  }
  return result;
}

2. प्रकाशन एंडपॉइंट का नक्शा

ये पाथ सर्वर हेल्पर के API base के सापेक्ष हैं। वर्तमान संस्करण, उपलब्ध कार्रवाइयाँ और प्रकाशन परिणाम के लिए Scheduled Post विवरण पढ़ें।

Scheduled Posts एंडपॉइंट; हर अनुरोध POST है
पाथअनुरोधरिस्पॉन्स और सीमा
/studio-api/scheduled-posts/listworkspace_id; वैकल्पिक project_id, status, समय की जोड़ी, limit, cursor।posts, next_cursor, returned_count। Workspace के दायरे में पढ़ना।
/studio-api/scheduled-posts/getid.post, delivery, actions, attempts, outcomes। मौजूदा संस्करण यहाँ पढ़ें।
/studio-api/scheduled-posts/eligibilityworkspace_id, targets; वैकल्पिक include_quota।destinations और वैकल्पिक quota। केवल पढ़ने की पूर्व-जाँच, आरक्षण नहीं।
/studio-api/scheduled-posts/createworkspace_id, सटीक खाता, provider_payload, content, scheduled_at, idempotency_key।post और deduped। नए निर्धारण के लिए 201; मेल खाते पुनः अनुरोध के लिए 200।
/studio-api/scheduled-posts/bulk-createworkspace_id और 1–50 targets, हर एक की अपनी idempotency_key।batch_id, successes, failures। कम से कम एक सफल होने पर 201; कोई सफल न होने पर 422। दोनों ऐरे देखें।
/studio-api/scheduled-posts/updateid, expected_version, patch; वैकल्पिक संगत provider_payload।post। पुराना संस्करण अस्वीकार होता है; गंतव्य अपरिवर्तनीय है।
/studio-api/scheduled-posts/publish-nowid और expected_version।post। तुरंत निष्पादन का अनुरोध करता है; यह प्रकाशन का प्रमाण नहीं है।
/studio-api/scheduled-posts/retryid, expected_version; भविष्य का वैकल्पिक scheduled_at।post। केवल विफल पोस्ट की प्रमाण-आधारित रिकवरी; बिना जाँच के दोबारा कभी न भेजें।
/studio-api/scheduled-posts/cancelid और expected_version।post। अप्रकाशित काम रद्द करता है; रिमोट रद्दीकरण लंबित रह सकता है।
/studio-api/scheduled-posts/deleteid और expected_version।post। मशीन कॉलर पहले से प्रकाशित प्रोवाइडर कंटेंट हटा नहीं सकते।
/studio-api/scheduled-posts/withdraw-deleteid और expected_version।post। रोका गया, केवल सत्यापन वाला Instagram Login विलोपन अनुरोध वापस लेता है; प्रोवाइडर कंटेंट बना रहता है।

3. दायरा बनाए रखते हुए सूची देखें और पेज बदलें

limit का डिफ़ॉल्ट 50 है और स्वीकार्य सीमा 1–200 है। वैकल्पिक status का मान scheduled, publishing, published, failed, expired, needs_reschedule, cancelled या deleted में से एक है। scheduled_from और scheduled_to दोनों ऑफ़सेट सहित ISO-8601 समय के रूप में साथ देने होंगे; समाप्ति शुरुआत के बाद होनी चाहिए।

next_cursor या तो null है या scheduled_at और id वाला ऑब्जेक्ट। पूरा ऑब्जेक्ट cursor के रूप में उसी Workspace और फ़िल्टर के साथ वापस भेजें। यह एंडपॉइंट page, offset, platform या social_account_id फ़िल्टर नहीं लेता।

await sosoPost("/studio-api/scheduled-posts/list", {
  "workspace_id": "<workspace-uuid>",
  "limit": 50
});
const first = await sosoPost("/studio-api/scheduled-posts/list", {
  workspace_id: "<workspace-uuid>", limit: 50
});
if (first.next_cursor) {
  const next = await sosoPost("/studio-api/scheduled-posts/list", {
    workspace_id: "<workspace-uuid>", limit: 50, cursor: first.next_cursor
  });
  // Consume next.posts; continue only while next_cursor is not null.
}

4. समीक्षा की गई एक पोस्ट सत्यापित करें और बनाएँ

हर प्लेसहोल्डर को अपने अधिकृत दायरे के मानों और भविष्य के समय से बदलें। चलाने पर यह उदाहरण वास्तविक Threads टेक्स्ट पोस्ट निर्धारित करता है। create कॉल से पहले व्यक्ति से खाते, कंटेंट और समय की पुष्टि लें।

provider_payload.platform और उसी प्लेटफ़ॉर्म के publish_options सेट करें। सर्वर चुने खाते से उनका मेल जाँचता है। पोस्ट का स्रोत दर्ज करने के लिए project_id दे सकते हैं; प्रोजेक्ट प्रकाशन एक्सेस या निर्धारण का नियंत्रण नहीं देता।

बनाने के अनुरोध के फ़ील्ड और डिफ़ॉल्ट
फ़ील्डकॉन्ट्रैक्ट
workspace_id / social_account_idअधिकृत Workspace और सटीक गंतव्य के अनिवार्य UUIDs।
provider_payloadअनिवार्य प्लेटफ़ॉर्म विभेदक और प्लेटफ़ॉर्म के अनुसार publish_options।
scheduled_at / display_timezoneऑफ़सेट सहित अनिवार्य ISO-8601 समय; मान्य IANA डिस्प्ले टाइमज़ोन, डिफ़ॉल्ट UTC।
idempotency_keyअनिवार्य स्ट्रिंग, किनारों की खाली जगह हटाकर 8–160 अक्षर, इस एक उद्देश्य के लिए स्थिर।
caption / hashtagsकैप्शन nullable है, अधिकतम 5,000 अक्षर; डिफ़ॉल्ट null। हैशटैग का डिफ़ॉल्ट []; अधिकतम 100 स्ट्रिंग, प्रत्येक 100 अक्षर। प्रोवाइडर की सीमाएँ अधिक कड़ी हो सकती हैं।
mediaडिफ़ॉल्ट []; अधिकतम 20 पंजीकृत मीडिया संदर्भ। हर एक में kind image/video और कैनोनिकल url है; उसका तैयार asset_id दें। प्लेटफ़ॉर्म नियम अधिक कड़े हो सकते हैं।
link_urlवैकल्पिक URL या null। गंतव्य और पोस्ट प्रकार को इसे सपोर्ट करना चाहिए।
local_scheduled_at / schedule_dst_disambiguationवैकल्पिक जोड़ी: ऑफ़सेट के बिना स्थानीय समय और exact/earlier/later। दोनों दें या दोनों छोड़ें; इनका इच्छित समय और टाइमज़ोन से मेल होना चाहिए।
expires_at / automatic_retry_enabledscheduled_at के बाद वैकल्पिक समाप्ति; null का अर्थ कोई समाप्ति नहीं। स्वचालित पुनः प्रयास का डिफ़ॉल्ट true है और प्रोवाइडर सुरक्षा लागू रहती है।
project_id / source_refवैकल्पिक nullable Project UUID और कॉलर स्रोत-इतिहास ऑब्जेक्ट। दोनों में से कोई अधिकार नहीं बदलता।
await sosoPost("/studio-api/scheduled-posts/eligibility", {
  "workspace_id": "<workspace-uuid>",
  "include_quota": true,
  "targets": [
    {
      "social_account_id": "<threads-account-uuid>",
      "media": [],
      "provider_payload": {
        "platform": "threads",
        "publish_options": {
          "post_type": "TEXT"
        }
      },
      "draft": {
        "caption": "A reviewed update from our team.",
        "hashtags": [],
        "scheduled_at": "<future-ISO-8601-instant-with-offset>",
        "display_timezone": "Asia/Hong_Kong"
      }
    }
  ]
});
await sosoPost("/studio-api/scheduled-posts/create", {
  "workspace_id": "<workspace-uuid>",
  "social_account_id": "<threads-account-uuid>",
  "caption": "A reviewed update from our team.",
  "hashtags": [],
  "media": [],
  "provider_payload": {
    "platform": "threads",
    "publish_options": {
      "post_type": "TEXT"
    }
  },
  "scheduled_at": "<future-ISO-8601-instant-with-offset>",
  "display_timezone": "Asia/Hong_Kong",
  "idempotency_key": "<stable-key-for-this-one-intent>"
});

5. परिणाम पढ़ें और सुरक्षित रूप से रद्द करें

Create, { post, deduped } लौटाता है। List, { posts, next_cursor, returned_count } लौटाता है। Get, { post, delivery, actions, attempts, outcomes } लौटाता है। post में id, status, version, destination, schedule और उपलब्ध प्रोवाइडर पहचान/परमालिंक हैं; delivery और actions वर्तमान प्रगति व अनुमत अगले कदम समझाते हैं।

status scheduled या publishing वाली पोस्ट अभी लंबित है। status published वाला अंतिम प्रकाशन परिणाम पुष्टि करता है और उपलब्ध प्रोवाइडर प्रमाण देता है; परमालिंक न हो सकता है। क्लाइंट डिस्कनेक्ट या रिस्पॉन्स देर से आए, तो परिणाम बताने से पहले मौजूदा पोस्ट पढ़ें।

रद्द करने से पहले पोस्ट विवरण पढ़ें और वर्तमान संख्यात्मक version दें। प्रोवाइडर का निर्धारण SosoAPI द्वारा रद्द होते समय परिणाम cancellation_pending हो सकता है। निर्धारण रद्द करने से पहले से प्रकाशित पोस्ट नहीं मिटती।

await sosoPost("/studio-api/scheduled-posts/get", {
  "id": "<scheduled-post-uuid>"
});
const detail = await sosoPost("/studio-api/scheduled-posts/get", {
  id: "<scheduled-post-uuid>"
});
// Run only after the person confirms cancelling this unpublished post.
await sosoPost("/studio-api/scheduled-posts/cancel", {
  id: detail.post.id, expected_version: detail.post.version
});

6. इडेम्पोटेंसी, टकराव और अनिश्चित राइट

वही create अनुरोध दोहराते समय समान idempotency_key इस्तेमाल करें। मेल खाने वाला पुनः अनुरोध deduped=true के साथ मौजूदा पोस्ट लौटाता है। वही key रखकर कंटेंट बदलने पर टकराव होता है। इससे SosoAPI में डुप्लिकेट निर्माण रुकता है; प्रोवाइडर द्वारा ठीक एक बार डिलीवरी की गारंटी नहीं मिलती।

अपडेट और कार्रवाइयों में नवीनतम विवरण रिस्पॉन्स का expected_version दें। टकराव हो, तो पोस्ट फिर पढ़ें और नए संस्करण के अनुसार बदलाव जाँचें। रिस्पॉन्स खोने पर मौजूदा स्थिति जाँचें, नई key से दूसरी पोस्ट न बनाएँ।

डुप्लिकेट-कंटेंट नियंत्रण समान सामान्यीकृत सार्वजनिक कंटेंट, खाते और नज़दीकी प्रकाशन समय वाले अलग अनुरोध को अस्वीकार कर सकता है। पढ़ने के लिए अधिकृत होने पर मौजूदा पोस्ट का संदर्भ देखें और अनुरोध बदलने से पहले यूज़र से पूछें। बल्क अनुरोध हर गंतव्य का परिणाम लौटाते हैं; कुछ सफल और कुछ विफल हो सकते हैं।

7. त्रुटियाँ, दर सीमाएँ और इंटीग्रेशन सीमाएँ

हैंडलर त्रुटियों के एन्वलप में error, message, वैकल्पिक code, retryable, request_id, वैकल्पिक details और retry_after_seconds होते हैं। स्कीमा वैलिडेशन के 400 रिस्पॉन्स की संरचना अलग है: { success: false, error: { name: "ZodError", message: "…" } }। वैलिडेशन संदेश में फ़िलहाल फ़ील्ड की सीरियलाइज़ की गई समस्याएँ और उनके पाथ होते हैं; हैंडलर एन्वलप के फ़ील्ड मौजूद होने का अनुमान न लगाएँ।

विफलता जाँचते समय HTTP स्टेटस, त्रुटि कोड और result.request_id ?? response.headers.get("x-request-id") की correlation ID रखें। वैलिडेशन फ़ील्ड पाथ से अनुरोध ठीक करें। प्रमाणीकरण या अनुमति त्रुटि में फिर प्रयास से पहले क्रेडेंशियल या प्राधिकरण ठीक करें।

studio-api की वर्तमान सीमा हर मानव यूज़र के लिए प्रति मिनट 240 अनुरोध और उसी यूज़र के अलग मशीन-क्रेडेंशियल बकेट में 480 प्रति मिनट है। ये अनुरोध सीमा हैं, प्रकाशन थ्रूपुट या प्लान कोटा नहीं। दूसरे एंडपॉइंट और सोशल प्रोवाइडर की अलग सीमाएँ हैं। 429 या पुनः प्रयास योग्य 503 पर लाइव Retry-After हेडर मानें; लगातार लूप न चलाएँ।

यूज़र पोस्ट देख रहा हो, तो सीमित अंतरालों पर स्थिति पढ़ें या ऐप का लाइव स्थिति दृश्य इस्तेमाल करें। यह API आउटबाउंड webhooks, सब्सक्राइबर SLA, सभी प्लेटफ़ॉर्म पर समान फ़ीचर या निश्चित प्रकाशन समय का वादा नहीं करता।

HTTP रिस्पॉन्स और उपयोगी अगले कदम
स्थितिअर्थ और रिस्पॉन्स
400स्कीमा वैलिडेशन, हैंडलर एन्वलप के बजाय success:false और error में ZodError लौटा सकता है। फ़ील्ड की समस्याएँ ठीक करें; बॉडी में request_id न हो, तो x-request-id इस्तेमाल करें। हैंडलर स्तर के अमान्य या असमर्थित अनुरोध भी 400 इस्तेमाल कर सकते हैं।
401 / 403गायब/समाप्त क्रेडेंशियल या क्षमता, भूमिका, Workspace अथवा खाते का एक्सेस अस्वीकृत। संबंधित प्राधिकरण या सदस्यता ठीक करें।
404संसाधन अधिकृत दायरे में उपलब्ध नहीं है। पहचान सत्यापित करें।
409स्थिति/संस्करण, इडेम्पोटेंसी, डुप्लिकेट कंटेंट या पात्रता का टकराव। फिर पढ़ें; बिना जाँच दोबारा न भेजें।
bulk-create के लिए 422कोई गंतव्य सफल नहीं हुआ। विफलताएँ देखें; आंशिक सफलता में 201 इस्तेमाल होता है।
429अनुरोध दर की सीमा। Retry-After का पालन करें और उद्देश्य की पहचान समान रखें।
503 / अन्य 5xxअस्थायी सेवा विफलता या आंतरिक दोष। request_id रखें; अनिश्चित बदलाव का फिर प्रयास करने से पहले मौजूदा स्थिति देखें।