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

# Send a LinkedIn invitation

> Send one connection invitation from your account, with an optional note.

> [!CAUTION]
>
> This sends a real invitation from your LinkedIn account. Invitations are LinkedIn's most restricted action: stay around 80 to 100 a day and 200 a week. Your CRM can also be updated.

## What this call does

| | |
| - | - |
| **LinkedIn** | **Sends a real invitation.** Can also cost 1 live profile view |
| **Your CRM** | Updates a linked contact and can add a note. With your auto-create preference on, it can also create a contact, turn on sync, import the history and spend an email credit |
| **Also** | About 80 to 100 invitations a day, 200 a week |
| **Repeating it** | **Never repeat blindly.** After a timeout, a 5xx or no answer at all, the invitation may have gone out. Wait a few minutes, check the pending invitations, and only then try once. |

## Good to know

* Send exactly one of `linkedin_profile_id`, `sales_nav_profile_id`, `linkedin_profile_slug` or `crm_contact_id`.
* `sent: true` means LinkedIn accepted the invitation.
* Check your connections and pending invitations first: a repeat attempt wastes your quota.

Your AI assistant reaches the same action through the MCP tool `send_linkedin_invitation`.


## OpenAPI

````yaml reference/openapi.json POST /linkedin/invitations
openapi: 3.1.0
info:
  title: Groovin API
  version: 1.0.0
  description: >-
    Connect LinkedIn and your CRM. Every call acts on your real LinkedIn account
    and CRM: there is no test mode.
servers:
  - url: https://api.groovin.ai/functions/v1/api/v1
security:
  - apiKey: []
tags:
  - name: LinkedIn
  - name: CRM contacts and companies
  - name: LinkedIn connections import
paths:
  /linkedin/invitations:
    post:
      tags:
        - LinkedIn
      summary: Send a LinkedIn invitation
      description: Send one connection invitation from your account, with an optional note.
      operationId: send_linkedin_invitation
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                message:
                  type: string
                  description: >-
                    An optional note, up to 300 characters. Leave it out for an
                    invitation without a note.
                linkedin_profile_id:
                  type: string
                  description: Who to reach, by LinkedIn profile id (`ACoAA…`).
                sales_nav_profile_id:
                  type: string
                  description: Who to reach, by Sales Navigator profile id (`ACwAA…`).
                linkedin_profile_slug:
                  type: string
                  description: >-
                    Who to reach, by the end of their LinkedIn URL. This can
                    cost one live LinkedIn profile view, and a URL that changed
                    owner can point to someone else: prefer an id.
                crm_contact_id:
                  type: string
                  description: >-
                    Who to reach, by CRM contact id. The contact needs a linked
                    profile or a LinkedIn URL on its record.
                recipient_email:
                  type: string
                  description: >-
                    Their email address, if LinkedIn refuses the invitation
                    because it needs one.
                org_linkedin_account_id:
                  type: integer
                  description: >-
                    Leave this out to use your own LinkedIn account. Another
                    person's account is refused with a 403.
              required: []
            examples:
              placeholder:
                summary: Replace every value
                value:
                  linkedin_profile_id: REPLACE_WITH_LINKEDIN_PROFILE_ID
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SendLinkedinInvitationResult'
              example:
                org_linkedin_account_id: 4821
                sent: true
                invitation_id: example-invitation-id
                recipient_linkedin_profile_id: ACoAAExampleLinkedinProfileId
                recipient_resolution: provided_id
                used_live_profile_fetch: false
                crm_contact_id: example-crm-contact-id
                crm_contact_auto_created: false
        '400':
          description: 'Something in the request is wrong: `error` says what.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: The API key is missing, wrong or revoked.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            Your account cannot do this: no CRM connected, inactive
            subscription, Billing admin role, or a teammate's LinkedIn account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: >-
            What you asked for does not exist, or your LinkedIn account is not
            connected.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: The CRM contact's LinkedIn URL cannot be used.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: LinkedIn or your CRM is slowing you down. Wait at least 5 minutes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Something failed on our side.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: >-
            LinkedIn or your CRM could not be reached or gave an unreadable
            answer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: >-
            No confirmation in time. **The invitation may still have been
            sent.**
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    SendLinkedinInvitationResult:
      type: object
      description: LinkedIn accepted the invitation.
      required:
        - org_linkedin_account_id
        - sent
        - invitation_id
        - recipient_linkedin_profile_id
        - recipient_resolution
        - used_live_profile_fetch
        - crm_contact_id
        - crm_contact_auto_created
      properties:
        org_linkedin_account_id:
          type: integer
          description: Groovin's id for the LinkedIn account this answer is about.
        sent:
          const: true
          description: Always `true` on success.
        invitation_id:
          type:
            - string
            - 'null'
          description: The invitation's id, when LinkedIn gives one.
        recipient_linkedin_profile_id:
          type: string
          description: Who it was addressed to.
        recipient_resolution:
          type: string
          enum:
            - provided_id
            - provided_slug
            - pair_table
            - crm_record
          description: How Groovin found the recipient.
        used_live_profile_fetch:
          type: boolean
          description: >-
            `true` when finding the recipient cost one live LinkedIn profile
            view. Automatic contact creation can cost one more.
        crm_contact_id:
          type:
            - string
            - 'null'
          description: The CRM contact the invitation was recorded on, if any.
        crm_contact_auto_created:
          type: boolean
          description: >-
            `true` when this call created a brand-new CRM contact. `false` when
            it only linked an existing one.
    Error:
      type: object
      description: >-
        What every failed request answers, with an HTTP status. The text can
        change: decide what to do from the status, and show the text to a
        person.
      required:
        - error
      properties:
        error:
          type: string
          description: What went wrong, and sometimes what to do next.
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        Your Groovin API key (`gv_live_…`), created in the extension under
        Settings, MCP and API.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.