> ## Documentation Index
> Fetch the complete documentation index at: https://www.ayrshare.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# سجل المنشورات لمنصة

> سجل المنشورات المُرسلة لمنصة، بما في ذلك المنشورات التي لم تنشأ عبر Ayrshare

export const XByoNotice = () => <Info>
  <strong>Targeting X/Twitter?</strong> Starting March 31, 2026, all X operations require your own API credentials. After linking X via OAuth, include these 2 headers in your request:
  <br /><br />
  <code>X-Twitter-OAuth1-Api-Key</code> — Your API Key (Consumer Key)<br />
  <code>X-Twitter-OAuth1-Api-Secret</code> — Your API Key Secret (Consumer Secret)
  <br /><br />
  <strong>One-time setup per Ayrshare account.</strong> You create one X Developer App and reuse the same API Key and Secret across every sub-profile / end-user you link. You do <em>not</em> create a new app per customer.
  <br /><br />
  Not linked yet? See the <a href="/dashboard/connect-social-accounts/x-twitter-byo-keys">full setup guide</a> to connect your X account.
  <br /><br />
  Your keys are never logged or stored by Ayrshare.
</Info>;

export const HeaderAPI = ({noProfileKey, profileKeyRequired}) => <>
    <ParamField header="Authorization" type="string" required>
      <a href="/apis/overview#authorization">API Key</a> of the Primary Profile.
      <br />
      <br />
      Format: <code>Authorization: Bearer API_KEY</code>
    </ParamField>
    {!noProfileKey && (profileKeyRequired ? <ParamField header="Profile-Key" type="string" required>
          <a href="/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
          <br />
          <br />
          Format: <code>Profile-Key: PROFILE_KEY</code>
        </ParamField> : <ParamField header="Profile-Key" type="string">
          <a href="/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
          <br />
          <br />
          Format: <code>Profile-Key: PROFILE_KEY</code>
        </ParamField>)}
  </>;

export const PlansAvailable = ({plans = [], maxPackRequired}) => {
  let displayPlans = plans;
  if (plans && plans.length === 1) {
    const lowerCasePlan = plans[0].toLowerCase();
    if (lowerCasePlan === "business") {
      displayPlans = ["Launch", "Business", "Enterprise"];
    } else if (lowerCasePlan === "premium") {
      displayPlans = ["Premium", "Launch", "Business", "Enterprise"];
    }
  }
  return <Note>
Available on {displayPlans.length === 1 ? "the " : ""}
{displayPlans.join(", ").replace(/\b\w/g, l => l.toUpperCase())}{" "}
{displayPlans.length > 1 ? "plans" : "plan"}.

{maxPackRequired && <span onClick={() => window.open('https://www.ayrshare.com/docs/additional/maxpack', '_self')} className="flex items-center mt-2 cursor-pointer">
 <span className="px-1.5 py-0.5 rounded text-sm" style={{
    backgroundColor: '#C264B6',
    color: 'white',
    fontSize: '12px'
  }}>
   Max Pack required
 </span>
</span>}
</Note>;
};

<PlansAvailable plans={["premium"]} maxPackRequired={false} />

<XByoNotice />

تتيح لك نقطة النهاية هذه جلب المنشورات وتحليلاتها من أهم شبكات التواصل الاجتماعي (Bluesky وFacebook وInstagram وLinkedIn وPinterest وThreads وTikTok وX/Twitter وYouTube). وهي تعمل مع جميع المنشورات على هذه المنصات — سواء أُنشئت باستخدام واجهة برمجة تطبيقات Ayrshare أو نُشرت مباشرةً من واجهة شبكة التواصل الاجتماعي.
تتوفر تحليلات أكثر تفصيلًا من خلال [نقطة نهاية التحليلات](/apis/analytics/overview).

