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

# الحصول على Link Session

> تحقق مما إذا كان عنوان URL لربط الشبكات الاجتماعية قد فُتح، أو لا يزال صالحًا، أو أُبطل.

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="/docs/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="/docs/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="/docs/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
          <br />
          <br />
          Format: <code>Profile-Key: PROFILE_KEY</code>
        </ParamField>)}
  </>;

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

تحقق من حالة رابط ربط أنشأته عبر
[إنشاء Link Session](/docs/apis/profiles/create-link-session) — هل فتحه مستخدمك، وهل لا يزال
صالحًا، وكم مرة استُخدم.

مفيد عندما تريد معرفة ما إذا كان مستخدم قد بدأ ربط حساباته دون أن تسأله، أو للتأكد من أن
رابطًا ما لم يعد صالحًا قبل إنشاء بديل له.

<Note>
  يُعيد `sessionId` غير الموجود، أو الذي يخص حسابًا آخر، استجابة `not found` نفسها. هذا
  مقصود، حتى لا يمكن استخدام نقطة النهاية لاكتشاف ما إذا كان معرّف ما حقيقيًا.
</Note>

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

<HeaderAPI profileKeyRequired={true} />

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

<ParamField path="sessionId" type="string" required>
  قيمة `sessionId` المُعادة عند إنشاء الرابط.
</ParamField>

## حالات الرابط

حقل `state` هو واحد مما يلي:

* `pending`: أُنشئ ولم يُفتح قط.
* `active`: فُتح مرة واحدة على الأقل، ولا يزال ضمن نافذته الزمنية.
* `expired`: تجاوز `expiresAt`.
* `revoked`: أُوقف عبر [إبطال Link Session](/docs/apis/profiles/revoke-link-session).

يُبلغ الرابط المُبطل عن `revoked` حتى بعد انقضاء نافذته الزمنية، لأن ذلك هو الجواب
الأكثر فائدة.

## الحسابات المتصلة

عندما يربط مستخدمك حسابًا، يسجّل الرابط ذلك. تظهر ثلاثة حقول بمجرد ربط شيء ما، وتكون
غائبة حتى ذلك الحين:

* `completedAt`: متى رُبط الحساب الأول.
* `lastCompletedAt`: متى رُبط الأحدث.
* `completedNetworks`: كل شبكة رُبطت عبر هذا الرابط.

هذه الحقول منفصلة عن `state`، وكلاهما يجيب عن أسئلة حقيقية: يمكن أن يكون رابط `active` ولم
يربط شيئًا بعد، أو `expired` وقد ربط ثلاثة حسابات قبل انقضائه. استطلاع `completedNetworks`
هو الطريقة التي يعرف بها تطبيق يُعرض من الخادم أو تطبيق محمول أن اتصالًا اكتمل، وهو
الإشارة الوحيدة لـ Telegram، الذي يكتمل خارج النطاق.

<Warning>
  **`completedNetworks` هو سجل تاريخي لجلسة الربط هذه، لا الحالة الراهنة للملف الشخصي.**
  فهو للإضافة فقط: تُضاف الشبكة عندما تتصل عبر هذه الجلسة ولا تُزال أبدًا، فتبقى مُدرجة بعد
  فك ربط الحساب، أو إعادة ربطه عبر جلسة مختلفة، أو فصله من جانب الشبكة. لمعرفة الشبكات
  المرتبطة بـ User Profile **في هذه اللحظة**، استدعِ
  [الحصول على User Profiles](/docs/apis/profiles/get-profiles) مع `include=state`.
</Warning>

