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

# Request An Intro

> Ask a connector to make an introduction

A path holds at most one intro request. Calling this again on the same
connector/prospect pair returns the existing request (`200`, `created:
false`) instead of making a second one.

## Body

<ParamField body="clientLinkedInId" type="string" required>
  The connector doing the introducing.
</ParamField>

<ParamField body="prospectLinkedInId" type="string" required>
  The person being introduced.
</ParamField>

<ParamField body="opportunityId" type="string">
  The opportunity this request belongs to, if you have it.
</ParamField>

<ParamField body="message" type="string">
  The drafted ask, forwarded to the connector.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://api.clustr-ai.com/api/public/intro-requests" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "clientLinkedInId": "john-doe",
      "prospectLinkedInId": "jane-smith",
      "message": "Hey John, would you mind introducing me to Jane at Acme?"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 201 theme={null}
  {
    "success": true,
    "data": {
      "introRequest": {
        "id": "d1e2f3a4-...",
        "clientLinkedInId": "john-doe",
        "prospectLinkedInId": "jane-smith",
        "status": "requested",
        "message": "Hey John, would you mind introducing me to Jane at Acme?"
      },
      "created": true
    }
  }
  ```

  ```json 400 theme={null}
  {
    "success": false,
    "error": { "message": "clientLinkedInId and prospectLinkedInId are required", "code": "BAD_REQUEST" }
  }
  ```
</ResponseExample>
