Fetch LinkedIn profile information (GET)
Retrieve detailed profile information for a LinkedIn member via query parameters. Same functionality as POST /profile but using GET method for simpler integration. Results are cached for 6 hours. Rate limit: 120 unique profiles per day per LinkedIn account (cached requests do not count against limit). `relationshipStatus` is the source of truth for the relationship — `CONNECTED`, `INVITATION_SENT`, `INVITATION_RECEIVED` or `NOT_CONNECTED`. `INVITATION_RECEIVED` means they invited YOU: they are not a connection and cannot be messaged. `connectionDegree` is `"1st"` when connected and `null` otherwise. Cached responses can be stale by up to 6 hours, including the relationship fields. Pass `forceRefresh=true` when the answer must be current — for example before deciding whether someone can be messaged.
/profileCode Examples
curl -X GET 'https://api.connectsafely.ai/linkedin/profile' \ -H 'Authorization: Bearer <your_api_key>'Retrieve detailed profile information for a LinkedIn member via query parameters. Same functionality as POST /profile but using GET method for simpler integration. Results are cached for 6 hours. Rate limit: 120 unique profiles per day per LinkedIn account (cached requests do not count against limit).
relationshipStatus is the source of truth for the relationship — CONNECTED, INVITATION_SENT, INVITATION_RECEIVED or NOT_CONNECTED. INVITATION_RECEIVED means they invited YOU: they are not a connection and cannot be messaged. connectionDegree is "1st" when connected and null otherwise.
Cached responses can be stale by up to 6 hours, including the relationship fields. Pass forceRefresh=true when the answer must be current — for example before deciding whether someone can be messaged.
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
profileId | query | Yes | string | LinkedIn profile vanity URL slug (the part after linkedin.com/in/, e.g., "john-doe-123") |
accountId | query | No | string | LinkedIn account ID to use. If not provided, uses the default account. |
includeGeoLocation | query | No | boolean | Include detailed geo location data |
includeContact | query | No | boolean | Include contact info if visible |
forceRefresh | query | No | boolean | Skip cache and fetch fresh data |
Request Body
No request body.
Responses
| Status | Description |
|---|---|
| 200 | Profile information retrieved successfully |
| 400 | Bad request - Missing profileId |
| 401 | Unauthorized |
200 Response Parameters
| Name | Type | Description |
|---|---|---|
success | boolean | |
profileId | string | |
accountId | string | |
cached | boolean | true when served from the 6-hour cache. Cached relationship fields can be up to 6 hours stale — use forceRefresh=true when that matters. |
profile | object | Profile object — identical shape to POST /profile. |
200 Example
{
"success": true,
"profileId": "anandi-devi",
"accountId": "696ce9e780e0483585e4e553",
"cached": false,
"profile": {
"firstName": "Anandi",
"lastName": "Devi",
"headline": "Go-To-Market (GTM) Engineer @ ConnectSafely | MBA",
"entityUrn": "urn:li:fsd_profile:ACoAAFpqSoMB8vTqRbg4mN_wbabO8w0gjgFu-6o",
"publicIdentifier": "anandi-devi",
"isPremium": true,
"isConnected": true,
"relationshipStatus": "CONNECTED",
"connectionDegree": "1st"
}
}400 Example
{
"error": "profileId query parameter is required",
"success": false
}401 Example
{
"error": "Unauthorized"
}