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

# Resolve LinkedIn Checkpoint

> Resolve a Checkpoint or check for in-app resolution.

This endpoint resolves LinkedIn authentication checkpoints that occur during the login process. LinkedIn may require additional verification steps to complete the authentication.

## Checkpoint Types

LinkedIn may present different types of checkpoints during authentication. Here's how to handle each one:

### **`IN_APP_VALIDATION`** - Mobile App Approval

The user must approve the login in their LinkedIn mobile app.

<Tip>
  **For `IN_APP_VALIDATION` checkpoints**:

  1. **User Action**: The user must approve the login in their LinkedIn mobile app
  2. **Your Action**: Poll this endpoint with an empty request body `{}`
  3. **Timing**: Check every 5-10 seconds with a maximum timeout of 5 minutes
  4. **Completion**: Stop when you receive a success response or permanent error

  **Note**: No verification code is required for mobile app authentication.
</Tip>

### **`2FA`** - Two-Factor Authentication

Two-factor authentication via authenticator app.

* **Action**: Provide the 6-digit code from the user's authenticator app
* **Timing**: Codes expire quickly, so prompt users to provide them promptly
* **Request**: Send the code in the request body: `{"code": "123456"}`

### **`OTP`** - One-Time Password (SMS)

One-time password sent via SMS to the user's phone number.

* **Action**: Provide the SMS code sent to the user's phone
* **Timing**: Codes typically expire within 10-15 minutes
* **Request**: Send the code in the request body: `{"code": "123456"}`

### **`EMAIL`** - Email Verification

Verification code sent to the user's email address.

* **Action**: Provide the code sent to the user's registered email
* **Note**: Check spam/junk folders if the email doesn't arrive
* **Request**: Send the code in the request body: `{"code": "123456"}`

### **`PHONE_REGISTER`** - Phone Number Verification

Phone number verification required by LinkedIn.

* **Action**: User needs to verify their phone number with LinkedIn
* **Note**: May require providing a new phone number or confirming existing one
* **Request**: Send any required verification code: `{"code": "123456"}`

### **`CAPTCHA`** - Visual/Audio Challenge

Visual or audio challenge to prove human interaction.

* **Action**: Poll **`POST .../integrations/linkedin/checkpoint`** with `{}` until the challenge clears; then handle any **next** checkpoint type using this page.
* **Request**: `{}` for this polling flow (no code in the body)

### **`LOGIN_FORM`** - Additional Login Fields

Additional login form fields required by LinkedIn.

* **Action**: LinkedIn may request additional information (security questions, etc.)
* **Note**: Contact support if this checkpoint type is encountered
* **Request**: Contact support with the `identity_uid` for assistance

### **`UNKNOWN`** - Unrecognized Checkpoint

Unrecognized checkpoint type.

* **Action**: Contact support with the `identity_uid` for assistance
* **Note**: This may indicate a new checkpoint type that needs to be handled

## Request Examples

**For checkpoint types requiring codes:**

```json theme={null}
{
  "code": "123456"
}
```

**For `IN_APP_VALIDATION` or `CAPTCHA` checkpoints:**

```json theme={null}
{}
```

## Error Handling

* **`IN_APP_CHALLENGE_PENDING`**: Continue polling for `IN_APP_VALIDATION` checkpoints
* **`IN_APP_CHALLENGE_EXPIRED`**: Restart the authentication process
* **`2FA_VALIDATION_EXPIRED`**: Restart the authentication process
* **`CHECKPOINT_MISSING_DATA`**: Restart the authentication process
* **`INVALID_CODE`**: The provided code is incorrect, try again


## OpenAPI

````yaml v1/api/business.json post /identities/{identity_uid}/integrations/linkedin/checkpoint
openapi: 3.1.0
info:
  title: ED's Public API
  description: ED's Public API
  version: 26.622.88
servers:
  - url: https://api.edges.run/v1/
security:
  - APIKeyHeader: []
