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

# Get one LinkedIn profile

> Send Fetchin's own request (`GET https://api.fetchin.io/api/v1/profile`) to api.datacircle.dev, with your Datacircle key in `Authorization` and `X-Data-Provider: fetchin`. The path and the query stay the same. We charge $0.001485 per profile, found or not, with no markup.



## OpenAPI

````yaml /openapi.json get /api/v1/profile
openapi: 3.1.0
info:
  title: Datacircle API
  version: '1'
  description: >-
    Datacircle is a data co-op.


    Step 1: Query your favorite B2B data APIs through us. Same request, same
    price, no markup.


    Step 2: You're DONE. Every morning, you get the flat file of your data plus
    everyone else's.


    You send the provider's own request to api.datacircle.dev, with your
    Datacircle key. That's the only change.


    Right now we have 3 live LinkedIn profile APIs that we trust: Up2Data,
    HarvestAPI and Fetchin. Each request goes to the provider and gets the
    profile as it is today.


    Add \$50 to your account: you get \$50 of API PLUS the flat file.


    Sign up at datacircle.dev with your work email: a \$5 credit, that's 2,105
    LinkedIn profiles at \$2.375 per 1,000.


    Use it from Claude, ChatGPT or Cursor: add api.datacircle.dev/mcp as an MCP
    server.


    The docs: [docs.datacircle.dev](https://docs.datacircle.dev).
  termsOfService: https://datacircle.dev/terms
  contact:
    name: Datacircle
    url: https://datacircle.dev
    email: wayne@datacircle.dev
  x-logo:
    url: https://datacircle.dev/favicon.png
    altText: Datacircle
servers:
  - url: https://api.datacircle.dev
security:
  - token: []
tags:
  - name: Datacircle
    description: 'Your Datacircle account: balance, adding funds, files, API key.'
  - name: Up2Data
    description: >-
      LinkedIn Profile API: Up2Data's own request, sent to api.datacircle.dev
      with your Datacircle key and `X-Data-Provider: up2data`.
  - name: HarvestAPI
    description: >-
      LinkedIn Profile API: HarvestAPI's own request, sent to api.datacircle.dev
      with your Datacircle key and `X-Data-Provider: harvestapi`.
  - name: Fetchin
    description: >-
      LinkedIn Profile API: Fetchin's own request, sent to api.datacircle.dev
      with your Datacircle key and `X-Data-Provider: fetchin`.
externalDocs:
  description: Datacircle docs
  url: https://docs.datacircle.dev
paths:
  /api/v1/profile:
    get:
      tags:
        - Fetchin
      summary: Get one LinkedIn profile
      description: >-
        Send Fetchin's own request (`GET https://api.fetchin.io/api/v1/profile`)
        to api.datacircle.dev, with your Datacircle key in `Authorization` and
        `X-Data-Provider: fetchin`. The path and the query stay the same. We
        charge $0.001485 per profile, found or not, with no markup.
      parameters:
        - name: profileUrlOrUrn
          in: query
          required: true
          description: >-
            The profile's LinkedIn URL, e.g.
            `https://www.linkedin.com/in/williamhgates`. The only Fetchin
            parameter Datacircle passes on, and only as a profile URL: Fetchin's
            public identifier and URN forms, and `fullProfile`, are refused with
            a `400`, not charged.
          schema:
            type: string
          example: https://www.linkedin.com/in/williamhgates
        - name: X-Data-Provider
          in: header
          required: true
          description: >-
            Names the provider: `fetchin`. This header and the host are the only
            changes from the provider's own request.
          schema:
            type: string
            enum:
              - fetchin
            default: fetchin
          example: fetchin
      responses:
        '200':
          description: 'Fetchin''s answer plus `datacircle_meta`: the profile ($0.001485)'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FetchinProfileResponse'
              example:
                id: …
                firstName: …
                lastName: …
                title: …
                titleLocalized:
                  en_US: …
                profilePictureUrl: …
                profilePictureUrls:
                  - url: …
                    width: 0
                    height: 0
                location: …
                coverImageUrl: …
                coverImageUrls:
                  - url: …
                    width: 0
                    height: 0
                publicIdentifier: …
                url: …
                profileId: …
                geoLocationName: …
                geoCountryName: …
                connectionType: …
                creator: true
                influencer: true
                premium: true
                isVerified: true
                geoUrn: …
                creatorInfo:
                  hashTags:
                    - …
                  website: …
                memberId: …
                openToWork: false
                hiring: false
                inRemembrance: false
                topVoice: true
                followerCount: 0
                connectionsCount: 0
                countryCode: …
                jobTitle: …
                companyName: …
                companyPublicId: …
                companyLinkedinUrl: …
                currentPosition:
                  positionUrn: …
                  name: …
                  companyId: …
                  companyUrn: …
                  publicIdentifier: …
                  url: …
                  title: …
                currentSchool: null
                openProfile: false
                description: …
                languages: []
                certifications: []
                volunteerCauses: []
                skills: []
                experiences:
                  - name: …
                    jobTitle: …
                    description: …
                    dateRange: …
                    current: true
                    ongoing: true
                    positionUrn: …
                    positionGroupUrn: …
                    positionGroupId: …
                    timePeriod:
                      startDate:
                        year: 0
                      endDate: null
                    totalDuration: …
                    company:
                      url: …
                      name: …
                      logo: …
                      companyId: …
                      urn: …
                educations:
                  - name: …
                    description: …
                    dateRange: …
                    current: false
                    ongoing: false
                    educationUrn: …
                    schoolLogo: …
                    schoolUrl: …
                    timePeriod:
                      startDate:
                        year: 0
                      endDate:
                        year: 0
                joinDate:
                  month: 0
                  year: 0
                websites:
                  - url: …
                    category: …
                recommendations: []
                recommendationsGiven: []
                testScores: []
                publications: []
                projects: []
                patents: []
                honors: []
                organizations: []
                courses: []
                volunteerExperiences: []
                industry: …
                industryUrn: …
                primaryLocale: …
                supportedLocales:
                  - …
                descriptionLocalized:
                  en_US: …
                entityType: Person
                datacircle_meta:
                  provider: fetchin
                  cost_usd: 0.001485
                  balance_usd: 20.5
        '400':
          description: >-
            Not charged: no `profileUrlOrUrn`, one that isn't a LinkedIn profile
            URL (`https://www.linkedin.com/in/<slug>`), a query parameter other
            than `profileUrlOrUrn`, or an `X-Data-Provider` value that isn't
            `up2data`, `harvestapi` or `fetchin` (`Error`). Or Fetchin's own
            `400`, passed on (`FetchinError`)
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/FetchinError'
                  - $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: Balance too low
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                  - balance_usd
                properties:
                  error:
                    type: string
                    description: >-
                      Why the call was refused: your balance can't cover it. Not
                      charged.
                  balance_usd:
                    type: number
                    description: >-
                      Your balance now, in dollars (`balance_usd` in `GET
                      /balance/`). `POST /checkout/` adds funds.
                additionalProperties: false
        '404':
          description: >-
            Fetchin can't find the profile (`FetchinError`, `code:
            PROFILE_NOT_FOUND`): $0.001485, Fetchin bills the lookup. Or no
            `X-Data-Provider` header, or a path Datacircle doesn't call for that
            provider (`Error`), not charged
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/FetchinError'
                  - $ref: '#/components/schemas/Error'
              example:
                error: LinkedIn profile not found
                code: PROFILE_NOT_FOUND
                datacircle_meta:
                  provider: fetchin
                  cost_usd: 0.001485
                  balance_usd: 20.5
        '429':
          description: >-
            Fetchin's rate limit (`code: RATE_LIMITED`): 5 requests a second for
            all Datacircle customers together. Not charged. Send the same
            request again in a second.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FetchinError'
        '502':
          description: >-
            Fetchin's own server failed: its error passes on as it came, with
            its status (`500`, `503` and `504` too, in `FetchinError`). Not
            charged. Send the same request again.
        '503':
          description: >-
            Fetchin hasn't answered within 45 s, can't be reached, or refused
            Datacircle's own account (its `401`, `402` or `403`): Datacircle
            stops waiting. Not charged. Send the same request again.
          content:
            application/json:
              schema:
                type: object
                description: >-
                  Datacircle's own answer when the provider hasn't answered
                  within 45 s, retries included, or can't be reached. Not
                  charged.
                required:
                  - error
                  - balance_usd
                properties:
                  error:
                    type: string
                    description: What went wrong, in plain words.
                  balance_usd:
                    type: number
                    description: >-
                      Your balance now, in dollars (`balance_usd` in `GET
                      /balance/`).
                additionalProperties: false
      x-codeSamples:
        - lang: bash
          label: curl
          source: >-
            curl
            "https://api.datacircle.dev/api/v1/profile?profileUrlOrUrn=https://www.linkedin.com/in/williamhgates"
            \
              -H "Authorization: Token $DATACIRCLE_API_KEY" \
              -H "X-Data-Provider: fetchin"
        - lang: python
          label: Python
          source: |-
            import os

            import requests

            response = requests.get(
                "https://api.datacircle.dev/api/v1/profile",
                headers={"Authorization": f"Token {os.environ['DATACIRCLE_API_KEY']}", "X-Data-Provider": "fetchin"},
                params={'profileUrlOrUrn': 'https://www.linkedin.com/in/williamhgates'},
            )
            print(response.json())
components:
  schemas:
    FetchinProfileResponse:
      type: object
      properties:
        id:
          type: string
          description: Profile URN (unique identifier)
        firstName:
          type: string
          description: Profile first name.
        lastName:
          type: string
          description: >-
            Profile last name. Some members restrict their full surname to their
            own contacts. For those profiles this is the publicly displayed
            initial (e.g. "D.") and `lastNameInitialOnly` is true. The full
            surname is not available through any request in that case.
        lastNameInitialOnly:
          type: boolean
          description: >-
            Present and true only when `lastName` is an initial because the
            member restricts it. Absent otherwise, never false.
        title:
          type: string
          description: >-
            Professional headline. A member can publish their profile in several
            languages and the source does not translate between them. This is
            the English version when the member published one, otherwise the
            version in their `primaryLocale`. Deterministic: two calls return
            the same language. Every version they did publish is in
            `titleLocalized` / `descriptionLocalized`.
        titleLocalized:
          type: object
          additionalProperties:
            type: string
          description: >-
            The title in each language the member published, keyed by locale
            ("fr_FR", "en_US").
        description:
          type: string
          description: >-
            About/summary section. A member can publish their profile in several
            languages and the source does not translate between them. This is
            the English version when the member published one, otherwise the
            version in their `primaryLocale`. Deterministic: two calls return
            the same language. Every version they did publish is in
            `titleLocalized` / `descriptionLocalized`. Line breaks are returned
            exactly as the source stores them: for some profiles the source
            holds this text with its line breaks already removed, and they are
            not reconstructed by guesswork.
        descriptionLocalized:
          type: object
          additionalProperties:
            type: string
          description: >-
            The description in each language the member published, keyed by
            locale.
        location:
          type: string
          description: Where the member is, as the profile shows it.
        profilePictureUrl:
          type: string
          description: >-
            Profile picture URL, largest size available. Always a string: when
            the member has no photo of their own it holds a generic placeholder
            image and `profilePictureUrls` is absent.
        profilePictureUrls:
          type: array
          description: >-
            Every size of the profile picture, smallest first, one entry per
            distinct size (how many varies: a small original comes in fewer
            sizes). The last entry is the image `profilePictureUrl` points to
            (the framed picture when the member displays a photo frame). Absent,
            not empty and not null, when the member has no photo of their own,
            which is how to tell a real photo from the placeholder in
            `profilePictureUrl`. Not returned for organization records.
          items:
            type: object
            description: >-
              One size of an image. Read the size from `width` and `height`,
              never from the URL: the size written in the URL path is the size
              that was requested and can differ from the file served. Image URLs
              are signed and stop working after an expiry date the source sets
              (their `e=` query parameter), which we do not control. Download an
              image to keep it rather than storing its URL.
            required:
              - url
            properties:
              url:
                type: string
                description: Image URL
              width:
                type: integer
                description: >-
                  Width in pixels, as declared by the source. Omitted when it
                  declares none.
              height:
                type: integer
                description: >-
                  Height in pixels, as declared by the source. Omitted when it
                  declares none.
        experiences:
          type: array
          description: >-
            Complete work history, most recent first. Every position comes back
            in one call, with no pagination, even for members with dozens of
            past employers or many roles at one employer. When a section came
            back incomplete, the top-level `partial` object names it.
          items:
            type: object
            properties:
              name:
                type: string
                description: Company name
              jobTitle:
                type: string
                description: Job title/role
              description:
                type: string
                description: Role description
              dateRange:
                type: string
                description: Date range
              current:
                type: boolean
                description: >-
                  Whether this is the role the member marks as primary, the one
                  at the top of their profile. At most one experience in the
                  response is true, and it is false once that role has ended. To
                  find every current role, use `ongoing`.
              positionUrn:
                type: string
                description: >-
                  URN of this position entity. Join key for
                  `currentPosition.positionUrn`
              positionGroupUrn:
                type: string
                description: >-
                  The stint this role belongs to. A stint is one unbroken period
                  at one employer: the member held its roles back to back, and
                  they sit next to each other in `experiences`. A member who
                  leaves an employer and comes back has two stints, so two
                  different values with the same `company.companyId`: group by
                  this, not by `companyId`. Opaque, and the same only within one
                  response: Fetchin may give the same stint another value on a
                  later fetch. Fetchin omits it in the rare case it cannot group
                  the roles.
              positionGroupId:
                type: string
                description: >-
                  The key inside `positionGroupUrn`, in the spirit of
                  `companyId` / `geoId`. It is a 40-character hexadecimal
                  string, not a number. Only meaningful together with the
                  profile it came from, so never use it on its own.
              locationName:
                type: string
                description: >-
                  Job location in the member's profile language (e.g.
                  "Barcelona, Cataluna, Espana"). Free text: use
                  `geoId`/`geoUrn` to normalise or group. The top-level
                  `primaryLocale` gives the profile language.
              employmentType:
                type: string
                description: Employment type (e.g., Freelance, Part-time)
              timePeriod:
                type: object
                properties:
                  startDate:
                    type: object
                    properties:
                      month:
                        type: integer
                        description: The month, 1 to 12.
                      year:
                        type: integer
                        description: The year.
                    description: When it started.
                  endDate:
                    type:
                      - object
                      - 'null'
                    properties:
                      month:
                        type: integer
                        description: The month, 1 to 12.
                      year:
                        type: integer
                        description: The year.
                    description: When it ended. `null` while it lasts.
                description: When it started and ended.
              totalDuration:
                type: string
                description: Duration string (e.g., 3 yrs 1 mo)
              company:
                type: object
                properties:
                  name:
                    type: string
                    description: The company's name.
                  url:
                    type: string
                    description: Company profile URL
                  logo:
                    type: string
                    description: Company logo URL
                  companyId:
                    type: string
                    description: >-
                      Numeric company id (e.g. "8736"), parsed from the company
                      URN
                  urn:
                    type: string
                    description: Full company URN
                description: >-
                  The employer. Three cases: the employer has a company page
                  (`name` plus `url`/`logo`/`companyId`/`urn`), the member typed
                  an employer with no page (`name` only), or the member saved no
                  employer (`name` is "" with no company, and `employmentType`
                  may give the reason). An empty `name` means "no employer
                  entered", never "employer has no page".
              ongoing:
                type: boolean
                description: >-
                  Whether the role is still running: a start date and no end
                  date, the same entries whose `dateRange` ends in "Present". It
                  doesn't depend on `current`: any number of experiences can be
                  ongoing, and someone holding four roles at once has four. An
                  entry with no dates is false.
              geoLocationName:
                type: string
                description: >-
                  The standardized location caption behind `locationName`, in
                  the same language.
              geoUrn:
                type: string
                description: >-
                  Stable identifier for the position location, e.g.
                  "urn:li:fsd_geo:107025191". Language-independent, so the right
                  key to join or group on.
              geoId:
                type: string
                description: Numeric tail of `geoUrn`, e.g. "107025191".
              locationNameLocalized:
                type: object
                description: >-
                  Every language the source holds for this location caption,
                  keyed by locale, e.g. {"es_ES": "Barcelona, Cataluna,
                  Espana"}.
                additionalProperties:
                  type: string
        educations:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
                description: School/University name
              description:
                type: string
                description: Degree and field combined
              dateRange:
                type: string
                description: Date range
              current:
                type: boolean
                description: >-
                  Whether this is the person's current (ongoing) education. At
                  most one education is true.
              educationUrn:
                type: string
                description: >-
                  URN of this education entity. Join key for
                  `currentSchool.educationUrn`
              degreeName:
                type: string
                description: Degree name (e.g., MBA, MSEE)
              fieldOfStudy:
                type: string
                description: Field of study
              grade:
                type: string
                description: Grade or honors, as free text (e.g. "First Class Honours")
              details:
                type: string
                description: >-
                  The member's own free-text description of this education
                  entry. Distinct from `description`, which stays the
                  synthesized degree + field string.
              schoolLogo:
                type: string
                description: School logo URL
              schoolUrl:
                type: string
                description: School profile URL
              timePeriod:
                type: object
                properties:
                  startDate:
                    type: object
                    properties:
                      year:
                        type: integer
                        description: The year.
                    description: When it started.
                  endDate:
                    type: object
                    properties:
                      year:
                        type: integer
                        description: The year.
                    description: When it ended. `null` while it lasts.
                description: When it started and ended.
              ongoing:
                type: boolean
                description: >-
                  Whether the studies are still running: a start year and no end
                  year. Note an ongoing education `dateRange` reads "2022", not
                  "2022 - Present".
              activities:
                type: string
                description: >-
                  The "activities and societies" line the member entered for
                  this entry, e.g. "Nature Club, LTS, Elocution". Omitted when
                  blank.
          description: The schools, newest first.
        volunteerCauses:
          type: array
          items:
            type: string
          description: Volunteer causes listed on the profile
        skills:
          type: array
          description: >-
            Professional skills listed on the profile. Complete list, returned
            in the same single call as the rest of the profile.
          items:
            type: object
            properties:
              name:
                type: string
                description: Skill name
        languages:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
                description: Language name
              proficiency:
                type: string
                description: Proficiency level
          description: The languages the member lists.
        certifications:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
                description: Certification name
              organizationName:
                type: string
                description: Issuing organization's name
              organizationUrl:
                type: string
                description: Issuing organization's professional page URL, when available
              issuedDate:
                type: string
                description: >-
                  Issue date of the certification (e.g. Jun 2018). If it also
                  expires, this string holds both dates, as in `Jun 2018 - Jun
                  2026`, a format the source keeps for older clients. Read
                  `expirationDate` for the expiry alone.
              authority:
                type: string
                deprecated: true
                description: >-
                  Legacy alias of `organizationName`, kept for backward
                  compatibility
              dateRange:
                type: string
                deprecated: true
                description: Legacy alias of `issuedDate`, kept for backward compatibility
              expirationDate:
                type: string
                description: >-
                  When the credential expires (e.g. Jun 2026). Omitted when it
                  does not expire.
              credentialId:
                type: string
                description: >-
                  The credential ID the member entered, as free text. Omitted
                  when blank.
              credentialUrl:
                type: string
                description: >-
                  The "show credential" link the member entered. Omitted when
                  blank.
              organizationLogo:
                type: string
                description: >-
                  Issuing organization logo image URL, when a professional page
                  is linked.
          description: Licenses and certifications.
        coverImageUrl:
          type: string
          description: Profile banner/background image URL
        coverImageUrls:
          type: array
          description: >-
            Every size of the banner image, smallest first. Banners are not
            square, so use both `width` and `height`. Absent when the member has
            no banner, in which case `coverImageUrl` is absent too.
          items:
            type: object
            description: >-
              One size of an image. Read the size from `width` and `height`,
              never from the URL: the size written in the URL path is the size
              that was requested and can differ from the file served. Image URLs
              are signed and stop working after an expiry date the source sets
              (their `e=` query parameter), which we do not control. Download an
              image to keep it rather than storing its URL.
            required:
              - url
            properties:
              url:
                type: string
                description: Image URL
              width:
                type: integer
                description: >-
                  Width in pixels, as declared by the source. Omitted when it
                  declares none.
              height:
                type: integer
                description: >-
                  Height in pixels, as declared by the source. Omitted when it
                  declares none.
        publicIdentifier:
          type: string
          description: Public identifier (slug)
        profileId:
          type: string
          description: Member identifier
        countryCode:
          type: string
          description: ISO country code
        geoLocationName:
          type: string
          description: Full geographic location string
        geoCountryName:
          type: string
          description: Country name
        geoUrn:
          type: string
          description: Geo URN
        connectionType:
          type: string
          description: >-
            Always "OUT_OF_NETWORK" in the answers we have seen. It says nothing
            about you: no LinkedIn account of yours is in the call.
        creatorInfo:
          type: object
          description: Creator mode information
          properties:
            hashTags:
              type: array
              items:
                type: string
              description: Creator hashtags
            website:
              type:
                - string
                - 'null'
              description: Creator website URL
        jobTitle:
          type: string
          description: >-
            Title of the member's primary role (the entry flagged `current` in
            `experiences`). The member sets it, and an end date does not clear
            it: if the member has not updated their profile since that role
            ended, `jobTitle` still shows it while the matching experience shows
            `ongoing: false`.
        companyName:
          type: string
          description: >-
            Employer for the role in `jobTitle`. `currentPosition` comes from
            the top of the member's profile instead, so it can be null while
            `jobTitle`/`companyName` have values.
        companyPublicId:
          type: string
          description: Current company public identifier slug
        companyLinkedinUrl:
          type: string
          description: Current company profile URL
        currentPosition:
          type:
            - object
            - 'null'
          description: >-
            Explicit "current company" block from the top of the profile page.
            Object when the member displays it, null when they don't (an ongoing
            primary position may still exist in `experiences`).
          properties:
            positionUrn:
              type: string
              description: >-
                URN of the designated position. Matches
                `experiences[].positionUrn`
            title:
              type: string
              description: Role title of the designated position
            name:
              type: string
              description: Company name
            companyId:
              type: string
              description: LinkedIn's numeric id of the company.
            companyUrn:
              type: string
              description: Full company URN
            publicIdentifier:
              type: string
              description: Company page slug
            url:
              type: string
              description: Company page URL
        currentSchool:
          type:
            - object
            - 'null'
          description: >-
            Explicit "education" block from the top of the profile page. Object
            when the member displays it, null when they don't.
          properties:
            educationUrn:
              type: string
              description: >-
                URN of the designated education entry. Matches
                `educations[].educationUrn`
            name:
              type: string
              description: School name
            schoolId:
              type: string
              description: >-
                Legacy school id from `urn:li:fsd_school:<id>`. Distinct from
                `companyId`
            schoolUrn:
              type: string
              description: Full school URN
            companyId:
              type: string
              description: LinkedIn's numeric id of the school's page.
            publicIdentifier:
              type: string
              description: School page slug
            url:
              type: string
              description: School page URL
        followerCount:
          type: number
          description: Number of followers
        connectionsCount:
          type: number
          description: Number of connections
        creator:
          type: boolean
          description: Whether Creator mode is enabled
        influencer:
          type: boolean
          description: >-
            Whether the profile carries the platform's long-standing editorial
            recognition. Distinct from `topVoice`: a profile can have one
            without the other.
        topVoice:
          type: boolean
          description: >-
            Present and true when the profile has a recognised-voice badge.
            Absent (not false) when it doesn't, as on most profiles: treat an
            absent key as false. The response has no display label for the
            badge, because the source translates the label for each viewer.
        premium:
          type: boolean
          description: Whether the profile has Premium
        isVerified:
          type: boolean
          description: Whether the profile has a verification badge
        memberId:
          type: string
          description: >-
            Numeric internal member id (e.g. "251749025"). Distinct from
            `id`/`profileId`, which carry the `urn:li:fsd_profile:…` form.
        openToWork:
          type: boolean
          description: >-
            Whether the profile shows the public #OPEN_TO_WORK photo frame.
            Reflects the publicly visible badge only. Recruiter-only 'open to
            work' is not exposed.
        hiring:
          type: boolean
          description: >-
            Whether the profile shows the public #HIRING photo frame. A profile
            picture carries one frame at most, so `hiring` and `openToWork` are
            never both true.
        inRemembrance:
          type: boolean
          description: >-
            Whether the account has been officially memorialized ('In
            Remembrance'). Only a memorialized account returns true: a regular
            profile whose headline mentions the member has passed away returns
            false.
        openProfile:
          type: boolean
          description: >-
            True when the member has an open profile: anyone can message them
            without connecting or spending a paid message credit. Unrelated to
            `openToWork`, and separate from `premium` (some members without
            premium have an open profile). An absent `openProfile` means
            unknown: on some calls the key is missing and `partial.sections`
            lists `openProfile`. If you request the profile again, the key comes
            back in most cases. A memorialized account (`inRemembrance` true)
            has `openProfile` false, since nobody can message it. `openProfile`
            is the only status boolean whose absence means unknown.
        joinDate:
          type: object
          description: Approximate account creation date (month + year).
          properties:
            month:
              type: integer
              description: The month, 1 to 12.
            year:
              type: integer
              description: The year.
        birthDate:
          type: object
          description: >-
            The member's birthday, only when their privacy settings make it
            visible to us. Absent when they hide it or never entered it. Members
            choose who can see it, so one who limits it to a narrower audience
            may appear on some calls and not on others. Included in every call
            at no extra cost. Always a month and a day. The year only when the
            member shares it, which is rare.
          properties:
            month:
              type: integer
              description: 1-12
            day:
              type: integer
              description: 1-31
            year:
              type: integer
              description: Only when the member shows it
          required:
            - month
            - day
        websites:
          type: array
          description: >-
            The websites listed in the member's contact info, only when their
            privacy settings make them visible to us, in the order the member
            listed them. Absent (never an empty array) when there are none to
            show. Included in every call at no extra cost. Not the same as
            `creatorInfo.website`, the single link a creator pins to their
            profile.
          items:
            type: object
            properties:
              url:
                type: string
                description: The website's URL.
              category:
                type: string
                description: >-
                  The type the member picked for it, e.g. `PERSONAL`, `COMPANY`,
                  `BLOG`, `PORTFOLIO` or `OTHER`
            required:
              - url
        url:
          type: string
          description: Canonical public URL of the professional profile page
        pronoun:
          type: string
          description: >-
            Publicly displayed pronouns (e.g. "she/her"). Omitted when the
            member doesn't display pronouns.
        recommendations:
          type: array
          description: >-
            Recommendations received by the member. Best-effort: omitted when
            this section could not be fetched, empty array when the member has
            none.
          items:
            type: object
            properties:
              caption:
                type: string
                description: >-
                  The recommender's headline at the time of the fetch (the
                  context line shown under the author's name)
              description:
                type: string
                description: The recommendation text
              authorFullname:
                type: string
                description: The recommender's full name
              authorUrl:
                type: string
                description: The recommender's public profile page URL
              createdAt:
                type: string
                format: date-time
                description: >-
                  When the recommendation was written, ISO 8601. Omitted when
                  the source carries no timestamp.
              lastModifiedAt:
                type: string
                format: date-time
                description: >-
                  When it was last edited, ISO 8601. Equal to `createdAt` when
                  it was never edited.
        testScores:
          type: array
          description: Test scores listed on the profile
          items:
            type: object
            properties:
              name:
                type: string
                description: Test name (e.g. "TOEIC")
              score:
                type: string
                description: Score, as free text (e.g. "990")
              date:
                type: string
                description: When the test was taken (e.g. Jun 2018)
        industry:
          type: string
          description: >-
            The member's self-declared industry, e.g. "Information Technology &
            Services". It comes from the list LinkedIn shows on profiles, which
            is not the list company pages use, so do not join the two. Omitted
            when the member lists none.
        industryUrn:
          type: string
          description: Stable identifier for industry, e.g. "urn:li:fsd_industry:96".
        primaryLocale:
          type: string
          description: >-
            The language the member wrote their profile in, e.g. "es_ES". The
            free text can be in another language: see `title` and `description`
            for the language you get. For language-independent values, use
            `geoUrn`, `industryUrn` or `companyId`.
        supportedLocales:
          type: array
          items:
            type: string
          description: >-
            Every language the member published their profile in, e.g.
            ["fr_FR","en_US"]. A member who wrote their profile once gets a
            single-entry array, so more than one entry is the signal that
            `titleLocalized` / `descriptionLocalized` have something to choose
            from.
        entityType:
          type: string
          enum:
            - Person
          description: >-
            Always "Person". We take only a LinkedIn profile URL, so a company
            page never comes back.
        publications:
          type: array
          description: Publications listed on the profile, in display order.
          items:
            type: object
            properties:
              name:
                type: string
                description: Publication title.
              publisher:
                type: string
                description: Publisher or journal.
              description:
                type: string
                description: The member's own description. Omitted when blank.
              url:
                type: string
                description: Link to the publication.
              publishedDate:
                type: string
                description: Publication date, e.g. Sep 2021.
              publishedOn:
                type: object
                description: The same date structured, when finer than month is available.
                properties:
                  year:
                    type: integer
                    description: The year.
                  month:
                    type: integer
                    description: The month, 1 to 12.
                  day:
                    type: integer
                    description: The day of the month.
              authors:
                type: array
                description: Credited co-authors.
                items:
                  type: object
                  properties:
                    fullName:
                      type: string
                      description: >-
                        The contributor name. Omitted when a credited member
                        profile could not be resolved, never an empty string.
                    publicIdentifier:
                      type: string
                      description: >-
                        Public identifier (slug), when the contributor is a
                        member.
                    profileUrn:
                      type: string
                      description: >-
                        Profile URN, usable directly as `profileUrlOrUrn` on
                        this endpoint.
                    url:
                      type: string
                      description: Public profile URL.
                    headline:
                      type: string
                      description: Headline at the time of the fetch.
              publicationUrn:
                type: string
                description: URN of this publication entry.
        projects:
          type: array
          description: Projects listed on the profile, in display order.
          items:
            type: object
            properties:
              title:
                type: string
                description: Project title.
              description:
                type: string
                description: The member's own description. Omitted when blank.
              url:
                type: string
                description: Project link.
              dateRange:
                type: string
                description: >-
                  Formatted range, e.g. "Apr 2018 - Mar 2019". Empty string when
                  the member gave no dates.
              timePeriod:
                type: object
                description: Structured start/end dates.
                properties:
                  startDate:
                    type: object
                    properties:
                      month:
                        type: integer
                        description: The month, 1 to 12.
                      year:
                        type: integer
                        description: The year.
                    description: When it started.
                  endDate:
                    type: object
                    properties:
                      year:
                        type: integer
                        description: The year.
                      month:
                        type: integer
                        description: The month, 1 to 12.
                    description: When it ended. `null` while it lasts.
              contributors:
                type: array
                description: Credited collaborators.
                items:
                  type: object
                  properties:
                    fullName:
                      type: string
                      description: >-
                        The contributor name. Omitted when a credited member
                        profile could not be resolved, never an empty string.
                    publicIdentifier:
                      type: string
                      description: >-
                        Public identifier (slug), when the contributor is a
                        member.
                    profileUrn:
                      type: string
                      description: >-
                        Profile URN, usable directly as `profileUrlOrUrn` on
                        this endpoint.
                    url:
                      type: string
                      description: Public profile URL.
                    headline:
                      type: string
                      description: Headline at the time of the fetch.
              positionUrn:
                type: string
                description: >-
                  Set when the project is attached to a role. Joins to
                  `experiences[].positionUrn`.
              educationUrn:
                type: string
                description: >-
                  Set when the project is attached to a school. Joins to
                  `educations[].educationUrn`.
              projectUrn:
                type: string
                description: URN of this project entry.
        patents:
          type: array
          description: Patents listed on the profile, in display order.
          items:
            type: object
            properties:
              title:
                type: string
                description: Patent title.
              description:
                type: string
                description: The member's own description. Omitted when blank.
              url:
                type: string
                description: Link to the patent record.
              issuer:
                type: string
                description: >-
                  Patent office, as the member typed it (e.g. "us"). Free text,
                  not a controlled vocabulary.
              patentNumber:
                type: string
                description: Patent number as entered.
              applicationNumber:
                type: string
                description: Application number as entered.
              pending:
                type: boolean
                description: >-
                  Whether the patent is still an application rather than
                  granted. Always present.
              issuedDate:
                type: string
                description: When granted, e.g. Jan 2017. Omitted while pending.
              filedDate:
                type: string
                description: When filed, e.g. Dec 2024.
              issuedOn:
                type: object
                description: '`issuedDate` as a year, a month and a day.'
                properties:
                  year:
                    type: integer
                    description: The year.
                  month:
                    type: integer
                    description: The month, 1 to 12.
                  day:
                    type: integer
                    description: The day of the month.
              filedOn:
                type: object
                description: '`filedDate` as a year, a month and a day.'
                properties:
                  year:
                    type: integer
                    description: The year.
                  month:
                    type: integer
                    description: The month, 1 to 12.
                  day:
                    type: integer
                    description: The day of the month.
              inventors:
                type: array
                description: Credited inventors.
                items:
                  type: object
                  properties:
                    fullName:
                      type: string
                      description: >-
                        The contributor name. Omitted when a credited member
                        profile could not be resolved, never an empty string.
                    publicIdentifier:
                      type: string
                      description: >-
                        Public identifier (slug), when the contributor is a
                        member.
                    profileUrn:
                      type: string
                      description: >-
                        Profile URN, usable directly as `profileUrlOrUrn` on
                        this endpoint.
                    url:
                      type: string
                      description: Public profile URL.
                    headline:
                      type: string
                      description: Headline at the time of the fetch.
              patentUrn:
                type: string
                description: URN of this patent entry.
        honors:
          type: array
          description: Honors and awards listed on the profile, in display order.
          items:
            type: object
            properties:
              title:
                type: string
                description: Award title.
              issuer:
                type: string
                description: Who granted it, as free text.
              description:
                type: string
                description: The member's own description. Omitted when blank.
              issuedDate:
                type: string
                description: >-
                  When it was awarded, e.g. Oct 2018. A single date: an award
                  has no end.
              positionUrn:
                type: string
                description: Joins to `experiences[].positionUrn` when attached to a role.
              educationUrn:
                type: string
                description: >-
                  Joins to `educations[].educationUrn` when attached to a
                  school.
              honorUrn:
                type: string
                description: URN of this award entry.
        organizations:
          type: array
          description: Organizations the member belongs to, in display order.
          items:
            type: object
            properties:
              name:
                type: string
                description: Organization name.
              positionHeld:
                type: string
                description: The role the member held there, e.g. "Membership Chairperson".
              description:
                type: string
                description: The member's own description. Omitted when blank.
              dateRange:
                type: string
                description: >-
                  Formatted range, e.g. "2015 - Jun 2016". Empty string when no
                  dates were given.
              timePeriod:
                type: object
                description: Structured start/end dates.
                properties:
                  startDate:
                    type: object
                    properties:
                      month:
                        type: integer
                        description: The month, 1 to 12.
                      year:
                        type: integer
                        description: The year.
                    description: When it started.
                  endDate:
                    type:
                      - object
                      - 'null'
                    properties:
                      month:
                        type: integer
                        description: The month, 1 to 12.
                      year:
                        type: integer
                        description: The year.
                    description: When it ended. `null` while it lasts.
              positionUrn:
                type: string
                description: Joins to `experiences[].positionUrn` when attached to a role.
              educationUrn:
                type: string
                description: >-
                  Joins to `educations[].educationUrn` when attached to a
                  school.
              organizationUrn:
                type: string
                description: URN of this entry.
        courses:
          type: array
          description: Courses listed on the profile, in display order.
          items:
            type: object
            properties:
              name:
                type: string
                description: Course name.
              number:
                type: string
                description: Course code as entered, e.g. "Fin335". Omitted when blank.
              positionUrn:
                type: string
                description: Joins to `experiences[].positionUrn` when attached to a role.
              educationUrn:
                type: string
                description: >-
                  Joins to `educations[].educationUrn` when attached to a
                  school.
              courseUrn:
                type: string
                description: URN of this entry.
        volunteerExperiences:
          type: array
          description: >-
            Volunteering roles: what the member did and for whom, in display
            order. Not the same as `volunteerCauses`, which lists the causes
            they say they care about.
          items:
            type: object
            properties:
              role:
                type: string
                description: What the member did, e.g. "Pianist", "Instructor".
              name:
                type: string
                description: >-
                  Organization name, following the same convention as
                  `experiences[].name`.
              cause:
                type: string
                description: >-
                  The cause this role served, as a stable identifier, e.g.
                  "EDUCATION". Omitted when not set.
              description:
                type: string
                description: The member's own description. Omitted when blank.
              dateRange:
                type: string
                description: >-
                  Formatted range, e.g. "Mar 2014 - Present". Empty string when
                  no dates were given.
              timePeriod:
                type: object
                description: Structured start/end dates.
                properties:
                  startDate:
                    type: object
                    properties:
                      month:
                        type: integer
                        description: The month, 1 to 12.
                      year:
                        type: integer
                        description: The year.
                    description: When it started.
                  endDate:
                    type:
                      - object
                      - 'null'
                    properties:
                      month:
                        type: integer
                        description: The month, 1 to 12.
                      year:
                        type: integer
                        description: The year.
                    description: When it ended. `null` while it lasts.
              company:
                type: object
                description: >-
                  The organization page, when it has one. Same shape as
                  `experiences[].company`.
                properties:
                  url:
                    type: string
                    description: Organization page URL.
                  name:
                    type: string
                    description: Organization name.
                  logo:
                    type: string
                    description: Logo image URL.
                  companyId:
                    type: string
                    description: Numeric company id.
                  urn:
                    type: string
                    description: Full company URN.
              volunteerExperienceUrn:
                type: string
                description: URN of this entry.
        partial:
          type: object
          description: >-
            Present only when a read failed and part of the profile is missing.
            Fetchin builds a profile from several reads, and when one fails, the
            array that read fills holds fewer items than the profile shows. Use
            this field to tell whether a short list is complete.
          properties:
            sections:
              type: array
              items:
                type: string
              description: >-
                Names of the response fields that may be short or missing on
                this call, e.g. `["experiences"]`. An array Fetchin returned
                shorter than the member's real list: `experiences`,
                `educations`, `skills`, `certifications`, `languages`,
                `testScores`, `publications`, `projects`, `patents`, `honors`,
                `organizations`, `courses` or `volunteerExperiences`. A
                best-effort field Fetchin could not fetch, or fetched only in
                part: `recommendations` and `recommendationsGiven` (absent, or
                shorter than the member's real list), and `joinDate`,
                `birthDate`, `websites` and `openProfile` (absent). `joinDate`,
                `birthDate` and `websites` come from one read, so they are
                listed together. When `birthDate` is listed, Fetchin could not
                read it on this call. When it is absent and not listed, the
                member's profile does not show a birthday.
            totals:
              type: object
              description: >-
                The count LinkedIn gives for each incomplete section, when it
                gives one. It uses the same keys, except `experienceGroups`,
                which counts stints. A stint is one unbroken period at one
                employer: a member who left an employer and came back has two
                stints there (see `experiences[].positionGroupUrn`).
              additionalProperties:
                type: integer
          additionalProperties: false
        recommendationsGiven:
          type: array
          description: >-
            Recommendations the member wrote for other people. Best-effort,
            exactly like `recommendations`: an empty array means they wrote
            none, while an absent key means the fetch failed and `partial` will
            say so. Note the named person here is the recipient, whereas in
            `recommendations` it is the author.
          items:
            type: object
            properties:
              description:
                type: string
                description: The recommendation text.
              caption:
                type: string
                description: The recipient's headline at the time of the fetch.
              recipientFullname:
                type: string
                description: Full name of the person who was recommended.
              recipientUrl:
                type: string
                description: The recipient's public profile page URL.
              createdAt:
                type: string
                format: date-time
                description: >-
                  When the recommendation was written, ISO 8601. Omitted when
                  the source carries no timestamp.
              lastModifiedAt:
                type: string
                format: date-time
                description: >-
                  When it was last edited, ISO 8601. Equal to `createdAt` when
                  it was never edited.
        datacircle_meta:
          $ref: '#/components/schemas/DatacircleMeta'
      required:
        - datacircle_meta
    FetchinError:
      type: object
      required:
        - error
        - code
        - datacircle_meta
      properties:
        error:
          type: string
          description: >-
            Human-readable description of what went wrong. For display/logging.
            Do not branch on this string.
        code:
          type: string
          enum:
            - MISSING_PARAMETER
            - INVALID_PARAMETER
            - INVALID_URN
            - UNAUTHENTICATED
            - INVALID_API_KEY
            - FORBIDDEN
            - NOT_FOUND
            - PROFILE_NOT_FOUND
            - POST_NOT_FOUND
            - COMPANY_NOT_FOUND
            - ENDPOINT_REMOVED
            - RATE_LIMITED
            - QUOTA_EXHAUSTED
            - INTERNAL_ERROR
            - UPSTREAM_ERROR
            - SERVICE_UNAVAILABLE
            - UPSTREAM_TIMEOUT
          description: >-
            Stable, machine-readable error code. Branch your integration on this
            value, not on the HTTP status alone or the message text.
        datacircle_meta:
          $ref: '#/components/schemas/DatacircleMeta'
      additionalProperties: false
      description: >-
        Fetchin's own error, passed on with its status, plus `datacircle_meta`.
        `PROFILE_NOT_FOUND` (`404`) is billed, as Fetchin bills it, every other
        code is free.
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: What went wrong, in plain words.
    DatacircleMeta:
      type: object
      description: Datacircle's only addition to the provider's answer
      required:
        - provider
        - cost_usd
        - balance_usd
      properties:
        provider:
          type: string
          enum:
            - up2data
            - harvestapi
            - fetchin
          description: Which provider answered
        cost_usd:
          type: number
          description: 'What this call cost, in dollars: the provider''s price, no markup'
        balance_usd:
          type: number
          description: >-
            Your balance after this call, in dollars (`balance_usd` in `GET
            /balance/`)
      additionalProperties: false
  securitySchemes:
    token:
      type: http
      scheme: bearer
      description: >-
        Your API key: `Authorization: Bearer <your API key>`. `Authorization:
        Token <your API key>` works too.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.