---
title: "Mint a hosted LinkedIn connect link"
method: POST
path: "/users/{externalUserId}/linkedin/connect-links"
tags: ["Partner"]
---

# Mint a hosted LinkedIn connect link

`POST /users/{externalUserId}/linkedin/connect-links`

## Request

- Base URL: `https://app.pumpgtm.com/api/partner/v1`
- URL: `https://app.pumpgtm.com/api/partner/v1/users/{externalUserId}/linkedin/connect-links`
- Auth: HTTP bearer

409 account_limit_reached when every LinkedIn account included in your plan is already connected (see accounts on GET /account). Enterprise. Returns a PumpGTM-hosted url (shown once, never stored in clear) where this end user signs in to LinkedIn themselves; open it in a popup, never an iframe. Links are single use and expire after 7 days by default (expiresInMinutes 10 to 43200). Completion is announced through your linkedin.connected webhook and the redirect URLs from PATCH /account; GET the link to poll. Webhook, redirect and poll have no ordering guarantee: treat all three as idempotent on connectLink.id. This route creates the user's workspace if it does not exist yet. A user may hold at most 10 open links (409 connect_link_limit_reached). 400 invalid_expires_in_minutes with field. A 409 saying the link cannot be minted because of a problem with your partner account creates nothing; contact PumpGTM rather than retrying.

## Path parameters

- `externalUserId` string, required: Your own id for the end user: letters, digits and _ . : @ -, up to 120 characters.

## Request body

- object
  - `expiresInMinutes` integer, nullable

## Response `201`

Successful response. Read outcome fields; success does not imply delivery.

- object
  - `connectLink` object, required
    - `id` string, uuid, required
    - `externalUserId` string, required: Your own id for the end user: letters, digits and _ . : @ -, up to 120 characters.
    - `status` 'pending' | 'connected' | 'expired' | 'revoked', required: expired and revoked are final; mint a new link.
    - `expiresAt` string, required
    - `connectedAt` string, nullable, required
    - `revokedAt` string, nullable, required
    - `createdAt` string, required
  - `url` string, required

## Other responses

- `400`: Invalid input; for partner keys also user_header_required when the account requires X-PumpGTM-User
- `401`: Missing, invalid or revoked key
- `403`: Workspace mismatch, channel or feature disabled; for partner keys also enterprise_required and user_disabled
- `404`: Resource unavailable in this workspace
- `409`: Revision, identity or state conflict: { error, message } and nothing changed
- `429`: Rate limit; respect Retry-After when provided
- `500`: internal_error: an unexpected failure on our side; retry, then contact PumpGTM
- `503`: Dependency unavailable; identity may be unknown

## Changes

- **2026-10-12** `06d2e4d0e84b`: 8 info
  - the response property `error` became required for the status `400`
  - the response property `error` became required for the status `401`
  - the response property `error` became required for the status `403`
  - the response property `error` became required for the status `404`
  - …4 more
- **2026-10-12** `08c80059d483`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/pumpgtm/apis/pumpgtm-api/changes/users/:externalUserId/linkedin/connect-links/post.md)

---

[API](https://skmtc.dev/pumpgtm/apis/pumpgtm-api.md) - [All operations](https://skmtc.dev/pumpgtm/apis/pumpgtm-api/llms.txt) - [OpenAPI document](https://skmtc.dev/pumpgtm/apis/pumpgtm-api/revisions/06d2e4d0e84b?raw)