paths:
  /identities/{identity_uid}/integrations/linkedin/checkpoint:
    post:
      tags:
        - Core
      summary: Resolve a Checkpoint or check for in-app resolution.
      description: Resolve a Checkpoint or check for in-app resolution.
      operationId: account_checkpoint
      parameters:
        - name: identity_uid
          in: path
          required: true
          schema:
            type: string
            format: uuid
            title: Identity Uid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValidateAccountCheckpointInput'
            example:
              code: '925632'
      responses:
        '200':
          description: Successfully created a new account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse_AccountPublicModel_'
              example:
                auth_type: COOKIES
                setup_source: API
                is_shared: false
                name: John Doe's Example Integration Account
                uid: 123e4567-e89b-12d3-a456-426614174000
                integration_permalink: example-integration
                created_at: '2023-10-01T12:00:00Z'
                level: Classic
                identity_uid: 5678e456-e89b-12d3-a456-426614174001
                meta:
                  key: value
                status: VALID
        '400':
          description: Bad Request.
          content:
            application/json:
              examples:
                in-app-challenge-pending-400:
                  summary: Can't validate the login challenge.
                  value:
                    message: >-
                      Error while resolving the challenge, can't validate the
                      login challenge.
                    error_label: CREATE_OR_UPDATE_ACCOUNT_409_CONFLICT
        '409':
          description: Conflict.
          content:
            application/json:
              examples:
                account-mismatch-409-conflict:
                  summary: Your account does not match the one previously synchronized.
                  value:
                    message: >-
                      Please note that your account is different from the one
                      that has already been synchronized.
                    error_label: CREATE_OR_UPDATE_ACCOUNT_409_CONFLICT
                linkedin-id-conflict-409:
                  summary: LinkedIn ID conflict.
                  value:
                    message: An account with the same Linkedin ID already exists.
                    error_label: CREATE_OR_UPDATE_ACCOUNT_409_CONFLICT
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '500':
          description: internal Error.
          content:
            application/json:
              examples:
                in-app-challenge-pending-500:
                  summary: Wating for user validation.
                  value:
                    message: Waiting for user to validate in_app_challenge.
                    error_label: IN_APP_CHALLENGE_PENDING
                in-app-challenge-unknown-500:
                  summary: Challenge expired or already validated.
                  value:
                    message: >-
                      In_app_challenge expired. Please retry the whole process
                      by sending credentials again on /authenticate.
                    error_label: IN_APP_CHALLENGE_EXPIRED
                2fa-validation-500:
                  summary: 2FA challenge expired or already validated.
                  value:
                    message: >-
                      2FA expired. Please retry the whole process by sending
                      credentials again on /authenticate.
                    error_label: 2FA_VALIDATION_EXPIRED
                checkpoint-missing-data-500:
                  summary: Error while resolving the checkpoint challenge.
                  value:
                    message: >-
                      Error while solving the challenge, retry the whole process
                      by sending credentials to /authenticate again.
                    error_label: CHECKPOINT_MISSING_DATA
components:
  schemas:
    ValidateAccountCheckpointInput:
      properties:
        code:
          anyOf:
            - type: string
            - type: 'null'
          title: Code
      type: object
      title: ValidateAccountCheckpointInput
    GenericResponse_AccountPublicModel_:
      allOf:
        - $ref: '#/components/schemas/AccountPublicModel'
      title: GenericResponse[AccountPublicModel]
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    AccountPublicModel:
      properties:
        setup_source:
          anyOf:
            - type: string
              enum:
                - MANUAL
                - EXTENSION
                - SHARED
                - API
            - type: 'null'
          title: Setup Source
        auth_method:
          anyOf:
            - type: string
              enum:
                - BASIC
                - OAUTH
                - COOKIES
                - APIKEY
            - type: 'null'
          title: Auth Method
        is_shared:
          type: boolean
          title: Is Shared
          default: false
        name:
          anyOf:
            - type: string
            - type: 'null'
          title: Name
        uid:
          type: string
          format: uuid
          title: Uid
        integration_permalink:
          anyOf:
            - type: string
            - type: 'null'
          title: Integration Permalink
        created_at:
          type: string
          format: date-time
          title: Created At
        updated_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Updated At
        level:
          anyOf:
            - type: string
            - type: 'null'
          title: Level
        user_uid:
          anyOf:
            - type: string
              format: uuid
            - type: 'null'
          title: User Uid
        identity_uid:
          type: string
          format: uuid
          title: Identity Uid
        meta:
          anyOf:
            - $ref: '#/components/schemas/IntegrationAccountMeta'
            - type: 'null'
          title: Meta
        error:
          anyOf:
            - type: string
            - type: 'null'
          title: Error
        status:
          type: string
          enum:
            - VALID
            - INVALID
            - PENDING
            - LIMIT_REACHED
          title: Status
        last_synced_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Last Synced At
      type: object
      required:
        - identity_uid
        - status
      title: AccountPublicModel
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    IntegrationAccountMeta:
      properties:
        name:
          anyOf:
            - type: string
            - type: 'null'
          title: Name
        id:
          anyOf:
            - type: string
            - type: integer
            - type: 'null'
          title: Id
        url:
          anyOf:
            - type: string
            - type: 'null'
          title: Url
        type:
          anyOf:
            - type: string
            - type: 'null'
          title: Type
        profile_image_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Profile Image Url
        country:
          anyOf:
            - type: string
            - type: 'null'
          title: Country
        language:
          anyOf:
            - type: string
            - type: 'null'
          title: Language
        email:
          anyOf:
            - type: string
            - type: 'null'
          title: Email
        emails:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Emails
        phone:
          anyOf:
            - type: string
            - type: 'null'
          title: Phone
        phones:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Phones
      type: object
      title: IntegrationAccountMeta
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        API key required for authentication. Add your API key in the X-API-Key
        header.

````