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

# List your LinkedIn connections

> See your 1st-degree connections, newest first. Filter by date or name.

> [!WARNING]
>
> This reads LinkedIn live through your account. Keep the prefilled `limit`: without it, Groovin reads your whole network, at one LinkedIn request per 1,000 connections.

## What this call does

| | |
| - | - |
| **LinkedIn** | Live read: 1 request per 1,000 connections, stopping early with `limit` or `connected_after` |
| **Your CRM** | None |
| **Also** | An empty request reads your whole network |
| **Repeating it** | Each repeat costs LinkedIn requests: wait before trying again. |

## Good to know

* After a first full read, only read the newest page, a few times a day at most, at irregular times. A fixed schedule looks like automation to LinkedIn.
* To follow new connections, use the [`linkedin.relation.created` webhook](https://docs.groovin.ai/reference/webhooks/relation-created) rather than polling.

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


## OpenAPI

````yaml reference/openapi.json POST /linkedin/relations
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/relations:
    post:
      tags:
        - LinkedIn
      summary: List your LinkedIn connections
      description: See your 1st-degree connections, newest first. Filter by date or name.
      operationId: list_linkedin_relations
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                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.
                connected_after:
                  type: string
                  description: >-
                    Only connections made since this date, such as
                    `"2026-10-01"`. The cheapest way to get what is new: reading
                    stops as soon as it gets past that date.
                connected_before:
                  type: string
                  description: Only connections made up to this date.
                name_filter:
                  type: string
                  description: >-
                    Search by name. LinkedIn runs the search, and it is still a
                    live request.
                limit:
                  type: integer
                  description: >-
                    The most connections to return. Reading stops once this many
                    are found, usually after one request. The playground fills
                    this in for you. The API itself has no default: without
                    `limit`, you get everything.
                  default: 10
              required: []
            examples:
              placeholder:
                summary: Replace every value
                value:
                  limit: 10
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListRelationsResult'
              example:
                org_linkedin_account_id: 4821
                total_matched: 10
                returned: 1
                truncated: true
                linkedin_requests: 1
                relations:
                  - linkedin_profile_id: ACoAAExampleLinkedinProfileId
                    slug: john-smith
                    name: John Smith
                    first_name: John
                    last_name: Smith
                    headline: Founder at Example Co
                    profile_url: https://www.linkedin.com/in/john-smith
                    picture_url: null
                    member_urn: null
                    connection_urn: null
                    created_at: 1762070400000
                    connected_at: '2025-11-02T08:00:00.000Z'
                    already_paired_in_groovin: 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'
        '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'
components:
  schemas:
    ListRelationsResult:
      type: object
      description: Your LinkedIn connections, newest first.
      required:
        - org_linkedin_account_id
        - total_matched
        - returned
        - truncated
        - linkedin_requests
        - relations
      properties:
        org_linkedin_account_id:
          type: integer
          description: Groovin's id for the LinkedIn account this answer is about.
        total_matched:
          type: integer
          description: >-
            Matches among the pages actually read. When `truncated` is `true`,
            the real total can be higher.
        returned:
          type: integer
          description: Connections in this answer.
        truncated:
          type: boolean
          description: '`true` when more matches may exist than were returned.'
        linkedin_requests:
          type: integer
          description: Live LinkedIn requests this call made.
        relations:
          type: array
          items:
            $ref: '#/components/schemas/RelationItem'
          description: The connections.
    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.
    RelationItem:
      type: object
      description: One of your LinkedIn connections.
      required:
        - linkedin_profile_id
        - slug
        - name
        - first_name
        - last_name
        - headline
        - profile_url
        - picture_url
        - member_urn
        - connection_urn
        - created_at
        - connected_at
        - already_paired_in_groovin
      properties:
        linkedin_profile_id:
          type: string
          description: LinkedIn profile id, the `ACoAA…` identifier of a person.
        slug:
          type:
            - string
            - 'null'
          description: >-
            The public part of the person's LinkedIn URL, as in
            `linkedin.com/in/<slug>`.
        name:
          type: string
          description: Their name.
        first_name:
          type:
            - string
            - 'null'
          description: First name.
        last_name:
          type:
            - string
            - 'null'
          description: Last name.
        headline:
          type:
            - string
            - 'null'
          description: Their LinkedIn headline.
        profile_url:
          type:
            - string
            - 'null'
          description: Their LinkedIn profile URL.
        picture_url:
          type:
            - string
            - 'null'
          description: Their profile picture URL.
        member_urn:
          type:
            - string
            - 'null'
          description: >-
            LinkedIn's internal reference for this person. Use
            `linkedin_profile_id` instead.
        connection_urn:
          type:
            - string
            - 'null'
          description: LinkedIn's internal reference for this connection.
        created_at:
          type:
            - integer
            - 'null'
          description: >-
            When you connected, in milliseconds since 1970. `connected_at` is
            the same date, easier to read.
        connected_at:
          type:
            - string
            - 'null'
          description: When you connected (ISO 8601).
        already_paired_in_groovin:
          type: boolean
          description: >-
            `true` when Groovin already links this person to a CRM contact. A
            quick Groovin check, not a live CRM search.
        is_crm_contact_creation_blocked:
          const: true
          description: >-
            Only present, as `true`, when you blocked this person from CRM
            contact creation in Groovin. `crm/contacts` does not enforce the
            block, so check it yourself before creating.
  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.