المعرّفات المُعادة من نقطة النهاية هذه هي [معرّف المنشور الاجتماعي](/apis/overview#social-post-id) الأصلي من شبكات التواصل الاجتماعي وليست [معرّف منشور Ayrshare](/apis/overview#ayrshare-post-id).
يتيح لك هذا الحصول على تفاصيل أي منشور على شبكة تواصل اجتماعي، حتى لو لم يُنشأ عبر Ayrshare.
على سبيل المثال، يمكنك استرجاع منشور نُشر يدويًا على facebook.com واستخدام [معرّف المنشور الاجتماعي](/apis/overview#social-post-id) الخاص بـ Facebook المُعاد [للحصول على التعليقات](/apis/comments/get-comments) أو [الحصول على التحليلات](/apis/analytics/social-by-id).

إذا لم تكن بحاجة إلى منشورات نشأت خارج Ayrshare، فببساطة استخدم [معرّف منشور Ayrshare](/apis/overview#ayrshare-post-id) المُعاد في منشور مع نقاط نهاية [التعليق](/apis/comments/post-comment) أو [التحليلات](/apis/analytics/post) أو [السجل](/apis/history/history-social-id).

`:platform` = `bluesky` أو `facebook` أو `instagram` أو `linkedin` أو `pinterest` أو `snapchat` أو `threads` أو `tiktok` أو `twitter` أو `youtube`.

مثال: `https://api.ayrshare.com/api/history/instagram`

### الوسائط المحمية بحقوق النشر

سيستبعد Instagram وTikTok جميع الوسائط المحمية بحقوق النشر في استجاباتهما.

<ul class="custom-bullets">
  <li>
    يُحذف حقل `mediaUrl` الخاص بـ Instagram من الاستجابة إذا كانت الوسائط تحتوي على مواد محمية بحقوق النشر أو تم الإبلاغ عنها لانتهاك حقوق النشر.
    قد تشمل أمثلة المواد المحمية بحقوق النشر الصوت في مقاطع Reels. يمكنك التحقق من ذلك في تطبيق Instagram ضمن Settings -> Account Status.
  </li>

  <li>
    لا يُعيد TikTok الوسائط إذا كانت تحتوي على مواد محمية بحقوق النشر أو تم الإبلاغ عنها لانتهاك حقوق النشر.
    قد تشمل أمثلة المواد المحمية بحقوق النشر الصوت في مقاطع Reels (سيُكتم TikTok صوت هذه الفيديوهات). يمكنك التحقق من ذلك في تطبيق TikTok ضمن Activity -> System Notifications.

    إذا تم كتم فيديو من هذا القبيل، يمكنك إضافة صوت في تطبيق TikTok.
    انتقل إلى المنشور واختر خيار إضافة صوت غير محمي بحقوق النشر.
    سيُعاد الفيديو بعد ذلك في استجابة واجهة برمجة التطبيقات هذه.
  </li>
</ul>

### القيود

#### Facebook

<ul class="custom-bullets">
  <li>
    تُصفَّى القصص المنتهية/المؤرشفة (الأقدم من 24 ساعة) تلقائيًا. تُدرج القصص النشطة فقط في الاستجابة افتراضيًا.
  </li>

  <li>
    استخدم معامل الاستعلام `dataType` لطلب `posts` فقط أو `stories` فقط.
  </li>

  <li>
    استخدم معاملي الاستعلام `since` و`until` لتصفية المنشورات حسب نطاق تاريخي.
  </li>
</ul>

#### Instagram

<ul class="custom-bullets">
  <li>
    لن تشمل الاستجابات قصص البث المباشر (Live Video).
  </li>

  <li>
    القصص متاحة لمدة 24 ساعة فقط.
  </li>

  <li>
    لن يتم إرجاع القصص الجديدة التي تُنشأ عندما يُعيد مستخدم مشاركة قصة. تشمل القصص المُعاد مشاركتها القصص المُنشأة باستخدام قوالب Add Yours.
  </li>

  <li>
    لن يتم إرجاع المنشورات الجديدة التي تُنشأ عندما يقبل المستخدم طلبات التعاون.
  </li>

  <li>
    استخدم معامل الاستعلام `dataType` لطلب `posts` فقط أو `stories` فقط.
  </li>
</ul>

## معاملات الترويسة

<HeaderAPI />

## معاملات المسار

<ParamField path="platform" type="string" required>
  منصة المنشورات المطلوب استرجاعها. القيم: `bluesky` أو `facebook` أو
  `instagram` أو `linkedin` أو `pinterest` أو `snapchat` أو `threads` أو `tiktok` أو
  `twitter` أو `youtube`.
</ParamField>

## معاملات الاستعلام

<ParamField query="limit" type="number" default={10}>
  عدد سجلات السجل المطلوب إعادتها. الحد الأقصى: 500<sup>\*</sup>

  قد تؤدي القيم الأعلى للحد إلى استجابات أبطأ، لذلك نوصي باستخدام حدّ لا يتجاوز 100.

  <sup>\*</sup>تتوفر حدود أعلى في خطط Enterprise. يُرجى التواصل مع مدير حسابك للحصول على التفاصيل.
</ParamField>

<ParamField query="skipAnalytics" type="boolean" default={false}>
  تخطي جمع التحليلات الكاملة لـ Facebook Pages وInstagram. يُعيد فقط
  معرّف المنشور الاجتماعي. يجب استخدامه إذا لم تكن هناك حاجة إلى التحليلات (تحتاج فقط إلى
  معرّف المنشور الاجتماعي)، لتحقيق إرجاع أسرع، أو عند حدوث أخطاء عندما limit > 100.
</ParamField>

<ParamField query="pagePublished" type="boolean" default={10}>
  لـ Facebook فقط. افتراضيًا، تكون المنشورات المُعادة من موجز صفحة Facebook. يمكنك أيضًا اختيار إرجاع المنشورات التي نشرتها الصفحة فقط.

  استخدم feed (الافتراضي) عندما ترغب في رؤية أكثر شمولًا لجميع المحتوى المرتبط بالصفحة، بما في ذلك التفاعلات من مستخدمين آخرين. استخدم `pagePublished` عندما تريد استرجاع المنشورات التي نشرتها الصفحة نفسها فقط.
</ParamField>

<ParamField query="userId" type="string">
  لـ X/Twitter فقط. يتيح لك هذا المعامل استرجاع المنشورات من مستخدم X/Twitter معيّن باستخدام معرّفه الرقمي، بدلًا من حسابك المربوط.

  على سبيل المثال، للحصول على جميع المنشورات من الحساب `@Google`، ستستخدم معرّف userId الرقمي `20536157`.

  يمكنك العثور على userId الرقمي لأي مستخدم X/Twitter باستخدام نقطة النهاية [Brands Get User](/apis/listen/brand-user).

  ملاحظة: استخدم API KEY فقط في الترويسة لإجراء هذا الطلب. لا تُضمّن Profile Key.
</ParamField>

<ParamField query="userName" type="string">
  لـ X/Twitter فقط. يتيح لك هذا المعامل استرجاع المنشورات من مستخدم X/Twitter معيّن باستخدام معرّف الحساب (Handle)، بدلًا من حسابك المربوط.

  على سبيل المثال، للحصول على جميع المنشورات من الحساب `@Google`.

  ملاحظة: استخدم API KEY فقط في الترويسة لإجراء هذا الطلب. لا تُضمّن Profile Key.
</ParamField>

<ParamField query="next" type="string">
  ترقيم صفحات قائم على المؤشر لاسترجاع الصفحة التالية من النتائج. مرِّر قيمة `next` من كائن `meta.pagination` في الاستجابة السابقة لجلب المجموعة التالية من المنشورات.
</ParamField>

<ParamField query="since" type="string">
  لـ Facebook فقط. سلسلة تاريخ ISO UTC لتصفية المنشورات التي أُنشئت في هذا التاريخ أو بعده. استخدمها مع `until` لنطاق تاريخي محدد.

  مثال: `since=2026-03-17`
</ParamField>

<ParamField query="until" type="string">
  لـ Facebook فقط. سلسلة تاريخ ISO UTC لتصفية المنشورات التي أُنشئت في هذا التاريخ أو قبله. استخدمها مع `since` لنطاق تاريخي محدد.

  مثال: `until=2026-03-20`
</ParamField>

<ParamField query="dataType" type="string">
  Facebook وInstagram. تصفية نوع المحتوى المُعاد. افتراضيًا، تُعاد المنشورات العادية والقصص النشطة معًا.

  القيم:

  * `posts` — المنشورات العادية فقط (بدون قصص)
  * `stories` — القصص فقط

  احذف هذا المعامل لإعادة كل من المنشورات والقصص (السلوك الافتراضي).

  ملاحظة: لـ Facebook، تُصفَّى القصص المنتهية/المؤرشفة (الأقدم من 24 ساعة) تلقائيًا. لـ Instagram، القصص متاحة لمدة 24 ساعة فقط.
</ParamField>

## استجابة الترقيم

عند استخدام الترقيم القائم على المؤشر (مع معامل الاستعلام `next`)، تتضمن الاستجابة كائن `meta.pagination` يحتوي على حالة الترقيم.

تحتوي مصفوفة `posts` في كل استجابة مُرقَّمة على كائنات بنفس البنية الموضحة في أمثلة الاستجابة أدناه لكل منصة.

<ResponseField name="meta.pagination" type="object">
  بيانات وصفية للترقيم للتنقل القائم على المؤشر عبر النتائج.

  <Expandable title="properties">
    <ResponseField name="hasMore" type="boolean">
      يشير إلى ما إذا كانت هناك نتائج أخرى متاحة بعد الصفحة الحالية. عندما تكون `true`، استخدم مؤشر `next` لجلب المزيد من المنشورات.
    </ResponseField>

    <ResponseField name="next" type="string">
      سلسلة مؤشر مبهمة تُمرَّر كمعامل استعلام `next` لاسترجاع الصفحة التالية من النتائج. تكون موجودة فقط عندما تكون `hasMore` بقيمة `true` أو عندما تكون هناك المزيد من النتائج للجلب.
    </ResponseField>

    <ResponseField name="limit" type="number">
      عدد النتائج المطلوبة لكل صفحة.
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```javascript cURL theme={"system"}
  curl \
  -H "Authorization: Bearer API_KEY" \
  -X GET https://api.ayrshare.com/api/history/instagram
  ```

  ```bash cURL Facebook with Filters theme={"system"}
  # Get only regular posts (no Stories) within a date range
  curl \
  -H "Authorization: Bearer API_KEY" \
  -X GET "https://api.ayrshare.com/api/history/facebook?limit=20&since=2026-03-17&until=2026-03-20&dataType=posts"
  ```

  ```bash cURL with Pagination theme={"system"}
  # First request
  curl \
  -H "Authorization: Bearer API_KEY" \
  -X GET "https://api.ayrshare.com/api/history/twitter?limit=10"

  # Next page request (use 'next' cursor from previous response)
  curl \
  -H "Authorization: Bearer API_KEY" \
  -X GET "https://api.ayrshare.com/api/history/twitter?limit=10&next=eyJ0b2tlbiI6IjE3MzkyNjg1MTQ0ODU3MTUi..."
  ```

  ```javascript JavaScript theme={"system"}
  const API_KEY = "API_KEY";

  fetch("https://api.ayrshare.com/api/history/instagram", {
        method: "GET",
        headers: {
          "Authorization": `Bearer ${API_KEY}`
        }
      })
        .then((res) => res.json())
        .then((json) => console.log(json))
        .catch(console.error);
  ```

  ```javascript JavaScript with Pagination theme={"system"}
  const API_KEY = "API_KEY";

  // Function to fetch posts with pagination (up to maxPosts or until cutoffTime)
  async function fetchPosts(platform, { limit = 25, maxPosts = 100, cutoffTime = null } = {}) {
    const posts = [];
    let nextCursor = null;
    let pagePosts = [];

    do {
      const url = new URL(`https://api.ayrshare.com/api/history/${platform}`);
      url.searchParams.set("limit", limit);
      if (nextCursor) {
        url.searchParams.set("next", nextCursor);
      }

      const response = await fetch(url, {
        method: "GET",
        headers: {
          "Authorization": `Bearer ${API_KEY}`
        }
      });

      const data = await response.json();
      pagePosts = data.posts || [];

      // Filter by date if cutoffTime is specified
      if (cutoffTime) {
        pagePosts = pagePosts.filter(post => new Date(post.created) >= cutoffTime);
      }

      posts.push(...pagePosts);

      // Get cursor for next page
      nextCursor = data.meta?.pagination?.hasMore ? data.meta.pagination.next : null;
    } while (nextCursor && pagePosts.length > 0 && posts.length < maxPosts);

    return posts.slice(0, maxPosts);
  }

  // Fetch up to 100 Twitter posts
  fetchPosts("twitter", { maxPosts: 100 }).then(posts => console.log(posts));

  // Fetch posts from the last 30 days (up to 200)
  const thirtyDaysAgo = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000);
  fetchPosts("twitter", { maxPosts: 200, cutoffTime: thirtyDaysAgo }).then(posts => console.log(posts));
  ```

  ```python Python theme={"system"}
  import requests

  headers = {'Authorization': 'Bearer API_KEY'}

  r = requests.get('https://api.ayrshare.com/api/history/instagram', headers=headers)

  print(r.json())
  ```

  ```php PHP theme={"system"}
  <?php

  $apiUrl = 'https://api.ayrshare.com/api/history/instagram';
  $apiKey = 'API_KEY';  // Replace 'API_KEY' with your actual API key

  $headers = [
      'Content-Type: application/json',
      'Authorization: Bearer ' . $apiKey,
  ];

  $curl = curl_init($apiUrl);
  curl_setopt_array($curl, [
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_HTTPHEADER => $headers
  ]);

  $response = curl_exec($curl);

  if ($response === false) {
      echo 'Curl error: ' . curl_error($curl);
  } else {
      echo json_encode(json_decode($response), JSON_PRETTY_PRINT);
  }

  curl_close($curl);
  ```

  ```csharp C# theme={"system"}
  using System;
  using System.Net.Http;
  using System.Threading.Tasks;

  namespace HistoryPlatformGETRequest_csharp
  {
  class HistoryPlatform
  {
      static async Task Main(string[] args)
      {
          string API_KEY = "API_KEY";
          string url = "https://api.ayrshare.com/api/history/TBEAAqAMMJoweA9wKHUl";

          using (var client = new HttpClient())
          {
              client.DefaultRequestHeaders.Add("Authorization", "Bearer " + API_KEY);

              try
              {
                  var response = await client.GetStringAsync(url);
                  Console.WriteLine(response);
              }
              catch (HttpRequestException ex)
              {
                  Console.WriteLine($"Error: {ex.Message}");
              }
          }
      }
  }
  }
  ```
</RequestExample>

<ResponseExample>
  ```json 200: Success {4, 23, 161, 216, 287, 367, 488, 672} theme={"system"}
  {
      "status": "success",
      "posts": [
          // Bluesky Response Example
          {
              "cid": "bafyreigh7nz7x6pl4atgsextqtcbh33mg66yqt3caeihutn7ojkmpdtnzm",
              "created": "2025-01-06T21:35:08.951Z",
              "id": "at://did:plc:n7atrjd22xgkmgwig6dzlhzd/app.bsky.feed.post/3lfb57nxgxs2e",
              "indexedAt": "2025-01-06T21:35:09.156Z",
              "labels": [],
              "likeCount": 2,
              "post": "What a wonderful data day!",
              "postUrl": "https://bsky.app/profile/ayrshare.com/post/3lf43nl5jis24",
              "quoteCount": 3,
              "replyCount": 2,
              "repostCount": 1,
              "viewer": {
                  "threadMuted": false,
                  "embeddingDisabled": false
              }
          }
      ],
      "lastUpdated": "2022-11-14T16:04:51.994Z",
      "nextUpdate": "2022-11-14T16:37:21.994Z",
      "meta": {
          "pagination": {
              "hasMore": true,
              "next": "eyJ0b2tlbiI6IjE3MzkyNjg1MTQ0ODU3MTUiLCJzb3VyY2UiOiJwdWJsaWMiLCJwbGF0Zm9ybSI6InR3aXR0ZXIifQ==",
              "limit": 10
          }
      }
  }

  ```

  ```json 400: Error theme={"system"}
  {
    "status": "error",
    "code": 196,
    "message": "Instagram is not connected"
  }
  ```

  ```json 400: Bad Request theme={"system"}
  {
      "status": "error",
      "posts": [
          {
              "action": "analytics",
              "code": 187,
              "message": "Error getting analytics.",
              "status": "error"
          }
      ]
  }
  ```
</ResponseExample>
