---
title: "Get profile information"
method: GET
path: "/api/v1/profile"
---

# Get profile information

`GET /api/v1/profile`

## Request

- Base URL: `https://api.fetchin.io`
- URL: `https://api.fetchin.io/api/v1/profile`
- Auth: API key in header `X-API-Key`

Fetch profile details using profile URL or URN. Consumes 1 credit, or 2 with `fullProfile=true` (the second credit when at least one of the two extra pages was read); 1 rate-limit unit either way.

## Query parameters

- `profileUrlOrUrn` string, required
- `fullProfile` boolean

## Response `200`

Successfully fetched profile

- object
  - `id` string: Profile URN (unique identifier)
  - `firstName` string
  - `lastName` string: 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` boolean: Present and true only when lastName is an initial because the member restricts it. Absent otherwise, never false.
  - `title` string: 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` object: title in each language the member published, keyed by locale ("fr_FR", "en_US").
  - `description` string: 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` object: description in each language the member published, keyed by locale.
  - `location` string
  - `profilePictureUrl` string: 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` ProfileImage[]: 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.
    - `url` string, required: Image URL
    - `width` integer: Width in pixels, as declared by the source. Omitted when it declares none.
    - `height` integer: Height in pixels, as declared by the source. Omitted when it declares none.
  - `experiences` object[]: Complete work experience history, ordered most recent first. Every position is returned in a single call - there is no pagination to follow, including for members with dozens of past employers and for members holding many successive roles at the same one. If a section could not be completed, the top-level `partial` object names it.
    - `name` string: Company name
    - `jobTitle` string: Job title/role
    - `description` string: Role description
    - `dateRange` string: Date range
    - `current` boolean: Whether this is the role the member designates as their PRIMARY one (the one shown at the top of their profile). At most one experience is true across the whole response, and it is false when the designated role has already ended. This is a designation, not a date test - use `ongoing` to find every role still running.
    - `positionUrn` string: URN of this position entity; join key for currentPosition.positionUrn
    - `positionGroupUrn` string: Which stint this role belongs to. A stint is one continuous period at one employer: roles sharing it were held back to back there and sit next to each other in `experiences`. A member who leaves an employer and returns has TWO stints, i.e. two different values with the same `company.companyId`, so group by this rather than by `companyId`. Opaque, and consistent within one response only: the same stint is not guaranteed the same value on a later fetch. Omitted in the rare case the grouping is not available.
    - `positionGroupId` string: 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` string: Job location as the member sees it, in THEIR own profile language (e.g. "Barcelona, Cataluna, Espana"). Free text - use geoId/geoUrn to normalise or group. The profile language is reported in the top-level primaryLocale.
    - `employmentType` string: Employment type (e.g., Freelance, Part-time)
    - `workplaceType` 'On-site' | 'Hybrid' | 'Remote': Only with `fullProfile=true`. Where the role was performed, always one of these three English values. Present only on roles where the member stated it (often a minority); absent means unknown (not stated, or not readable or attributable to this exact role with certainty), never on-site, and it is never guessed. Not the same thing as `employmentType` (Full-time, Part-time...), which says on what terms the role was held.
    - `timePeriod` object
      - `startDate` object
        - `month` number
        - `year` number
      - `endDate` object, nullable
        - `month` number
        - `year` number
    - `totalDuration` string: Duration string (e.g., 3 yrs 1 mo)
    - `company` object: Company details. Three cases: the employer has a professional page (url/logo/companyId/urn present alongside name); the member typed an employer with no page (name only); or the member saved no employer at all (name is "" and company is omitted - employmentType usually carries the meaning). An empty name means "no employer entered", never "employer has no page".
      - `name` string
      - `url` string: Company profile URL
      - `logo` string: Company logo URL
      - `companyId` string: Numeric company id (e.g. "8736"), parsed from the company URN
      - `urn` string: Full company URN
    - `ongoing` boolean: Whether the role is still running: a start date and no end date - exactly the entries whose dateRange ends in "Present". Independent of `current`: ANY number of experiences can be ongoing, and someone holding four concurrent roles has four. An entry saved with no dates at all is false rather than assumed ongoing.
    - `geoLocationName` string: The standardized location caption behind locationName, in the same language.
    - `geoUrn` string: Stable identifier for the position location, e.g. "urn:li:fsd_geo:107025191". Language-independent - the right key to join or group on.
    - `geoId` string: Numeric tail of geoUrn, e.g. "107025191".
    - `locationNameLocalized` object: Every language the source holds for this location caption, keyed by locale, e.g. {"es_ES": "Barcelona, Cataluna, Espana"}.
  - `educations` object[]
    - `name` string: School/University name
    - `description` string: Degree and field combined
    - `dateRange` string: Date range
    - `current` boolean: Whether this is the person's current (ongoing) education. At most one education is true.
    - `educationUrn` string: URN of this education entity; join key for currentSchool.educationUrn
    - `degreeName` string: Degree name (e.g., MBA, MSEE)
    - `fieldOfStudy` string: Field of study
    - `grade` string: Grade or honors, as free text (e.g. "First Class Honours")
    - `details` string: The member's own free-text description of this education entry. Distinct from `description`, which stays the synthesized degree + field string.
    - `schoolLogo` string: School logo URL
    - `schoolUrl` string: School profile URL
    - `timePeriod` object
      - `startDate` object
        - `year` number
      - `endDate` object
        - `year` number
    - `ongoing` boolean: Whether the studies are still running: a start year and no end year. Note an ongoing education dateRange reads "2022", not "2022 - Present".
    - `activities` string: The "activities and societies" line the member entered for this entry, e.g. "Nature Club, LTS, Elocution". Omitted when blank.
  - `volunteerCauses` string[]: Volunteer causes listed on the profile
  - `skills` object[]: Professional skills listed on the profile. Complete list, returned in the same single call as the rest of the profile.
    - `name` string: Skill name
  - `languages` object[]
    - `name` string: Language name
    - `proficiency` string: Proficiency level
  - `certifications` object[]
    - `name` string: Certification name
    - `organizationName` string: Issuing organization's name
    - `organizationUrl` string: Issuing organization's professional page URL, when available
    - `issuedDate` string: When the certification was issued (e.g. Jun 2018). When the credential also expires, this string carries both dates (Jun 2018 - Jun 2026) for backward compatibility - read expirationDate for the expiry on its own.
    - `authority` string: Legacy alias of organizationName, kept for backward compatibility
    - `dateRange` string: Legacy alias of issuedDate, kept for backward compatibility
    - `expirationDate` string: When the credential expires (e.g. Jun 2026). Omitted when it does not expire.
    - `credentialId` string: The credential ID the member entered, as free text. Omitted when blank.
    - `credentialUrl` string: The "show credential" link the member entered. Omitted when blank.
    - `organizationLogo` string: Issuing organization logo image URL, when a professional page is linked.
  - `coverImageUrl` string: Profile banner/background image URL
  - `coverImageUrls` ProfileImage[]: 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.
    - `url` string, required: Image URL
    - `width` integer: Width in pixels, as declared by the source. Omitted when it declares none.
    - `height` integer: Height in pixels, as declared by the source. Omitted when it declares none.
  - `publicIdentifier` string: Public identifier (slug)
  - `profileId` string: Member identifier
  - `countryCode` string: ISO country code
  - `geoLocationName` string: Full geographic location string
  - `geoCountryName` string: Country name
  - `geoUrn` string: Geo URN
  - `connectionType` string: Relationship to the authenticated account
  - `creatorInfo` object: Creator mode information
    - `hashTags` string[]: Creator hashtags
    - `website` string, nullable: Creator website URL
  - `jobTitle` string: Title of the member DESIGNATED PRIMARY role (the same entry flagged current in experiences). A designation, not a date test: if the member has not updated their profile since that role ended, jobTitle still reflects it while the matching experience shows ongoing:false.
  - `companyName` string: Employer of that same designated role. Same caveat as jobTitle. Derived from the position itself, whereas currentPosition reflects the block the member chooses to DISPLAY at the top of their profile - so currentPosition can be null while jobTitle/companyName are set.
  - `companyPublicId` string: Current company public identifier slug
  - `companyLinkedinUrl` string: Current company profile URL
  - `currentPosition` object, nullable: 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).
    - `positionUrn` string: URN of the designated position; matches experiences[].positionUrn
    - `title` string: Role title of the designated position
    - `name` string: Company name
    - `companyId` string: Numeric company id, usable with the company endpoints
    - `companyUrn` string: Full company URN
    - `publicIdentifier` string: Company page slug
    - `url` string: Company page URL
  - `currentSchool` object, nullable: Explicit "education" block from the top of the profile page. Object when the member displays it, null when they don't.
    - `educationUrn` string: URN of the designated education entry; matches educations[].educationUrn
    - `name` string: School name
    - `schoolId` string: Legacy school id from urn:li:fsd_school:<id>; distinct from companyId
    - `schoolUrn` string: Full school URN
    - `companyId` string: Numeric organization id of the school's page, usable with the company endpoints
    - `publicIdentifier` string: School page slug
    - `url` string: School page URL
  - `followerCount` number: Number of followers
  - `connectionsCount` number: Number of connections
  - `creator` boolean: Whether Creator mode is enabled
  - `influencer` boolean: Whether the profile carries the platform's long-standing editorial recognition. Distinct from topVoice: a profile can have one without the other.
  - `topVoice` boolean: Present and true when the profile carries a recognised-voice badge. ABSENT (not false) when it does not, which is the case for most profiles — treat an absent key as falsy. The badge's display label is not returned because the source translates it per reading session.
  - `premium` boolean: Whether the profile has Premium
  - `isVerified` boolean: Whether the profile has a verification badge
  - `memberId` string: Numeric internal member id (e.g. "251749025"). Distinct from `id`/`profileId`, which carry the `urn:li:fsd_profile:…` form.
  - `openToWork` boolean: 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` boolean: 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` boolean: 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` boolean: Whether the member runs an open profile: anyone can message them directly without being one of their connections, and without spending a paid message credit. Unrelated to `openToWork`, and not the same as `premium` (some non-premium members are reachable this way). An ABSENT openProfile means unknown, never false: on a small share of calls it cannot be determined, the key is omitted and partial.sections includes openProfile; requesting the profile again normally returns it. A memorialized account (inRemembrance true) always returns false, since nobody can message it. It is the only status boolean that can be absent on a person profile.
  - `joinDate` object: Approximate account creation date (month + year).
    - `month` number
    - `year` number
  - `birthDate` object: 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.
    - `month` number, required: 1-12
    - `day` number, required: 1-31
    - `year` number: Only when the member shows it
  - `websites` object[]: 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.
    - `url` string, required
    - `category` string: The type the member picked for it, e.g. PERSONAL, COMPANY, BLOG, PORTFOLIO or OTHER
  - `url` string: Canonical public URL of the professional profile page
  - `pronoun` string: Publicly displayed pronouns (e.g. "she/her"). Omitted when the member doesn't display pronouns.
  - `recommendations` object[]: Recommendations received by the member. Best-effort: omitted when this section could not be fetched, empty array when the member has none.
    - `caption` string: The recommender's headline at the time of the fetch (the context line shown under the author's name)
    - `description` string: The recommendation text
    - `authorFullname` string: The recommender's full name
    - `authorUrl` string: The recommender's public profile page URL
    - `createdAt` string, date-time: When the recommendation was written, ISO 8601. Omitted when the source carries no timestamp.
    - `lastModifiedAt` string, date-time: When it was last edited, ISO 8601. Equal to createdAt when it was never edited.
  - `testScores` object[]: Test scores listed on the profile
    - `name` string: Test name (e.g. "TOEIC")
    - `score` string: Score, as free text (e.g. "990")
    - `date` string: When the test was taken (e.g. Jun 2018)
  - `industry` string: The member self-declared industry, e.g. "Information Technology & Services". Uses the industry vocabulary the profile page itself displays, which is NOT the same list as the industry field on the company endpoint - do not join the two. Omitted when the member lists none.
  - `industryUrn` string: Stable identifier for industry, e.g. "urn:li:fsd_industry:96".
  - `primaryLocale` string: The language the member AUTHORED their profile in, e.g. "es_ES". It does not by itself say which language the free text beside it is in - see title and description. For language-independent values use geoUrn, industryUrn or companyId.
  - `supportedLocales` string[]: 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` 'Person' | 'Company': "Person" for a member profile. "Company" when an organization identifier was supplied: a company, school or showcase URL is accepted here for backward compatibility and returns a REDUCED record (organization name in firstName, tagline in title, empty experiences/educations). Prefer GET /api/v1/company for organizations.
  - `publications` object[]: Publications listed on the profile, in display order.
    - `name` string: Publication title.
    - `publisher` string: Publisher or journal.
    - `description` string: The member own description. Omitted when blank.
    - `url` string: Link to the publication.
    - `publishedDate` string: Publication date, e.g. Sep 2021.
    - `publishedOn` object: The same date structured, when finer than month is available.
      - `year` integer
      - `month` integer
      - `day` integer
    - `authors` object[]: Credited co-authors.
      - `fullName` string: The contributor name. Omitted when a credited member profile could not be resolved - never an empty string.
      - `publicIdentifier` string: Public identifier (slug), when the contributor is a member.
      - `profileUrn` string: Profile URN, usable directly as profileUrlOrUrn on this endpoint.
      - `url` string: Public profile URL.
      - `headline` string: Headline at the time of the fetch.
    - `publicationUrn` string: URN of this publication entry.
  - `projects` object[]: Projects listed on the profile, in display order.
    - `title` string: Project title.
    - `description` string: The member own description. Omitted when blank.
    - `url` string: Project link.
    - `dateRange` string: Formatted range, e.g. "Apr 2018 - Mar 2019". Empty string when the member gave no dates.
    - `timePeriod` object: Structured start/end dates.
      - `startDate` object
        - `year` integer
        - `month` integer
      - `endDate` object
        - `year` integer
        - `month` integer
    - `contributors` object[]: Credited collaborators.
      - `fullName` string: The contributor name. Omitted when a credited member profile could not be resolved - never an empty string.
      - `publicIdentifier` string: Public identifier (slug), when the contributor is a member.
      - `profileUrn` string: Profile URN, usable directly as profileUrlOrUrn on this endpoint.
      - `url` string: Public profile URL.
      - `headline` string: Headline at the time of the fetch.
    - `positionUrn` string: Set when the project is attached to a role. Joins to experiences[].positionUrn.
    - `educationUrn` string: Set when the project is attached to a school. Joins to educations[].educationUrn.
    - `projectUrn` string: URN of this project entry.
  - `patents` object[]: Patents listed on the profile, in display order.
    - `title` string: Patent title.
    - `description` string: The member own description. Omitted when blank.
    - `url` string: Link to the patent record.
    - `issuer` string: Patent office, as the member typed it (e.g. "us"). Free text, not a controlled vocabulary.
    - `patentNumber` string: Patent number as entered.
    - `applicationNumber` string: Application number as entered.
    - `pending` boolean: Whether the patent is still an application rather than granted. Always present.
    - `issuedDate` string: When granted, e.g. Jan 2017. Omitted while pending.
    - `filedDate` string: When filed, e.g. Dec 2024.
    - `issuedOn` object: issuedDate structured.
      - `year` integer
      - `month` integer
      - `day` integer
    - `filedOn` object: filedDate structured.
      - `year` integer
      - `month` integer
      - `day` integer
    - `inventors` object[]: Credited inventors.
      - `fullName` string: The contributor name. Omitted when a credited member profile could not be resolved - never an empty string.
      - `publicIdentifier` string: Public identifier (slug), when the contributor is a member.
      - `profileUrn` string: Profile URN, usable directly as profileUrlOrUrn on this endpoint.
      - `url` string: Public profile URL.
      - `headline` string: Headline at the time of the fetch.
    - `patentUrn` string: URN of this patent entry.
  - `honors` object[]: Honors and awards listed on the profile, in display order.
    - `title` string: Award title.
    - `issuer` string: Who granted it, as free text.
    - `description` string: The member own description. Omitted when blank.
    - `issuedDate` string: When it was awarded, e.g. Oct 2018. A single date - an award has no end.
    - `positionUrn` string: Joins to experiences[].positionUrn when attached to a role.
    - `educationUrn` string: Joins to educations[].educationUrn when attached to a school.
    - `honorUrn` string: URN of this award entry.
  - `organizations` object[]: Organizations the member belongs to, in display order.
    - `name` string: Organization name.
    - `positionHeld` string: The role the member held there, e.g. "Membership Chairperson".
    - `description` string: The member own description. Omitted when blank.
    - `dateRange` string: Formatted range, e.g. "2015 - Jun 2016". Empty string when no dates were given.
    - `timePeriod` object: Structured start/end dates.
      - `startDate` object
        - `year` integer
        - `month` integer
      - `endDate` object
        - `year` integer
        - `month` integer
    - `positionUrn` string: Joins to experiences[].positionUrn when attached to a role.
    - `educationUrn` string: Joins to educations[].educationUrn when attached to a school.
    - `organizationUrn` string: URN of this entry.
  - `courses` object[]: Courses listed on the profile, in display order.
    - `name` string: Course name.
    - `number` string: Course code as entered, e.g. "Fin335". Omitted when blank.
    - `positionUrn` string: Joins to experiences[].positionUrn when attached to a role.
    - `educationUrn` string: Joins to educations[].educationUrn when attached to a school.
    - `courseUrn` string: URN of this entry.
  - `volunteerExperiences` object[]: Volunteering ROLES: what the member did and for whom, in display order. Distinct from volunteerCauses, which is only the list of causes they say they care about.
    - `role` string: What the member did, e.g. "Pianist", "Instructor".
    - `name` string: Organization name, following the same convention as experiences[].name.
    - `cause` string: The cause this role served, as a stable identifier, e.g. "EDUCATION". Omitted when not set.
    - `description` string: The member own description. Omitted when blank.
    - `dateRange` string: Formatted range, e.g. "Mar 2014 - Present". Empty string when no dates were given.
    - `timePeriod` object: Structured start/end dates.
      - `startDate` object
        - `year` integer
        - `month` integer
      - `endDate` object
        - `year` integer
        - `month` integer
    - `company` object: The organization page, when it has one - same shape as experiences[].company, so companyId can be passed straight to the company endpoint.
      - `url` string: Organization page URL.
      - `name` string: Organization name.
      - `logo` string: Logo image URL.
      - `companyId` string: Numeric company id.
      - `urn` string: Full company URN.
    - `volunteerExperienceUrn` string: URN of this entry.
  - `verifications` object[]: Only with fullProfile=true. What the member has verified. An empty array means the panel was read and nothing is verified; an ABSENT key means the option was not requested or the panel could not be read, and then partial.sections names 'verifications'. Not the same as isVerified, which is a plain boolean on every call and is not derived from this.
    - `type` 'IDENTITY' | 'WORKPLACE' | 'EDUCATIONAL_INSTITUTION': Normalized category. ABSENT when the category could not be recognized — the panel is rendered in a natural language and no category is guessed; `label` still carries the original wording.
    - `label` string, required: The category as the source wrote it, e.g. "Identity". The language can vary between calls, so do not key logic on it.
    - `detail` string: The source's own one-line explanation, verbatim. Free text, so no date is parsed out of it.
  - `relatedProfiles` object[]: Only with `fullProfile=true`. The profiles the source suggests alongside this one, typically up to 10. An empty array means the source suggested none; an absent key means the option was not requested or the extra page could not be read (then `partial.sections` names `relatedProfiles`). Two calls are not guaranteed to return the same suggestions.
    - `publicIdentifier` string, required: Public identifier (slug), usable directly as `profileUrlOrUrn` on this endpoint.
    - `url` string, required: Public profile URL.
    - `name` string: Name as shown on the suggestion. Omitted when not shown.
    - `headline` string: Headline at the time of the fetch. Omitted when not shown.
    - `profilePictureUrl` string: Profile picture, largest size. Omitted when no photo is shown (no placeholder here).
    - `profilePictureUrls` ProfileImage[]: Every size of that picture, smallest first. Omitted when no photo is shown.
      - `url` string, required: Image URL
      - `width` integer: Width in pixels, as declared by the source. Omitted when it declares none.
      - `height` integer: Height in pixels, as declared by the source. Omitted when it declares none.
  - `partial` object: Present ONLY when part of the response is knowingly incomplete; its absence means nothing was dropped. A profile is assembled from several upstream reads, and when one cannot be completed the affected array is shorter than the member real data - previously indistinguishable from a genuinely short list.
    - `sections` string[]: Names of the response fields that may be short or missing, e.g. ["experiences"]. Possible values: an array that came back shorter than the member real list (experiences, educations, skills, certifications, languages, testScores, publications, projects, patents, honors, organizations, courses, volunteerExperiences); a best-effort field that could not be fetched, or only in part, on this call (recommendations and recommendationsGiven: absent or shorter than the member real list; joinDate, birthDate, websites and openProfile: absent; joinDate, birthDate and websites come from the same read and are listed together; when birthDate is listed it could not be read on this call, otherwise the member's birthday was not visible to us); and with fullProfile=true only, relatedProfiles (the extra page could not be read) and workplaceType (some or all roles could not be checked for one; it is a field of each experience, not a top-level one), and verifications (the profile-details panel could not be read).
    - `totals` object: How large the source says each affected section really is, when it reports a size. Keyed by the same names, except experienceGroups - which counts STINTS, because that is the unit the source reports. A stint is one continuous period at one employer, so this is neither a count of roles nor a count of distinct employers: a member who left an employer and came back counts it twice (see experiences[].positionGroupUrn).
  - `recommendationsGiven` object[]: 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.
    - `description` string: The recommendation text.
    - `caption` string: The recipient's headline at the time of the fetch.
    - `recipientFullname` string: Full name of the person who was recommended.
    - `recipientUrl` string: The recipient's public profile page URL.
    - `createdAt` string, date-time: When the recommendation was written, ISO 8601. Omitted when the source carries no timestamp.
    - `lastModifiedAt` string, date-time: When it was last edited, ISO 8601. Equal to createdAt when it was never edited.

## Other responses

- `400`: Bad request - a required parameter is missing or a value is invalid.
- `401`: Unauthorized - the X-API-Key header is missing or invalid.
- `402`: Payment required - you are out of credits (QUOTA_EXHAUSTED): the plan allowance for the current period is spent AND no pay-as-you-go credits are left. Buy pay-as-you-go credits (self-serve, https://fetchin.io/credits), upgrade your plan, or wait for renewal; retrying will not help and no Retry-After is sent. Distinct from the per-second rate limit, which is a 429 (RATE_LIMITED).
- `404`: Not found - the request was served successfully but the requested professional entity does not exist.
- `429`: Too many requests - your per-second rate limit (RATE_LIMITED) was exceeded. Back off and retry, honoring the Retry-After header. (Running out of credits is a separate 402 PaymentRequired / QUOTA_EXHAUSTED, and buying credits never raises this per-second limit.)
- `500`: Internal server error - an unexpected error occurred in our API. Safe to retry; contact support if it persists.
- `503`: Service unavailable - our API is temporarily unable to serve this request (capacity exhausted or overloaded). This is on our side, not yours and not an upstream service outage. Retry with backoff, honoring the Retry-After header.

---

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