Summary and recommendation
LinkedIn Recruiter exposes no user-management API. There is no endpoint for seat provisioning, role assignment, or deprovisioning - these operations are admin-UI-only. The only programmatic surface available is the Recruiter System Connect (RSC) API, which is an ATS integration layer covering jobs, candidates, and applications, not recruiter seat CRUD.
RSC access requires a formal LinkedIn Talent Solutions partnership application and approval. It is not self-serve, and all RSC endpoints return HTTP 403 without an approved partner contract. OAuth 2.0 uses a 3-legged authorization code flow; there is no documented service-account or client credentials flow for RSC.
For teams building identity graph integrations - mapping recruiter identities across HR systems, ATS platforms, and IdPs - LinkedIn Recruiter is a terminal node. It receives SSO assertions for authentication but emits no provisioning events and has no SCIM endpoint to sync against.
Any identity graph that expects bidirectional lifecycle signals from LinkedIn Recruiter will need a manual reconciliation layer.
API quick reference
| Has user API | No |
| Auth method | OAuth 2.0 (3-legged for RSC partner integrations) |
| Base URL | Official docs |
| SCIM available | No |
| SCIM plan required | Enterprise |
Authentication
Auth method: OAuth 2.0 (3-legged for RSC partner integrations)
Setup steps
- Apply for LinkedIn Recruiter System Connect (RSC) partner access via LinkedIn Talent Solutions partnership program.
- Once approved, register your application in the LinkedIn Developer Portal (developer.linkedin.com) and obtain a client_id and client_secret.
- Implement the OAuth 2.0 3-legged authorization code flow; redirect users to https://www.linkedin.com/oauth/v2/authorization with required scopes.
- Exchange the authorization code for an access token at https://www.linkedin.com/oauth/v2/accessToken.
- Use the access token as a Bearer token in the Authorization header for all RSC API calls.
Required scopes
| Scope | Description | Required for |
|---|---|---|
| r_liteprofile | Read basic profile data for authenticated LinkedIn members. | Identifying the authenticated recruiter user context. |
| r_recruiter_system_connect | Access RSC-specific endpoints for ATS integration (jobs, candidates, contracts). | All Recruiter System Connect API operations. |
User object / data model
User object field mapping is not yet verified for this app.
Core endpoints
Get RSC Contract (verify integration)
- Method: GET
- URL:
https://api.linkedin.com/v2/recruiterContracts - Watch out for: Only accessible to approved RSC partners. Returns contracts associated with the authenticated recruiter's organization.
Request example
GET /v2/recruiterContracts
Authorization: Bearer {access_token}
Response example
{
"elements": [
{"contractId": "123456", "name": "Acme Corp RSC"}
]
}
Get Job Postings
- Method: GET
- URL:
https://api.linkedin.com/v2/jobPostings - Watch out for: Requires contractId scoped to the RSC partner agreement. Not a general LinkedIn Jobs API.
Request example
GET /v2/jobPostings?q=recruiterJobs&contractId=123456
Authorization: Bearer {access_token}
Response example
{
"elements": [
{"id": "job_001", "title": "Software Engineer", "state": "LISTED"}
],
"paging": {"start": 0, "count": 10, "total": 42}
}
Get Candidate Profile (RSC)
- Method: GET
- URL:
https://api.linkedin.com/v2/candidates/{candidateId} - Watch out for: Candidate data access is gated by RSC partnership and the candidate's consent. Profile fields returned are limited compared to full member profile.
Request example
GET /v2/candidates/urn:li:candidate:789
Authorization: Bearer {access_token}
Response example
{
"id": "urn:li:candidate:789",
"firstName": "Jane",
"lastName": "Doe",
"applicationStatus": "APPLIED"
}
Rate limits, pagination, and events
- Rate limits: LinkedIn enforces application-level and member-level throttling on all API endpoints. RSC API limits are defined per approved partner contract and are not publicly documented in detail.
- Rate-limit headers: Yes
- Retry-After header: No
- Rate-limit notes: LinkedIn returns HTTP 429 when throttled. The X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers are present on responses. Exact numeric limits for RSC are not publicly disclosed.
- Pagination method: offset
- Default page size: 10
- Max page size: 50
- Pagination pointer: start / count
| Plan | Limit | Concurrent |
|---|---|---|
| RSC Partner (approved) | Defined per partner agreement; LinkedIn documentation references daily call limits per application and per member token. | 0 |
- Webhooks available: No
- Webhook notes: LinkedIn Recruiter does not offer a publicly documented webhook system for user or seat management events. RSC API provides some event-based callbacks for ATS integrations (e.g., application status changes) but these are limited to approved RSC partners and are not general-purpose webhooks.
- Alternative event strategy: RSC partners can poll RSC API endpoints for status changes. LinkedIn Talent Hub and some ATS integrations use RSC event notifications under the partner agreement.
SCIM API status
- SCIM available: No
- SCIM version: Not documented
- Plan required: Enterprise
- Endpoint: Not documented
Limitations:
- LinkedIn Recruiter does not support SCIM 2.0 provisioning as of the current documentation review.
- Seat assignment and user management must be performed manually through the LinkedIn Recruiter admin UI.
- SSO (SAML 2.0) is supported for authentication but does not extend to automated provisioning or deprovisioning.
- No IdP connectors (Okta, Entra ID, Google Workspace, OneLogin) are officially supported for SCIM with LinkedIn Recruiter.
Common scenarios
The primary legitimate API use case is ATS integration via RSC: syncing job postings from LinkedIn Recruiter into an ATS and writing application status changes back.
The flow requires completing RSC partner onboarding, implementing the 3-legged OAuth flow with a recruiter admin authorizing the integration, retrieving the contractId from GET /v2/recruiterContracts, and then fetching job postings scoped to that contract.
Bidirectional candidate data sync uses RSC candidate endpoints under the same partner agreement.
SSO configuration is a separate administrative workflow, not an API integration. It requires coordinating with a LinkedIn account manager to obtain SAML SP metadata, configuring the IdP, and mapping user attributes by LinkedIn member email. SSO handles authentication only - a user who authenticates successfully but holds no assigned Recruiter seat is denied access to Recruiter features. There is no JIT provisioning.
Seat provisioning has no API scenario. It is manual-only: Contract Admin logs in, navigates to Manage Seats, invites by email, sets role, and confirms. Bulk changes are not supported via API; the admin UI may support CSV import for some operations, but no programmatic path exists.
ATS Integration: Sync Job Postings from LinkedIn Recruiter to ATS
- Complete RSC partner onboarding with LinkedIn Talent Solutions.
- Implement OAuth 2.0 3-legged flow so a recruiter admin authorizes the ATS integration.
- Call GET /v2/recruiterContracts to retrieve the contractId for the organization.
- Call GET /v2/jobPostings?q=recruiterJobs&contractId={contractId} to fetch active job postings.
- Store job IDs and sync application data bidirectionally using RSC candidate endpoints.
Watch out for: RSC partnership approval can take weeks. Without an approved partner contract, all RSC endpoints return 403 Forbidden.
Manual Seat Provisioning (No API Available)
- Log in to LinkedIn Recruiter as a Contract Admin.
- Navigate to Admin Settings > Manage Seats.
- Invite users by LinkedIn email address to assign a Recruiter seat.
- Set role (Recruiter, Hiring Manager, Viewer) via the UI.
- For deprovisioning, remove the seat from the same admin panel.
Watch out for: There is no API or SCIM endpoint to automate this. Bulk seat changes must be done via CSV import in the admin UI or manually one-by-one.
SSO Configuration for LinkedIn Recruiter
- Contact your LinkedIn account manager to enable SSO for your Recruiter contract.
- Obtain the LinkedIn Recruiter SAML metadata from your account manager.
- Configure your IdP (e.g., Okta, Entra ID) with the LinkedIn Recruiter SAML SP metadata.
- Map IdP user attributes to LinkedIn member email for authentication.
- Test SSO login; note that SSO only handles authentication-seat provisioning remains manual.
Watch out for: SSO does not trigger automatic seat assignment (no SCIM). A user who authenticates via SSO but has no assigned Recruiter seat will be denied access to Recruiter features.
Why building this yourself is a trap
The most significant integration trap is conflating RSC with a user-management API. RSC is scoped to ATS workflows - jobs and candidates - and has no seat or role endpoints.
Developers who discover the RSC documentation and assume it covers recruiter lifecycle management will invest in a partnership approval process that does not solve the provisioning problem.
Rate limits for RSC are contractually defined per partner agreement and are not publicly disclosed. HTTP 429 responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers, but no Retry-After header is documented. Pagination uses offset-based start/count parameters with a maximum page size of 50.
LinkedIn's newer APIs require a date-versioned LinkedIn-Version header (e.g., 202304); RSC endpoints may require this header and omitting it can produce unexpected responses.
Candidate data returned via RSC is subject to LinkedIn's data usage policies and cannot be stored indefinitely - a constraint that affects any pipeline attempting to cache or replicate LinkedIn profile data outside the platform.
OAuth tokens are scoped to the authorizing recruiter; there is no machine-to-machine flow, which means token lifecycle management is tied to individual user accounts and creates a dependency risk if the authorizing user's seat is removed.
Automate LinkedIn Recruiter workflows without one-off scripts
Stitchflow builds and maintains end-to-end IT automation across your SaaS stack, including apps without APIs. Built for exactly how your company works, with human approvals where they matter.