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

# Bulk Post

> CSV फ़ाइल के साथ पोस्ट्स को bulk schedule करें

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

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

<XByoNotice />

पोस्ट्स डेटा की CSV (Comma Separated Values) फ़ाइल के साथ पोस्ट्स को bulk schedule करें।
Content-Type `multipart/form-data` होना चाहिए।

<Warning>
  हम पोस्ट्स schedule करने के लिए इस bulk विधि के बजाय सीधे [Post endpoint](/apis/post/post) का उपयोग करने की अनुशंसा करते हैं।
  Direct endpoint एक अधिक व्यापक सुविधा सेट और आसान
  debugging क्षमताएँ प्रदान करता है।
</Warning>

## Header Parameters

<ParamField header="Authorization" type="string" required>
  फ़ॉर्मैट: `Authorization: Bearer API_KEY`। अधिक जानकारी के लिए [API overview](/apis/overview#authorization)
  देखें।
</ParamField>

<ParamField header="Profile-Key" type="string">
  User profile की Profile Key।
</ParamField>

<ParamField header="Content-Type" type="string" required>
  `Content-Type: multipart/form-data`
</ParamField>

## Body Parameters

<ParamField path="file" type="object">
  Scheduled पोस्ट्स की Multipart form-data CSV फ़ाइल। नीचे [CSV template](#csv-template) देखें।
</ParamField>

## अनुरोध उदाहरण

पोस्ट्स की CSV फ़ाइल वाले multipart form-data उन्हें भविष्य की तारीख के लिए schedule करेंगे।

CSV फ़ाइल में निम्नलिखित fields (नीचे template) होते हैं और आवश्यक हैं:

<ul class="custom-bullets">
  <li>`post`: पोस्ट text।</li>
  <li>`platforms`: प्लेटफ़ॉर्म्स की comma separated सूची, जैसे "twitter, facebook, instagram"।</li>
  <li>`mediaUrls`: पोस्ट में शामिल करने के लिए media का URL, जैसे कि image या video।</li>

  <li>
    `scheduleDate`: UTC फ़ॉर्मैट में पोस्ट schedule करने की Datetime। उदाहरण के लिए, फ़ॉर्मैट
    `YYYY-MM-DDThh:mm:ssZ` का उपयोग करें और `2026-07-08T12:30:00Z` के रूप में भेजें। अधिक उदाहरणों के लिए कृपया
    [utctime](https://www.utctime.net/) देखें।
  </li>
</ul>

<Warning>
  दो दिनों से कम के अंतर पर डुप्लिकेट पोस्ट न भेजें।

  यदि एक ही text वाले दो पोस्ट्स की scheduleDate तीन दिनों से कम है, तो जब scheduleDate होगी तब दूसरा पोस्ट अस्वीकार कर दिया जाएगा।
  यह सोशल नेटवर्क पर आपके account की रक्षा के लिए है; वे बार-बार डुप्लिकेट पोस्ट्स वाले accounts को suspend या shadow-ban कर सकते हैं।
</Warning>

## CSV Template

Template डाउनलोड करें और .csv फ़ाइल के रूप में सहेजें।

[Ayrshare CSV Template](https://img.ayrshare.com/012/Ayrshare_CSV_Template.csv)

<RequestExample>
  ```bash cURL theme={"system"}
  curl \
  -H "Authorization: Bearer API_KEY" \
  -H 'Content-Type: multipart/form-data' \
  -F 'file=@"./Ayrshare CSV Template.csv"' \
  -X POST https://api.ayrshare.com/api/post/bulk
  ```

  ```javascript JavaScript theme={"system"}
  const API_KEY = "API_KEY";
  const FormData = require("form-data");
  const fs = require("fs");

  const formData = new FormData();
  formData.append("file", fs.createReadStream("./Ayrshare CSV Template.csv"));

  fetch("https://api.ayrshare.com/api/post/bulk", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${API_KEY}`,
      ...formData.getHeaders()
    },
    body: formData
  })
    .then((res) => res.json())
    .then((data) => {
      console.log(JSON.stringify(data));
    })
    .catch((error) => {
      console.log(error);
    });
  ```

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

  API_KEY = "API_KEY"

  # Open the CSV file in binary read mode
  with open('./Ayrshare CSV Template.csv', 'rb') as file:
      # Prepare the files dictionary for the multipart/form-data request
      files = {'file': file}

      # Set up the authorization header
      headers = {'Authorization': f'Bearer {API_KEY}'}

      try:
          # Make the POST request to the API
          response = requests.post(
              'https://api.ayrshare.com/api/post/bulk',
              headers=headers,
              files=files
          )

          # Parse and print the JSON response
          data = response.json()
          print(data)

      except Exception as e:
          print(f"Error: {e}")
  ```
</RequestExample>

<ResponseExample>
  ```javascript 200: OK Example with two scheduled posts. theme={"system"}
  {
      "status": "success",
      "posts": [
          {
              "status": "scheduled",
              "scheduleDate": "4/6/21 12:50",
              "id": "X3uTExuEJhyM3u8wCRsA",
              "post": "A great post"
          },
          {
              "status": "scheduled",
              "scheduleDate": "4/6/21 13:00",
              "id": "8RGrekuxMnVa7lVnARFm",
              "post": "An even better post"
          }
      ]
  }
  ```
</ResponseExample>
