> ## 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.

# Lịch sử bài đăng

> Lịch sử các bài đăng của 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 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>;
};

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>)}
  </>;

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

<XByoNotice />

Lấy lịch sử các bài đăng được gửi qua Ayrshare, theo thứ tự giảm dần (từ mới nhất đến cũ nhất).

Với endpoint này, bạn có thể truy xuất các bài đăng từ một khoảng thời gian cụ thể, trạng thái, mạng xã hội, hoặc n ngày gần nhất.

Các giá trị của trường `status` trong lịch sử:

<ul class="custom-bullets">
  <li>
    `awaiting approval`: Bài đăng đang chờ được phê duyệt qua [quy trình phê
    duyệt](/apis/post/overview#approval-workflow).
  </li>

  <li>
    `deleted`: Bài đăng đã bị xóa. Lưu ý: các bài đăng đã xóa chỉ được trả về khi sử dụng bộ lọc trạng thái
    trong truy vấn. Vui lòng xem bên dưới.
  </li>

  <li>`error`: Đã xảy ra lỗi với một hoặc nhiều mạng xã hội.</li>
  <li>`paused`: Một bài đăng theo lịch đã bị tạm dừng.</li>
  <li>`pending`: Bài đăng chưa được xử lý. Thường là một bài đăng theo lịch.</li>
  <li>`success`: Bài đăng đã được gửi thành công đến tất cả các mạng xã hội.</li>
</ul>

Thông tin bổ sung:

<ul class="custom-bullets">
  <li>
    [Ayrshare Post ID](/apis/overview#ayrshare-post-id) được trả về trong trường `id` của phản hồi.
  </li>

  <li>
    Để truy xuất các bài đăng có nguồn gốc bên ngoài Ayrshare, chẳng hạn như các bài đăng được tạo thủ công trực tiếp
    trên mạng xã hội, hãy sử dụng endpoint [history platform](/apis/history/history-platform).
  </li>

  <li>
    Nếu chỉ cần một bài đăng riêng lẻ, hãy sử dụng endpoint [post history by
    id](/apis/history/get-history-id).
  </li>

  <li>
    Kết quả JSON của endpoint history được lưu vào bộ nhớ đệm trong 1 phút nếu `limit` lớn hơn
    giá trị mặc định là 25.
  </li>
</ul>

## Header Parameters

<HeaderAPI />

## Query Parameters

<ParamField query="limit" type="number" default={25}>
  Trả về <em>n</em> bài đăng gần nhất. Ví dụ, nếu bạn chỉ muốn bài đăng mới nhất, hãy đặt `limit=1`.
  Nếu không có, sẽ trả về tất cả các bản ghi trong `lastDays`.

  Mặc định: `25` bài đăng. Giá trị tối đa: `1000`.
</ParamField>

<ParamField query="platforms" type="array">
  Lọc theo các nền tảng mạng xã hội. Các giá trị platform: `bluesky`, `facebook`, `gmb`, `instagram`,
  `linkedin`, `pinterest`, `reddit`, `snapchat`, `telegram`, `threads`, `tiktok`, `twitter`,
  `youtube`. Lưu ý, sử dụng logic `OR`: `["facebook", "instagram"]` trả về các bài đăng từ một trong hai.
</ParamField>

<ParamField query="startDate" type="string">
  Trả về các bài đăng từ ngày bắt đầu này trở đi (bao gồm cả ngày này). Ngày bắt đầu cho lịch sử theo định dạng ISO 8601.
  Ví dụ, sử dụng định dạng `YYYY-MM-DDThh:mm:ssZ` và gửi dưới dạng `2026-07-08T12:30:00Z`. Vui lòng xem
  [utctime](https://www.utctime.net/) để biết thêm ví dụ.
</ParamField>

<ParamField query="endDate" type="string">
  Trả về các bài đăng cho đến ngày kết thúc này (bao gồm cả ngày này). Ngày kết thúc cho lịch sử theo định dạng ISO 8601. Ví dụ,
  sử dụng định dạng `YYYY-MM-DDThh:mm:ssZ` và gửi dưới dạng `2026-07-08T12:30:00Z`. Vui lòng xem
  [utctime](https://www.utctime.net/) để biết thêm ví dụ.
</ParamField>

<ParamField query="lastDays" type="number" default={30}>
  Trả về các bài đăng của n ngày gần nhất theo ngày xuất bản, tức là `scheduleDate`. Mặc định 30 ngày.

  <ul class="custom-bullets">
    <li>`lastDays` sẽ bị bỏ qua nếu `startDate` và `endDate` được cung cấp.</li>
    <li>Nếu giá trị là 0 sẽ trả về toàn bộ lịch sử các bài đăng.</li>
    <li>Nếu giá trị lớn hơn 0, sẽ trả về các bài đăng của n ngày gần nhất.</li>

    <li>
      Ví dụ, `lastDays=5` trả về các bài đăng của 5 ngày gần nhất và `lastDays=0` trả về tất cả các bài đăng
      được xác định bởi `limit`.
    </li>
  </ul>
</ParamField>

<ParamField query="status" type="string">
  Lọc theo trạng thái hiện tại của bài đăng. Các giá trị hợp lệ: `success`, `error`, `processing`, `pending`, `paused`, `deleted`, và `awaiting approval`.
  Processing cho biết bài đăng hiện đang được gửi. Pending cho biết bài đăng đã được lên lịch để đăng vào một ngày trong tương lai.

  <Info>
    Các bài đăng đã xóa không được trả về theo mặc định. Chúng chỉ được trả về với bộ lọc truy vấn trạng thái được đặt thành `status=deleted`.
  </Info>
</ParamField>

<ParamField query="type" type="string">
  Loại bài đăng cần truy xuất, hoặc bài đăng được gửi ngay lập tức hoặc bài đăng theo lịch sử dụng
  trường `scheduleDate`. Giá trị: `immediate` hoặc `scheduled`.
</ParamField>

<ParamField query="autoRepostId" type="string">
  Khi tạo một auto repost, một ID sẽ được gán để theo dõi loạt bài đăng đó.
  Truy xuất các bài đăng theo auto repost ID hoặc sử dụng giá trị `all` để lấy tất cả các auto repost.
</ParamField>

<RequestExample>
  ```bash cURL theme={"system"}
  curl \
  -H "Authorization: Bearer API_KEY" \
  -X GET https://api.ayrshare.com/api/history?startDate=2025-01-01T12:30:00Z&endDate=2025-03-01T12:30:00&limit=100
  ```

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

  fetch("https://api.ayrshare.com/api/history?startDate=2025-01-01T12:30:00Z&endDate=2025-03-01T12:30:00&limit=100", {
        method: "GET",
        headers: {
          "Authorization": `Bearer ${API_KEY}`
        }
      })
        .then((res) => res.json())
        .then((json) => console.log(json))
        .catch(console.error);
  ```

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

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

  r = requests.get('https://api.ayrshare.com/api/history?startDate=2025-01-01T12:30:00Z&endDate=2025-03-01T12:30:00&limit=100', headers=headers)

  print(r.json())
  ```

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

  $apiUrl = 'https://api.ayrshare.com/api/history?startDate=2025-01-01T12:30:00Z&endDate=2025-03-01T12:30:00&limit=100';
  $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 HistoryGETRequest_csharp
  {
  class History
  {
      static async Task Main(string[] args)
      {
          string API_KEY = "API_KEY";
          string url = "https://api.ayrshare.com/api/history?startDate=2025-01-01T12:30:00Z&endDate=2025-03-01T12:30:00&limit=100";

          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 theme={"system"}
  {
    "history": [
      {
          "errors": [],
          "post": "This is the  post I sent",
          "platforms": [
              "twitter",
              "facebook"
          ],
          "postIds": [
              {
                  "status": "success",
                  "id": "1288968500063775749",    // Twitter Social Post ID
                  "platform": "twitter"
              },
              {
                  "id": "104923907983682_108683297607743", // Facebook Social Post ID
                  "status": "success",
                  "platform": "facebook"
              }
          ],
          "urls": [],
          "type": "now",
          "notes": "Approved by John Smith",  // Reference notes set via /post
          "created": "2022-05-20T17:25:06Z",
          "status": "deleted",
          "scheduleDate": {    // In a future release changed to "scheduleDate": "2020-11-05T12:21:29Z"
              "_seconds": 1604578889,
              "_nanoseconds": 211000000,
              "utc": "2020-11-05T12:21:29Z"
          },
          "id": "rhn6u7wwz2WxGv6MZGK9" // Ayrshare Top-Level Post ID
      },
      {
          "status": "success",
          "platforms": [
              "twitter",
              "facebook"
          ],
          "created": "2022-05-20T17:25:06Z",
          "post": "Sometimes we need to take a break for lunch.",
          "scheduleDate": {    // In a future release changed to "scheduleDate": "2020-11-05T12:21:29Z"
              "_seconds": 1604578889,
              "_nanoseconds": 211000000,
              "utc": "2020-11-05T12:21:29Z"
          },
          "type": "now",
          "postIds": [
              {
                  "platform": "twitter",
                  "id": "1288890036000983105", // Twitter Social Post ID
                  "status": "success"
              },
              {
                  "id": "104923907983682_108329970009742", // Facebook Social Post ID
                  "status": "success",
                  "platform": "facebook",
                  "isVideo": true // Video post
              }
          ],
          "errors": [],
          "urls": [],
          "id": "wWIY0OEirdNeYSJYm1Xa" // Ayrshare Post ID
      },
      {   // Awaiting approval post - Approved by user
          "approved": true,
          "approvedBy": "9abf1426d6ce9122ef11c7222e1",
          "approvedDate": "2025-06-06T12:28:12Z",
          "created": "2025-06-06T12:27:56Z",
          "errors": [],
          "id": "sujQsrXtroJU0NEOlY38",
          "mediaUrls": [],
          "platforms": [
              "twitter"
          ],
          "post": "I failed my way to success. - Thomas Edison",
          "postIds": [
              {
                  "status": "success",
                  "id": "193096515330813",
                  "postUrl": "https://twitter.com/RetiretyHQ/status/19309651533081",
                  "platform": "twitter"
              }
          ],
          "profileTitle": "Primary Profile",
          "refId": "9abf1426d6ce9122ef11c7222e1",
          "requiresApproval": true,
          "scheduleDate": "2025-06-06T12:27:56Z",
          "shortenLinks": false,
          "status": "success",
          "type": "now"
      },
      {   // Awaiting approval post - Rejected by user
          "approved": false,
          "created": "2025-06-06T12:23:48Z",
          "id": "XL5xHeNK8HGTg07qxzmd",
          "mediaUrls": [],
          "platforms": [
              "twitter"
          ],
          "post": " Honesty is the first chapter in the book of wisdom. - Thomas Jefferson",
          "profileTitle": "Primary Profile",
          "refId": "9abf1426d6ce9122ef11c72bd62eddw2",
          "rejectedBy": "9abf1426d6ce9122ef11c7222e1",
          "rejectedDate": "2025-06-06T12:23:58Z",
          "requiresApproval": true,
          "scheduleDate": "2025-06-06T12:23:48Z",
          "shortenLinks": false,
          "status": "awaiting approval",
          "type": "now"
      }
          
     ],
      "refId": "9abf1426d6ce9122ef11c72bd62e59807c5cc083",
      "count": 100,
      "lastUpdated": "2025-04-05T22:44:14.209Z",
      "nextUpdate": "2025-04-05T22:45:14.209Z"
  }
  ```

  ```json 400: History not found theme={"system"}
  {
    "action": "history",
    "status": "error",
    "code": 221,
    "message": "History not found for the past 30 days. Please see the docs on how to retrieve additional history. .../ayrshare.com/rest-api/endpoints/history#list-history-of-sent-and-scheduled-posts"
  }
  ```
</ResponseExample>