<RequestExample>
  ```bash cURL theme={"system"}
  curl \
  -H "Authorization: Bearer API_KEY" \
  -H 'Profile-Key: PROFILE_KEY' \
  -X GET https://api.ayrshare.com/api/profiles/link-sessions/SESSION_ID
  ```

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

  fetch(`https://api.ayrshare.com/api/profiles/link-sessions/${SESSION_ID}`, {
    headers: {
      Authorization: `Bearer ${API_KEY}`,
      "Profile-Key": PROFILE_KEY,
    },
  })
    .then((res) => res.json())
    .then((json) => console.log(json))
    .catch(console.error);
  ```

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

  headers = {'Authorization': 'Bearer API_KEY',
          'Profile-Key': 'PROFILE_KEY'}

  response = requests.get(
      'https://api.ayrshare.com/api/profiles/link-sessions/SESSION_ID',
      headers=headers)
  print(response.json())
  ```

  ```php PHP theme={"system"}
  <?php
  require 'vendor/autoload.php';    // Composer auto-loader using Guzzle. See .../guzzlephp.org/en/stable/overview.html

  $client = new GuzzleHttp\Client();
  $res = $client->request(
      'GET',
      'https://api.ayrshare.com/api/profiles/link-sessions/SESSION_ID',
      [
          'headers' => [
              'Authorization' => 'Bearer API_KEY',
              'Profile-Key'   => 'PROFILE_KEY'
          ]
      ]
  );

  echo json_encode(json_decode($res->getBody()), JSON_PRETTY_PRINT);
  ```

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

  namespace GetLinkSession_csharp
  {
    class GetLinkSession
    {
        static async Task Main(string[] args)
        {
            string API_KEY = "API_KEY";
            string PROFILE_KEY = "PROFILE_KEY";
            string url = "https://api.ayrshare.com/api/profiles/link-sessions/SESSION_ID";

            try
            {
                using (var client = new HttpClient())
                {
                    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + API_KEY);
                    client.DefaultRequestHeaders.Add("Profile-Key", PROFILE_KEY);

                    HttpResponseMessage response = await client.GetAsync(url);
                    response.EnsureSuccessStatusCode();

                    string responseBody = await response.Content.ReadAsStringAsync();
                    Console.WriteLine(responseBody);
                }
            }
            catch (HttpRequestException e)
            {
                Console.WriteLine($"HTTP request error: {e.Message}");
            }
        }
    }
  }
  ```
</RequestExample>

<ResponseExample>
  ```json 200: Opened Once, Still Valid theme={"system"}
  {
      "status": "success",
      "sessionId": "c7a2434e72e91bde27579efde0fd6dd0b74ceee29a471fd368407f273708c2e8",
      "state": "active",  // pending | active | expired | revoked - see Link States above.
      "createdAt": "2026-09-01T08:03:26.838Z",  // When the link was created, as an ISO 8601 timestamp.
      "expiresAt": "2026-09-02T08:03:26.838Z",  // When the link stops working.
      "firstUsedAt": "2026-09-01T08:14:02.104Z",  // When the link was first opened. Absent if it never has been.
      "lastUsedAt": "2026-09-01T08:14:02.104Z",  // When the link was most recently opened. Absent if it never has been.
      "useCount": 1,  // How many times the link has been opened. A reload or an OAuth retry increments this.
      "completedAt": "2026-09-01T08:15:44.870Z",  // When the first account was connected. Absent until one is.
      "lastCompletedAt": "2026-09-01T08:16:20.412Z",  // When the most recent was connected. Absent until one is.
      "completedNetworks": ["reddit", "bluesky"]  // Every network connected on this link, append-only. Absent until one is.
  }
  ```

  ```json 200: Created, Never Opened theme={"system"}
  {
      "status": "success",
      "sessionId": "c7a2434e72e91bde27579efde0fd6dd0b74ceee29a471fd368407f273708c2e8",
      "state": "pending",  // Created but never opened, so firstUsedAt and lastUsedAt are absent.
      "createdAt": "2026-09-01T08:03:26.838Z",
      "expiresAt": "2026-09-02T08:03:26.838Z",
      "useCount": 0
  }
  ```

  ```json 404: Not Found theme={"system"}
  {
    "action": "link session",
    "status": "error",
    "code": 502,
    "message": "Social linking session not found. Please request a new linking URL."
  }
  ```
</ResponseExample>
