# Use pineapi from your assistant

Paste the block into an assistant with HTTP execution tools. A chat without tools cannot make API calls. This is an integration brief, not an installed connector or MCP server.

```text
pineapi — LinkedIn profile extraction over HTTP. You are driving it for me.
Base URL: ask me for PINEAPI_BASE_URL; the production API host is not yet confirmed.
Do not send credentials to the website or guess an API hostname.
Auth: Authorization: Bearer <my key, starts pine_sk_>. Keep the key private.
Cost: $0.012 per profile delivered, prepaid. Search minimum $0.12; lookup no floor.
Never request more than I asked for. Explain the maximum cost and ask before a run over $5.
No sandbox, test credit, free trial, email enrichment or MCP server.

Both creation POSTs require an Idempotency-Key and return 202 with run_id.
Generate a unique key for each new operation; persist it with the exact body.
For a retry of the same operation, reuse that key and unchanged body.

1. Search: POST /v1/profile-searches
{"locations":["Spain"],"current_job_titles":["Data Engineer"],"max_items":100}
max_items: multiple of 25, from 25 to 2000, default 100.
Read closed vocabularies, do not guess values:
GET /v1/catalogs/industries, /locations, /schools, /experience-bands,
/company-headcounts. Experience bands apply to years_of_experience and
 years_at_current_company; headcounts apply to company_headcount.

2. Lookup: POST /v1/profile-lookups
{"linkedin_urls":["https://www.linkedin.com/in/<slug>"]}
1–2000 URLs, normalized and deduplicated; no blocks of 25 or search floor.

Poll GET /v1/runs/{run_id} until succeeded, partial, failed or cancelled.
Poll every 5 seconds for the first minute, then every 20 seconds.
Lookup usually takes seconds, search minutes. These are not deadlines or an SLA.
Queued, starting, running and processing are not final. Preserve run_id on timeout.
Read /v1/runs/{run_id}/profiles?limit=50; pass next_cursor as cursor unchanged
until has_more is false. No offset. CSV: /v1/runs/{run_id}/profiles.csv.

Report profiles_delivered, charged, status and unresolved[] from the run.
Match lookup rows to inputs by requested_url, never the current linkedin_url slug.
Unresolved not_found: dead/renamed URL; unavailable: worth retrying later.
Unresolved URLs cost nothing. Separate runs may bill the same profile again.
Within one run a duplicate row is not delivered or charged twice.
Partial is a normal terminal outcome: fewer profiles arrived than requested.
experience_truncated / skills_truncated flag incomplete source sections;
total_months_experience can therefore be an undercount. No email addresses.
start_page is unstable search pagination; prefer one appropriately sized run.
Results expire after 30 days. Save lawful copies before expiry.

Errors: {"error":{"type":"…","code":"…","message":"…","param":null}}.
401 missing_api_key / invalid_api_key: stop and ask for a valid credential.
403 insufficient_scope: ask for a key with the required scope; do not retry blindly.
422 invalid_parameter / start_page_out_of_range: correct the named input.
402 insufficient_balance: stop and ask me to top up; minimum top-up $5.
429: wait Retry-After seconds before retrying; retain the idempotency key/body.
409 idempotency_key_reused: do not change the body of an existing operation.
Missing Idempotency-Key is rejected: add it before starting a new operation.
For transient HTTP failures, retry cautiously with the same key/body.
Poll authenticated run status; webhook signing-secret access is not yet available.
```

# Quickstart

Run these commands in one Bash session. There is no sandbox: creation requests are paid.

## 1. Configure the confirmed API host and key

```bash
# Sign up in the API dashboard, top up by card (minimum $5), then mint an API key.
# The dashboard/production API URL will be supplied at onboarding.
# API keys cannot create keys or read billing; those require a signed-in session.
export PINEAPI_BASE_URL='<confirmed API origin>'
read -r -s PINEAPI_KEY
export PINEAPI_KEY
# Requires curl, jq and uuidgen. Paid requests start in step 3.
```

## 2. Read the accepted filters

```bash
curl --fail-with-body "$PINEAPI_BASE_URL/v1/catalogs/locations" \
  -H "Authorization: Bearer $PINEAPI_KEY"
# Also read industries, schools, experience-bands and company-headcounts as needed.
```

## 3. Create one paid search

```bash
# Up to 100 delivered profiles: $1.20. A completed empty search costs $0.12.
# Keep the key and body unchanged if retrying this request.
IDEMPOTENCY_KEY=$(uuidgen)
RUN_ID=$(curl --fail-with-body "$PINEAPI_BASE_URL/v1/profile-searches" \
  -H "Authorization: Bearer $PINEAPI_KEY" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"locations":["Spain"],"current_job_titles":["Data Engineer"],"max_items":100}' | jq -er '.run_id') || exit 1
printf '%s\n' "$RUN_ID" # Save this ID to resume polling later.
```

## 4. Poll until the run ends

```bash
STARTED=$SECONDS
while true; do
  RUN=$(curl --fail-with-body "$PINEAPI_BASE_URL/v1/runs/$RUN_ID" \
    -H "Authorization: Bearer $PINEAPI_KEY") || exit 1
  STATUS=$(printf '%s' "$RUN" | jq -r '.status')
  case "$STATUS" in
    succeeded|partial) printf '%s\n' "$RUN"; break ;;
    failed|cancelled) printf '%s\n' "$RUN"; exit 1 ;;
    queued|starting|running|processing) ;;
    *) printf 'Unexpected status: %s\n' "$STATUS"; exit 1 ;;
  esac
  if (( SECONDS - STARTED >= 1800 )); then
    printf 'Polling paused; resume with run_id %s\n' "$RUN_ID"; exit 1
  fi
  if (( SECONDS - STARTED < 60 )); then sleep 5; else sleep 20; fi
done
# HTTP errors stop this example. On 429 wait Retry-After before resuming.
```

## 5. Read every page

```bash
CURSOR=''
while true; do
  PAGE=$(curl --fail-with-body --get "$PINEAPI_BASE_URL/v1/runs/$RUN_ID/profiles" \
    -H "Authorization: Bearer $PINEAPI_KEY" \
    --data-urlencode 'limit=50' --data-urlencode "cursor=$CURSOR") || exit 1
  printf '%s' "$PAGE" | jq '.data[]'
  [ "$(printf '%s' "$PAGE" | jq -r '.has_more')" = true ] || break
  CURSOR=$(printf '%s' "$PAGE" | jq -er '.next_cursor') || exit 1
done
```

# Integration guides

## Search or lookup?

Use filters to discover profiles; max_items is a multiple of 25 between 25 and 2,000. Use lookup when you already have 1–2,000 profile URLs. Lookup normalizes and deduplicates that list, has no search floor and does not use start_page.

## Polling and webhook notifications

Polling is the integration path you can implement now: every 5 seconds for the first minute, then every 20 seconds. A webhook_url can receive run.succeeded, run.partial, run.failed or run.cancelled with data.run matching the status response. Profiles are fetched separately. Customer access to the signing secret is not implemented yet, so authenticated polling remains the recommended source of truth; do not trust an unverified incoming notification as proof of completion.

## Partial is a result, not an HTTP error

The terminal states are succeeded, partial, failed and cancelled. Partial means the run delivered less than requested; inspect profiles_delivered, failure, pagination and charged. Delivered rows are billed, with the search minimum applying. HTTP 200 when reading a run only means that the status request succeeded.

## Reconcile a batch of URLs

Join returned profiles to inputs using requested_url. linkedin_url may contain a newer vanity slug. The run’s unresolved array reports requested_url, reason and detail for URLs without a usable profile: not_found means absent or renamed; unavailable may be worth retrying. Neither is billed. Deduplicate your original list before comparing counts.

## Know when data is incomplete

The source measurements found roughly 40% of profiles with truncated experience and 68% with truncated skills. The per-row experience_truncated and skills_truncated flags let you identify them. total_months_experience is an undercount when work history is incomplete. Current role is derived from work history because the source current-position section was empty on 13 of 25 profiles in a verification sample; these are observations, not coverage guarantees.

## Search pages are not result cursors

The predecessor’s repeated searches showed 30% overlap between consecutive pages and a drifting reported total in 28% of repeated searches. Prefer one run with an appropriate max_items over several start_page requests. In contrast, downloaded run results use next_cursor: pass it back as cursor until has_more is false.

## Understand the invoice

The bill counts inserted profile rows, not requested profiles or raw source items. Each delivered profile costs $0.012. Search has a $0.12 minimum; lookup has no floor. A duplicate inside one run is discarded; the same profile in a later run is billed again. Card top-ups start at $5 and credit does not expire. GET /v1/usage and /v1/me require a signed-in session, not an API key. No subscription, seat fee or monthly minimum. Unused paid balance is not refundable on closure except where legally required or charges were incorrect.

# Generated profile schema

**Profile fields**: Generated from the API OpenAPI schema. Nullable values can be absent from the source profile.
- `id` (string (uuid)): Id
- `ordinal` (integer): Ordinal
- `public_identifier` (string | null): Public Identifier
- `linkedin_url` (string): Linkedin Url
- `requested_url` (string | null): Requested Url
- `first_name` (string | null): First Name
- `last_name` (string | null): Last Name
- `full_name` (string | null): Full Name
- `headline` (string | null): Headline
- `about` (string | null): About
- `location_text` (string | null): Location Text
- `location_city` (string | null): Location City
- `location_state` (string | null): Location State
- `location_region_code` (string | null): Location Region Code
- `location_country` (string | null): Location Country
- `location_country_full` (string | null): Location Country Full
- `location_country_code` (string | null): Location Country Code
- `open_to_work` (boolean | null): Open To Work
- `hiring` (boolean | null): Hiring
- `premium` (boolean | null): Premium
- `influencer` (boolean | null): Influencer
- `creator` (boolean | null): Creator
- `verified` (boolean | null): Verified
- `open_profile` (boolean | null): Open Profile
- `memorialized` (boolean | null): Memorialized
- `connections_count` (integer | null): Connections Count
- `follower_count` (integer | null): Follower Count
- `registered_at` (string (date-time) | null): Registered At
- `profile_language` (string | null): Profile Language
- `profile_country` (string | null): Profile Country
- `profile_picture_url` (string | null): Profile Picture Url
- `photo_url` (string | null): Photo Url
- `cover_picture_url` (string | null): Cover Picture Url
- `current_title` (string | null): Current Title
- `current_company_name` (string | null): Current Company Name
- `current_company_linkedin_url` (string | null): Current Company Linkedin Url
- `current_position_started_on` (string (date) | null): Current Position Started On
- `total_months_experience` (integer | null): Total Months Experience
- `months_at_current_company` (integer | null): Months At Current Company
- `months_in_current_role` (integer | null): Months In Current Role
- `promoted_at_current_company` (boolean): Promoted At Current Company
- `promotions_count` (integer): Promotions Count
- `companies_count` (integer): Companies Count
- `avg_months_per_company` (integer | null): Avg Months Per Company
- `linkedin_member_since` (string (date) | null): Linkedin Member Since
- `skills_flat` (string[]): Skills Flat
- `languages_flat` (string[]): Languages Flat
- `school_names` (string[]): School Names
- `company_names` (string[]): Company Names
- `section_totals` (object | null): Section Totals
- `experience_truncated` (boolean): Experience Truncated
- `skills_truncated` (boolean): Skills Truncated
- `scraped_at` (string (date-time)): Scraped At

- `education[]`: Education Sub-fields: .
- `certifications[]`: Certifications Sub-fields: .
- `languages[]`: Languages Sub-fields: .
- `skills[]`: Skills Sub-fields: .
- `projects[]`: Projects Sub-fields: .
- `publications[]`: Publications Sub-fields: .
- `courses[]`: Courses Sub-fields: .
- `honors[]`: Honors Sub-fields: .
- `volunteering[]`: Volunteering Sub-fields: .
- `recommendations[]`: Recommendations Sub-fields: .
- `interests[]`: Interests Sub-fields: .
- `patents[]`: Patents Sub-fields: .
- `organizations[]`: Organizations Sub-fields: .
- `websites[]`: Websites Sub-fields: .
- `top_skills[]`: Top Skills Sub-fields: .
- `experiences[]`: Experiences Sub-fields: ordinal, position, company_name, company_linkedin_url, employment_type, workplace_type, location, description, started_on, ended_on, is_current, duration_months, duration_text, skills.

# Anonymised demo profile

```json
{
  "id": "00000000-0000-0000-0000-0000000000de",
  "ordinal": 0,
  "public_identifier": "morgan-duarte-006",
  "linkedin_url": "https://www.linkedin.com/in/redacted-1383",
  "requested_url": null,
  "first_name": "Morgan",
  "last_name": "Duarte",
  "full_name": "Morgan Duarte",
  "headline": "Working across product and engineering teams to ship things people use. Interested in systems ",
  "about": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they ",
  "location_text": "Spain",
  "location_city": null,
  "location_state": null,
  "location_region_code": null,
  "location_country": "Spain",
  "location_country_full": "Spain",
  "location_country_code": "ES",
  "open_to_work": false,
  "hiring": false,
  "premium": true,
  "influencer": false,
  "creator": false,
  "verified": true,
  "open_profile": false,
  "memorialized": false,
  "connections_count": 1416,
  "follower_count": 1471,
  "registered_at": "2014-06-14T16:55:49.394000Z",
  "profile_language": "en",
  "profile_country": "US",
  "profile_picture_url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
  "photo_url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
  "cover_picture_url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
  "current_title": "Senior Software Engineer",
  "current_company_name": "Covalent",
  "current_company_linkedin_url": "https://www.linkedin.com/company/covalent-material-insights/",
  "current_position_started_on": "2026-01-01",
  "total_months_experience": 284,
  "months_at_current_company": 8,
  "months_in_current_role": 8,
  "promoted_at_current_company": false,
  "promotions_count": 4,
  "companies_count": 20,
  "avg_months_per_company": 14,
  "linkedin_member_since": "2014-06-14",
  "skills_flat": [
    "Online Privacy",
    "ePrivacy"
  ],
  "languages_flat": [
    "Catalán",
    "English"
  ],
  "school_names": [
    "Self-training in Front-end & Back-end development: PhP, Ruby on Rails",
    "Self-training in Front-end development: HTML, CSS, JavaScript, jQuery, PhP",
    "Izhevsk State Technical University (ISTU)"
  ],
  "company_names": [
    "Alex Zappa",
    "Cirkus: Scheduling & Project Management",
    "Compettia - Atrivity",
    "ConsentTheater",
    "Costa Blanca, Ltd.",
    "Covalent",
    "DataFox",
    "FreshJuice",
    "Harness",
    "HeadsUP! , Inc",
    "Highway 92 Succulents",
    "Iru",
    "Kandji",
    "LoanMart",
    "Mammoth Hunters",
    "Marna Digital",
    "Mitor Digital",
    "Orange Marketing",
    "The Navio Group",
    "Trovata.io"
  ],
  "section_totals": {
    "experience": 25,
    "education": 3,
    "certifications": 19,
    "receivedRecommendations": 13,
    "skills": 64,
    "courses": 0,
    "languages": 4,
    "projects": 11,
    "volunteering": 0,
    "publications": 0,
    "patents": 0,
    "organizations": 0,
    "honorsAndAwards": 0,
    "causes": 4
  },
  "experience_truncated": true,
  "skills_truncated": true,
  "education": [
    {
      "schoolName": "Self-training in Front-end & Back-end development: PhP, Ruby on Rails",
      "description": null,
      "insights": null,
      "skills": null,
      "schoolLinkedinUrl": "https://www.linkedin.com/search/results/all/?keywords=Self-training+in+Front-end+%26+Back-end+development%3A+PhP%2C+Ruby+on+Rails",
      "schoolId": null,
      "degree": null,
      "fieldOfStudy": null,
      "period": "2016 - 2017",
      "startDate": {
        "year": 2016,
        "text": "2016"
      },
      "endDate": {
        "year": 2017,
        "text": "2017"
      },
      "schoolLogo": null
    },
    {
      "schoolName": "Self-training in Front-end development: HTML, CSS, JavaScript, jQuery, PhP",
      "description": null,
      "insights": null,
      "skills": null,
      "schoolLinkedinUrl": "https://www.linkedin.com/search/results/all/?keywords=Self-training+in+Front-end+development%3A+HTML%2C+CSS%2C+JavaScript%2C+jQuery%2C+PhP",
      "schoolId": null,
      "degree": null,
      "fieldOfStudy": null,
      "period": "2006 - 2013",
      "startDate": {
        "year": 2006,
        "text": "2006"
      },
      "endDate": {
        "year": 2013,
        "text": "2013"
      },
      "schoolLogo": null
    },
    {
      "schoolName": "Izhevsk State Technical University (ISTU)",
      "description": null,
      "insights": null,
      "skills": null,
      "schoolLinkedinUrl": "https://www.linkedin.com/company/15099078/",
      "schoolId": "15099078",
      "degree": "Bachelor of Science - BS",
      "fieldOfStudy": "Computer Science (Incomplete)",
      "period": "2003 - 2006",
      "startDate": {
        "year": 2003,
        "text": "2003"
      },
      "endDate": {
        "year": 2006,
        "text": "2006"
      },
      "schoolLogo": {
        "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
        "sizes": [
          {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
            "width": 400,
            "height": 400
          },
          {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
            "width": 200,
            "height": 200
          },
          {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
            "width": 100,
            "height": 100
          }
        ]
      }
    }
  ],
  "certifications": [
    {
      "title": "HubSpot Architecture I:  Data Models and APIs",
      "issuedBy": "HubSpot Academy",
      "issuedAt": "Issued May 2023 · Expired May 2025",
      "link": "https://app.hubspot.com/academy/achievements/g3gfph5y/en/1/alex-zappa/hubspot-architecture-i-data-models-and-apis",
      "issuedByLink": "https://www.linkedin.com/company/16197478/",
      "issuedByLogo": {
        "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
        "sizes": [
          {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
            "width": 400,
            "height": 400
          },
          {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
            "width": 200,
            "height": 200
          },
          {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
            "width": 100,
            "height": 100
          }
        ]
      }
    },
    {
      "title": "Digital Marketing ",
      "issuedBy": "HubSpot Academy",
      "issuedAt": "Issued Apr 2023 · Expired May 2025",
      "link": "https://app.hubspot.com/academy/achievements/mcs5ybn8/en/1/alex-zappa/digital-marketing",
      "issuedByLink": "https://www.linkedin.com/company/16197478/",
      "issuedByLogo": {
        "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
        "sizes": [
          {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
            "width": 400,
            "height": 400
          },
          {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
            "width": 200,
            "height": 200
          },
          {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
            "width": 100,
            "height": 100
          }
        ]
      }
    }
  ],
  "languages": [
    {
      "name": "Catalán",
      "proficiency": "Limited working proficiency"
    },
    {
      "name": "English",
      "proficiency": "Native or bilingual proficiency"
    }
  ],
  "skills": [
    {
      "name": "Online Privacy",
      "positions": [
        "Creator & Maintainer at ConsentTheater"
      ]
    },
    {
      "name": "ePrivacy",
      "positions": [
        "Creator & Maintainer at ConsentTheater"
      ]
    }
  ],
  "projects": [
    {
      "title": "FreshJuice",
      "duration": "Jan 2024 - Present",
      "startDate": {
        "month": "Jan",
        "year": 2024,
        "text": "Jan 2024"
      },
      "endDate": {
        "text": "Present"
      },
      "description": null
    },
    {
      "title": "Kandji.io — Marketing Website",
      "duration": "Sep 2021 - Sep 2025",
      "startDate": {
        "month": "Sep",
        "year": 2021,
        "text": "Sep 2021"
      },
      "endDate": {
        "month": "Sep",
        "year": 2025,
        "text": "Sep 2025"
      },
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engi"
    }
  ],
  "publications": [],
  "courses": [],
  "honors": [],
  "volunteering": [],
  "recommendations": [
    {
      "givenBy": "Avery Duarte",
      "givenAt": "March 9, 2026",
      "givenByLink": "https://www.linkedin.com/in/redacted-6180",
      "givenByHeadline": "Sam Bianchi",
      "givenByPicture": null,
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use."
    },
    {
      "givenBy": "Morgan Rivera",
      "givenAt": "December 13, 2025",
      "givenByLink": "https://www.linkedin.com/in/redacted-6344",
      "givenByHeadline": "Sam Rivera",
      "givenByPicture": {
        "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
        "sizes": [
          {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
            "width": 800,
            "height": 800
          },
          {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
            "width": 400,
            "height": 400
          },
          {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
            "width": 200,
            "height": 200
          },
          {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg",
            "width": 100,
            "height": 100
          }
        ]
      },
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineer"
    }
  ],
  "interests": [
    {
      "interestName": "Top Voices",
      "elements": [
        {
          "title": "Megan Lieu",
          "subtitle": "Developer Advocate & Founder @ ML Data | Data Science & AI Content Creator",
          "link": "https://www.linkedin.com/in/redacted-1812",
          "caption": "230,965 followers",
          "image": {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg"
          }
        },
        {
          "title": "Yamini Rangan",
          "subtitle": "CEO at HubSpot | Helping millions grow better",
          "link": "https://www.linkedin.com/in/redacted-8822",
          "caption": "181,922 followers",
          "image": {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg"
          }
        }
      ]
    },
    {
      "interestName": "Companies",
      "elements": [
        {
          "title": "PlayStation",
          "subtitle": null,
          "link": "https://www.linkedin.com/company/1254/",
          "caption": "1,052,801 followers",
          "image": {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg"
          }
        },
        {
          "title": "Google",
          "subtitle": null,
          "link": "https://www.linkedin.com/company/1441/",
          "caption": "42,357,999 followers",
          "image": {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg"
          }
        }
      ]
    },
    {
      "interestName": "Groups",
      "elements": [
        {
          "title": "GDPR General Data Protection Regulation Technology",
          "subtitle": null,
          "link": "https://www.linkedin.com/groups/12017677",
          "caption": "34,569 members",
          "image": {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg"
          }
        },
        {
          "title": "Information Security Network",
          "subtitle": null,
          "link": "https://www.linkedin.com/groups/80784",
          "caption": "734,208 members",
          "image": {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg"
          }
        }
      ]
    },
    {
      "interestName": "Newsletters",
      "elements": [
        {
          "title": "Going CLEAR: Warmly GTM",
          "subtitle": "GTM, RevOps & Founder Advice from Maximus Greenwald who posts live actual monthly revenue numbers",
          "link": "https://www.linkedin.com/newsletters/7174798574000439296",
          "caption": "Published weekly",
          "image": {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg"
          }
        },
        {
          "title": "GDPR StepWise™ ",
          "subtitle": "Building StepWise™... a fixed-price, 10-step roadmap turning compliance into the structure businesses need to grow.",
          "link": "https://www.linkedin.com/newsletters/7417448553255694336",
          "caption": "Published weekly",
          "image": {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg"
          }
        }
      ]
    },
    {
      "interestName": "Schools",
      "elements": [
        {
          "title": "Y Combinator",
          "subtitle": null,
          "link": "https://www.linkedin.com/school/167872/",
          "caption": "1,811,337 followers",
          "image": {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg"
          }
        },
        {
          "title": "Regenera",
          "subtitle": null,
          "link": "https://www.linkedin.com/school/70890416/",
          "caption": "10,157 followers",
          "image": {
            "url": "https://media.licdn.com/dms/image/fixture/morgan-duarte-006.jpg"
          }
        }
      ]
    }
  ],
  "patents": [],
  "organizations": [],
  "websites": [],
  "top_skills": [
    "HubSpot CMS Developer",
    "JAMstack",
    "High Performance Web Sites",
    "JavaScript",
    "Tailwind CSS"
  ],
  "experiences": [
    {
      "ordinal": 0,
      "position": "Senior Software Engineer",
      "company_name": "Covalent",
      "company_linkedin_url": "https://www.linkedin.com/company/covalent-material-insights/",
      "employment_type": "Contract",
      "workplace_type": "Remote",
      "location": "Sunnyvale, California, United States",
      "description": null,
      "started_on": "2026-01-01",
      "ended_on": null,
      "is_current": true,
      "duration_months": 8,
      "duration_text": "9 mos",
      "skills": [
        "React.js",
        "Next.js",
        "Astro",
        "WordPress",
        "C#",
        "Software Development",
        "SaaS Development",
        "AngularJS"
      ]
    },
    {
      "ordinal": 1,
      "position": "Creator & Maintainer",
      "company_name": "ConsentTheater",
      "company_linkedin_url": "https://www.linkedin.com/company/consenttheater/",
      "employment_type": "Self-employed",
      "workplace_type": "Remote",
      "location": "Worldwide",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering ",
      "started_on": "2025-08-01",
      "ended_on": null,
      "is_current": true,
      "duration_months": 13,
      "duration_text": "1 yr 2 mos",
      "skills": [
        "Online Privacy",
        "General Data Protection Regulation (GDPR)",
        "Open Source",
        "ePrivacy"
      ]
    },
    {
      "ordinal": 2,
      "position": "Founder and Software Engineer",
      "company_name": "FreshJuice",
      "company_linkedin_url": "https://www.linkedin.com/company/freshjuice/",
      "employment_type": null,
      "workplace_type": "Remote",
      "location": "☀️ Sunny Spain",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things",
      "started_on": "2024-01-01",
      "ended_on": null,
      "is_current": true,
      "duration_months": 32,
      "duration_text": "2 yrs 9 mos",
      "skills": [
        "Eleventy",
        "High Performance Web Sites",
        "Web Content Accessibility Guidelines (WCAG)",
        "JAMstack",
        "Front-End Development",
        "Search Engine Optimization (SEO)",
        "HubSpot",
        "Software Development",
        "Alpine.js",
        "SEO Audits",
        "Tailwind CSS",
        "Node.js",
        "React.js",
        "Rust (Programming Language)"
      ]
    },
    {
      "ordinal": 3,
      "position": "Technical Fellow",
      "company_name": "Orange Marketing",
      "company_linkedin_url": "https://www.linkedin.com/company/orangemarketing1/",
      "employment_type": "Contract",
      "workplace_type": "Remote",
      "location": "Newport Beach, California, United States",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people us",
      "started_on": "2025-06-01",
      "ended_on": null,
      "is_current": true,
      "duration_months": 15,
      "duration_text": "1 yr 4 mos",
      "skills": []
    },
    {
      "ordinal": 4,
      "position": "Senior Software Engineer",
      "company_name": "Orange Marketing",
      "company_linkedin_url": "https://www.linkedin.com/company/orangemarketing1/",
      "employment_type": "Contract",
      "workplace_type": "Remote",
      "location": "Newport Beach, California, United States",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that st",
      "started_on": "2019-06-01",
      "ended_on": "2025-06-01",
      "is_current": false,
      "duration_months": 72,
      "duration_text": "6 yrs 1 mo",
      "skills": [
        "Visual Web Developer",
        "High Performance Web Sites",
        "Web Content Accessibility Guidelines (WCAG)",
        "JAMstack",
        "Front-End Development",
        "React.js",
        "HubSpot",
        "Software Development",
        "SEO Audits",
        "Tailwind CSS",
        "Node.js"
      ]
    },
    {
      "ordinal": 5,
      "position": "Full Stack Developer",
      "company_name": "LoanMart",
      "company_linkedin_url": "https://www.linkedin.com/company/wheels-financial-group-dba-800loanmart/",
      "employment_type": "Contract",
      "workplace_type": "Remote",
      "location": "Los Angeles, California, United States",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as t",
      "started_on": "2019-06-01",
      "ended_on": null,
      "is_current": true,
      "duration_months": 87,
      "duration_text": "7 yrs 4 mos",
      "skills": []
    },
    {
      "ordinal": 6,
      "position": "Independent Software Engineer",
      "company_name": "Alex Zappa",
      "company_linkedin_url": "https://www.linkedin.com/company/alex-zappa/",
      "employment_type": "Freelance",
      "workplace_type": "Remote",
      "location": "planet Earth, Solar system, Milky Way galaxy",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay s",
      "started_on": "2014-08-01",
      "ended_on": null,
      "is_current": true,
      "duration_months": 145,
      "duration_text": "12 yrs 2 mos",
      "skills": [
        "Visual Web Developer",
        "Vue.js",
        "Eleventy",
        "High Performance Web Sites",
        "Full-Stack Development",
        "Web Content Accessibility Guidelines (WCAG)",
        "JAMstack",
        "Front-End Development",
        "PHP",
        "React.js",
        "Astro",
        "Search Engine Optimization (SEO)",
        "HubSpot",
        "Python (Programming Language)",
        "Software Development",
        "Alpine.js",
        "SEO Audits",
        "Tailwind CSS",
        "Web Applications",
        "User Experience (UX)",
        "WordPress",
        "Node.js"
      ]
    },
    {
      "ordinal": 7,
      "position": "Senior Web Developer",
      "company_name": "Iru",
      "company_linkedin_url": "https://www.linkedin.com/company/officiallyiru/",
      "employment_type": "Contract",
      "workplace_type": "Remote",
      "location": "Miami, Florida, United States",
      "description": null,
      "started_on": "2025-09-01",
      "ended_on": "2026-02-01",
      "is_current": false,
      "duration_months": 5,
      "duration_text": "6 mos",
      "skills": [
        "FreshJuice.dev",
        "HubSpot CMS Developer",
        "Alpine.js",
        "JavaScript",
        "Front-End Development",
        "Tailwind CSS",
        "HubDB",
        "API Development"
      ]
    },
    {
      "ordinal": 8,
      "position": "Senior Web Developer",
      "company_name": "Kandji",
      "company_linkedin_url": "https://www.linkedin.com/company/kandji/",
      "employment_type": "Full-time",
      "workplace_type": "On-site",
      "location": "London, England, United Kingdom",
      "description": null,
      "started_on": "2025-03-01",
      "ended_on": "2025-10-01",
      "is_current": false,
      "duration_months": 7,
      "duration_text": "8 mos",
      "skills": [
        "Eleventy",
        "High Performance Web Sites",
        "Web Content Accessibility Guidelines (WCAG)",
        "JAMstack",
        "Front-End Development",
        "React.js",
        "HubSpot",
        "SEO Audits",
        "Tailwind CSS",
        "Node.js",
        "FreshJuice.dev"
      ]
    },
    {
      "ordinal": 9,
      "position": "Sr. Web Developer",
      "company_name": "Kandji",
      "company_linkedin_url": "https://www.linkedin.com/company/kandji/",
      "employment_type": "Contract",
      "workplace_type": "Remote",
      "location": "Miami, Florida, United States",
      "description": null,
      "started_on": "2022-11-01",
      "ended_on": "2025-03-01",
      "is_current": false,
      "duration_months": 28,
      "duration_text": "2 yrs 5 mos",
      "skills": [
        "Eleventy",
        "High Performance Web Sites",
        "Web Content Accessibility Guidelines (WCAG)",
        "JAMstack",
        "Front-End Development",
        "React.js",
        "HubSpot",
        "SEO Audits",
        "Tailwind CSS",
        "Node.js"
      ]
    },
    {
      "ordinal": 10,
      "position": "Web Developer",
      "company_name": "Kandji",
      "company_linkedin_url": "https://www.linkedin.com/company/kandji/",
      "employment_type": "Freelance",
      "workplace_type": "Remote",
      "location": "San Francisco, California, United States",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and e",
      "started_on": "2019-07-01",
      "ended_on": "2022-11-01",
      "is_current": false,
      "duration_months": 40,
      "duration_text": "3 yrs 5 mos",
      "skills": [
        "Front-End Development",
        "Node.js"
      ]
    },
    {
      "ordinal": 11,
      "position": "Web Developer",
      "company_name": "Trovata.io",
      "company_linkedin_url": "https://www.linkedin.com/company/trovata-io/",
      "employment_type": "Freelance",
      "workplace_type": "Remote",
      "location": "San Diego, California, United States",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. W",
      "started_on": "2019-02-01",
      "ended_on": "2023-11-01",
      "is_current": false,
      "duration_months": 57,
      "duration_text": "4 yrs 10 mos",
      "skills": [
        "Visual Web Developer",
        "Front-End Development",
        "PHP",
        "React.js",
        "HubSpot",
        "WordPress",
        "Node.js"
      ]
    },
    {
      "ordinal": 12,
      "position": "Chief Technology Officer",
      "company_name": "Marna Digital",
      "company_linkedin_url": "https://www.linkedin.com/company/marna-digital/",
      "employment_type": "Freelance",
      "workplace_type": "Hybrid",
      "location": "Alicante, Valencian Community, Spain",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship t",
      "started_on": "2018-02-01",
      "ended_on": "2022-12-01",
      "is_current": false,
      "duration_months": 58,
      "duration_text": "4 yrs 11 mos",
      "skills": []
    },
    {
      "ordinal": 13,
      "position": "Full Stack Engineer",
      "company_name": "Mitor Digital",
      "company_linkedin_url": "https://www.linkedin.com/search/results/all/?keywords=Mitor+Digital",
      "employment_type": "Freelance",
      "workplace_type": null,
      "location": "Alicante, Valencian Community, Spain",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Intere",
      "started_on": "2018-11-01",
      "ended_on": "2021-04-01",
      "is_current": false,
      "duration_months": 29,
      "duration_text": "2 yrs 6 mos",
      "skills": [
        "Front-End Development"
      ]
    },
    {
      "ordinal": 14,
      "position": "Full Stack Developer",
      "company_name": "Highway 92 Succulents",
      "company_linkedin_url": "https://www.linkedin.com/company/highway-92-succulents/",
      "employment_type": "Freelance",
      "workplace_type": null,
      "location": "San Francisco Bay Area",
      "description": "Working across product and engi",
      "started_on": "2016-12-01",
      "ended_on": "2020-03-01",
      "is_current": false,
      "duration_months": 39,
      "duration_text": "3 yrs 4 mos",
      "skills": [
        "Visual Web Developer"
      ]
    },
    {
      "ordinal": 15,
      "position": "Wordpress Developer",
      "company_name": "The Navio Group",
      "company_linkedin_url": "https://www.linkedin.com/company/the-navio-group/",
      "employment_type": "Freelance",
      "workplace_type": "Remote",
      "location": "Minneapolis, Minnesota, United States",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interest",
      "started_on": "2019-01-01",
      "ended_on": "2019-11-01",
      "is_current": false,
      "duration_months": 10,
      "duration_text": "11 mos",
      "skills": [
        "Front-End Development"
      ]
    },
    {
      "ordinal": 16,
      "position": "Frontend Web Developer",
      "company_name": "DataFox",
      "company_linkedin_url": "https://www.linkedin.com/company/datafox/",
      "employment_type": "Contract",
      "workplace_type": "Remote",
      "location": "San Francisco Bay Area",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple a",
      "started_on": "2017-02-01",
      "ended_on": "2019-08-01",
      "is_current": false,
      "duration_months": 30,
      "duration_text": "2 yrs 7 mos",
      "skills": [
        "Front-End Development"
      ]
    },
    {
      "ordinal": 17,
      "position": "Wordpress Developer",
      "company_name": "Compettia - Atrivity",
      "company_linkedin_url": "https://www.linkedin.com/company/compettia/",
      "employment_type": "Part-time",
      "workplace_type": null,
      "location": "Barcelona, Catalonia, Spain",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as t",
      "started_on": "2017-01-01",
      "ended_on": "2019-08-01",
      "is_current": false,
      "duration_months": 31,
      "duration_text": "2 yrs 8 mos",
      "skills": []
    },
    {
      "ordinal": 18,
      "position": "Full Stack Developer",
      "company_name": "Cirkus: Scheduling & Project Management",
      "company_linkedin_url": "https://www.linkedin.com/company/cirkusapp/",
      "employment_type": "Part-time",
      "workplace_type": "Remote",
      "location": "Palma de Mallorca. Spain",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they gr",
      "started_on": "2018-03-01",
      "ended_on": "2019-04-01",
      "is_current": false,
      "duration_months": 13,
      "duration_text": "1 yr 2 mos",
      "skills": [
        "On-Page Optimization",
        "Visual Web Developer",
        "Google Analytics",
        "Mixpanel",
        "HubSpot",
        "WordPress"
      ]
    },
    {
      "ordinal": 19,
      "position": "Wordpress Developer",
      "company_name": "Harness",
      "company_linkedin_url": "https://www.linkedin.com/company/harnessinc/",
      "employment_type": "Freelance",
      "workplace_type": "Remote",
      "location": null,
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that ",
      "started_on": "2017-11-01",
      "ended_on": "2018-11-01",
      "is_current": false,
      "duration_months": 12,
      "duration_text": "1 yr 1 mo",
      "skills": [
        "Visual Web Developer"
      ]
    },
    {
      "ordinal": 20,
      "position": "Senior Fullstack Developer",
      "company_name": "Mammoth Hunters",
      "company_linkedin_url": "https://www.linkedin.com/search/results/all/?keywords=Mammoth+Hunters",
      "employment_type": "Full-time",
      "workplace_type": "On-site",
      "location": "Barcelona, Catalonia, Spain",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as the",
      "started_on": "2016-04-01",
      "ended_on": "2017-08-01",
      "is_current": false,
      "duration_months": 16,
      "duration_text": "1 yr 5 mos",
      "skills": [
        "Visual Web Developer"
      ]
    },
    {
      "ordinal": 21,
      "position": "Frontend Developer",
      "company_name": "HeadsUP! , Inc",
      "company_linkedin_url": "https://www.linkedin.com/search/results/all/?keywords=HeadsUP%21+%2C+Inc",
      "employment_type": "Freelance",
      "workplace_type": null,
      "location": "Seattle, Washington, United States",
      "description": "Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as they grow. Working across product and engineering teams to ship things people use. Interested in systems that stay simple as t",
      "started_on": "2015-12-01",
      "ended_on": "2016-10-01",
      "is_current": false,
      "duration_months": 10,
      "duration_text": "11 mos",
      "skills": []
    },
    {
      "ordinal": 22,
      "position": "IT Staff / Software Developer",
      "company_name": "Costa Blanca, Ltd.",
      "company_linkedin_url": "https://www.linkedin.com/search/results/all/?keywords=Costa+Blanca%2C+Ltd%2E",
      "employment_type": "Full-time",
      "workplace_type": null,
      "location": "Russia",
      "description": "Working across product and engineering teams to ship things people u",
      "started_on": "2006-01-01",
      "ended_on": "2014-12-01",
      "is_current": false,
      "duration_months": 107,
      "duration_text": "8 yrs",
      "skills": []
    },
    {
      "ordinal": 23,
      "position": "IT Staff / Software Developer",
      "company_name": "Costa Blanca, Ltd.",
      "company_linkedin_url": "https://www.linkedin.com/search/results/all/?keywords=Costa+Blanca%2C+Ltd%2E",
      "employment_type": "Internship",
      "workplace_type": null,
      "location": "Russia",
      "description": "Working across product and engineering teams to ship things people u",
      "started_on": "2003-01-01",
      "ended_on": "2006-12-01",
      "is_current": false,
      "duration_months": 47,
      "duration_text": "3 yrs",
      "skills": []
    }
  ],
  "scraped_at": "2026-09-08T15:41:07.825000Z"
}
```

# API contract snapshot

Source revision: cb7d67b955f29b059e78da408cdaec0556a46dbd. Production servers URL pending.

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "pineapi",
    "description": "Pay-as-you-go LinkedIn profile extraction.",
    "version": "0.1.0"
  },
  "paths": {
    "/v1/auth/signup": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Signup",
        "operationId": "signup_v1_auth_signup_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SignupRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/v1/auth/login": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Login",
        "operationId": "login_v1_auth_login_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/v1/auth/logout": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Logout",
        "description": "Ends the session that made this request, and only that one.\n\nSigning out of one browser must not sign you out of the others.",
        "operationId": "logout_v1_auth_logout_post",
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/me": {
      "get": {
        "tags": [
          "account"
        ],
        "summary": "Me",
        "operationId": "me_v1_me_get",
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MeOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/api-keys": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Create Key",
        "description": "Mints a key and shows it once.\n\nReserved to an owner: a key outlives the person and the session that made it,\nso issuing one is an act of delegation and belongs to whoever owns the bill.",
        "operationId": "create_key_v1_api_keys_post",
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KeyRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatedKeyOut"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "account"
        ],
        "summary": "List Keys",
        "description": "Prefixes, never secrets. There is no hash in the response and no way back\nto the key from anything in it.",
        "operationId": "list_keys_v1_api_keys_get",
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/KeyOut"
                  },
                  "title": "Response List Keys V1 Api Keys Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/api-keys/{key_id}": {
      "delete": {
        "tags": [
          "account"
        ],
        "summary": "Revoke Key",
        "description": "Revoking an already-revoked key succeeds.\n\nThe caller asked for it to stop working and it does not work. A key belonging\nto another account is a 404, indistinguishable from one that never existed.",
        "operationId": "revoke_key_v1_api_keys__key_id__delete",
        "parameters": [
          {
            "name": "key_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Key Id"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/usage": {
      "get": {
        "tags": [
          "account"
        ],
        "summary": "Usage",
        "description": "The ledger, newest first.\n\n`amount` is the delta applied to the balance, so summing the column\nreconciles against it — a reserve is negative, a refund positive.",
        "operationId": "usage_v1_usage_get",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 500,
              "minimum": 1,
              "default": 100,
              "title": "Limit"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UsageEntry"
                  },
                  "title": "Response Usage V1 Usage Get"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/profile-searches": {
      "post": {
        "tags": [
          "runs"
        ],
        "summary": "Create Profile Search",
        "operationId": "create_profile_search_v1_profile_searches_post",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProfileSearchRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunAccepted"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/profile-lookups": {
      "post": {
        "tags": [
          "runs"
        ],
        "summary": "Create Profile Lookup",
        "operationId": "create_profile_lookup_v1_profile_lookups_post",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProfileLookupRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunAccepted"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/runs/{run_id}": {
      "get": {
        "tags": [
          "runs"
        ],
        "summary": "Get Run",
        "operationId": "get_run_v1_runs__run_id__get",
        "parameters": [
          {
            "name": "run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Run Id"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunDetail"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/runs/{run_id}/cancel": {
      "post": {
        "tags": [
          "runs"
        ],
        "summary": "Cancel Run",
        "description": "Stop a run that has not finished.\n\nCancelling releases the whole reservation: the run delivered nothing, so it\nbills nothing.\n\nCancelling an already-cancelled run is not an error — a client retrying a\nrequest whose response it never saw wants the run's state, not a failure.\nCancelling a *finished* one is, because that asks us to undo something that\nalready cost money, and answering 200 would say we had.",
        "operationId": "cancel_run_v1_runs__run_id__cancel_post",
        "parameters": [
          {
            "name": "run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Run Id"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunDetail"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/runs/{run_id}/profiles": {
      "get": {
        "tags": [
          "runs"
        ],
        "summary": "List Profiles",
        "operationId": "list_profiles_v1_runs__run_id__profiles_get",
        "parameters": [
          {
            "name": "run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Run Id"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Cursor"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProfilePage"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/runs/{run_id}/profiles.csv": {
      "get": {
        "tags": [
          "runs"
        ],
        "summary": "Profiles Csv",
        "operationId": "profiles_csv_v1_runs__run_id__profiles_csv_get",
        "parameters": [
          {
            "name": "run_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Run Id"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/catalogs/locations": {
      "get": {
        "tags": [
          "catalogs"
        ],
        "summary": "Locations",
        "operationId": "locations_v1_catalogs_locations_get",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "null"
                }
              ],
              "title": "Q"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 500,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Catalog"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/catalogs/industries": {
      "get": {
        "tags": [
          "catalogs"
        ],
        "summary": "Industries",
        "operationId": "industries_v1_catalogs_industries_get",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "null"
                }
              ],
              "title": "Q"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 500,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Catalog"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/catalogs/schools": {
      "get": {
        "tags": [
          "catalogs"
        ],
        "summary": "Schools",
        "description": "Suggestions, not an allowlist.\n\nUnlike locations this list is a curated selection rather than validated\ncoverage, so `schools` accepts values that are not in it. Rejecting every\nschool outside it would refuse most legitimate searches.",
        "operationId": "schools_v1_catalogs_schools_get",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "null"
                }
              ],
              "title": "Q"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 500,
              "minimum": 1,
              "default": 50,
              "title": "Limit"
            }
          },
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Catalog"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/catalogs/company-headcounts": {
      "get": {
        "tags": [
          "catalogs"
        ],
        "summary": "Company Headcounts",
        "operationId": "company_headcounts_v1_catalogs_company_headcounts_get",
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Catalog"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/catalogs/experience-bands": {
      "get": {
        "tags": [
          "catalogs"
        ],
        "summary": "Experience Bands",
        "operationId": "experience_bands_v1_catalogs_experience_bands_get",
        "parameters": [
          {
            "name": "authorization",
            "in": "header",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Catalog"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/v1/demo/profile": {
      "get": {
        "tags": [
          "demo"
        ],
        "summary": "Demo Profile",
        "operationId": "demo_profile_v1_demo_profile_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProfilePage"
                }
              }
            }
          }
        },
        "security": []
      }
    }
  },
  "components": {
    "schemas": {
      "AccountOut": {
        "properties": {
          "account_id": {
            "type": "string",
            "format": "uuid",
            "title": "Account Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "role": {
            "type": "string",
            "title": "Role"
          },
          "balance": {
            "$ref": "#/components/schemas/Money"
          },
          "status": {
            "type": "string",
            "title": "Status"
          }
        },
        "type": "object",
        "required": [
          "account_id",
          "name",
          "role",
          "balance",
          "status"
        ],
        "title": "AccountOut"
      },
      "Catalog": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/CatalogEntry"
            },
            "type": "array",
            "title": "Data"
          },
          "total": {
            "type": "integer",
            "title": "Total"
          },
          "max_per_request": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Per Request"
          }
        },
        "type": "object",
        "required": [
          "data",
          "total"
        ],
        "title": "Catalog"
      },
      "CatalogEntry": {
        "properties": {
          "value": {
            "type": "string",
            "title": "Value"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          }
        },
        "type": "object",
        "required": [
          "value"
        ],
        "title": "CatalogEntry"
      },
      "CreatedKeyOut": {
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "key_prefix": {
            "type": "string",
            "title": "Key Prefix"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "last_used_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Used At"
          },
          "revoked_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked At"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "secret": {
            "type": "string",
            "title": "Secret"
          }
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "key_prefix",
          "scopes",
          "created_at",
          "secret"
        ],
        "title": "CreatedKeyOut",
        "description": "Carries the secret, which is why it is a separate type.\n\nReturned exactly once. Only a hash is stored, so a lost key is replaced\nrather than recovered."
      },
      "Experience": {
        "properties": {
          "ordinal": {
            "type": "integer",
            "title": "Ordinal"
          },
          "position": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Position"
          },
          "company_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Company Name"
          },
          "company_linkedin_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Company Linkedin Url"
          },
          "employment_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Employment Type"
          },
          "workplace_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Workplace Type"
          },
          "location": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Location"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "started_on": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started On"
          },
          "ended_on": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ended On"
          },
          "is_current": {
            "type": "boolean",
            "title": "Is Current",
            "default": false
          },
          "duration_months": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Months"
          },
          "duration_text": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Duration Text"
          },
          "skills": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Skills",
            "default": []
          }
        },
        "type": "object",
        "required": [
          "ordinal"
        ],
        "title": "Experience"
      },
      "Failure": {
        "properties": {
          "reason": {
            "type": "string",
            "title": "Reason"
          },
          "detail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail"
          }
        },
        "type": "object",
        "required": [
          "reason"
        ],
        "title": "Failure"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "KeyOut": {
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "title": "Id"
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "key_prefix": {
            "type": "string",
            "title": "Key Prefix"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "last_used_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Used At"
          },
          "revoked_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Revoked At"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          }
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "key_prefix",
          "scopes",
          "created_at"
        ],
        "title": "KeyOut"
      },
      "KeyRequest": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 200,
            "minLength": 1,
            "title": "Name"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes"
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "KeyRequest"
      },
      "LoginRequest": {
        "properties": {
          "email": {
            "type": "string",
            "maxLength": 254,
            "title": "Email"
          },
          "password": {
            "type": "string",
            "maxLength": 1024,
            "minLength": 1,
            "title": "Password"
          }
        },
        "type": "object",
        "required": [
          "email",
          "password"
        ],
        "title": "LoginRequest"
      },
      "MeOut": {
        "properties": {
          "user_id": {
            "type": "string",
            "format": "uuid",
            "title": "User Id"
          },
          "accounts": {
            "items": {
              "$ref": "#/components/schemas/AccountOut"
            },
            "type": "array",
            "title": "Accounts"
          }
        },
        "type": "object",
        "required": [
          "user_id",
          "accounts"
        ],
        "title": "MeOut"
      },
      "Money": {
        "properties": {
          "micros": {
            "type": "integer",
            "title": "Micros"
          },
          "usd": {
            "type": "string",
            "title": "Usd"
          },
          "currency": {
            "type": "string",
            "title": "Currency",
            "default": "USD"
          }
        },
        "type": "object",
        "required": [
          "micros",
          "usd"
        ],
        "title": "Money",
        "description": "Exact, and legible.\n\n`micros` is the number to do arithmetic with — money in a float is how\nrounding errors become invoices. `usd` is for the human reading the terminal."
      },
      "Pagination": {
        "properties": {
          "total_elements": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Elements"
          },
          "total_pages": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Pages"
          },
          "page_number": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Page Number"
          },
          "page_size": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Page Size"
          }
        },
        "type": "object",
        "title": "Pagination",
        "description": "The provider's own view of the result set this run drew from.\n\n`total_pages` is what makes an out-of-range `start_page` refusable. Note\nthat these numbers drift between calls: repeated runs of one search have\nbeen measured declaring totals 1.21x apart on average."
      },
      "ProfileLookupRequest": {
        "properties": {
          "linkedin_urls": {
            "items": {
              "type": "string",
              "maxLength": 500
            },
            "type": "array",
            "maxItems": 2000,
            "minItems": 1,
            "title": "Linkedin Urls"
          },
          "label": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          },
          "webhook_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Webhook Url"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "linkedin_urls"
        ],
        "title": "ProfileLookupRequest",
        "description": "Profiles addressed directly. No pages, no block of 25, no billing floor."
      },
      "ProfileOut": {
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "title": "Id"
          },
          "ordinal": {
            "type": "integer",
            "title": "Ordinal"
          },
          "public_identifier": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Public Identifier"
          },
          "linkedin_url": {
            "type": "string",
            "title": "Linkedin Url"
          },
          "requested_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Requested Url"
          },
          "first_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "First Name"
          },
          "last_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Name"
          },
          "full_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Full Name"
          },
          "headline": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Headline"
          },
          "about": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "About"
          },
          "location_text": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Location Text"
          },
          "location_city": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Location City"
          },
          "location_state": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Location State"
          },
          "location_region_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Location Region Code"
          },
          "location_country": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Location Country"
          },
          "location_country_full": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Location Country Full"
          },
          "location_country_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Location Country Code"
          },
          "open_to_work": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Open To Work"
          },
          "hiring": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hiring"
          },
          "premium": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Premium"
          },
          "influencer": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Influencer"
          },
          "creator": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Creator"
          },
          "verified": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Verified"
          },
          "open_profile": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Open Profile"
          },
          "memorialized": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Memorialized"
          },
          "connections_count": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Connections Count"
          },
          "follower_count": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Follower Count"
          },
          "registered_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Registered At"
          },
          "profile_language": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Profile Language"
          },
          "profile_country": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Profile Country"
          },
          "profile_picture_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Profile Picture Url"
          },
          "photo_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Photo Url"
          },
          "cover_picture_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cover Picture Url"
          },
          "current_title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Current Title"
          },
          "current_company_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Current Company Name"
          },
          "current_company_linkedin_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Current Company Linkedin Url"
          },
          "current_position_started_on": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Current Position Started On"
          },
          "total_months_experience": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Months Experience"
          },
          "months_at_current_company": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Months At Current Company"
          },
          "months_in_current_role": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Months In Current Role"
          },
          "promoted_at_current_company": {
            "type": "boolean",
            "title": "Promoted At Current Company",
            "default": false
          },
          "promotions_count": {
            "type": "integer",
            "title": "Promotions Count",
            "default": 0
          },
          "companies_count": {
            "type": "integer",
            "title": "Companies Count",
            "default": 0
          },
          "avg_months_per_company": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Avg Months Per Company"
          },
          "linkedin_member_since": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Linkedin Member Since"
          },
          "skills_flat": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Skills Flat",
            "default": []
          },
          "languages_flat": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Languages Flat",
            "default": []
          },
          "school_names": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "School Names",
            "default": []
          },
          "company_names": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Company Names",
            "default": []
          },
          "section_totals": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Section Totals"
          },
          "experience_truncated": {
            "type": "boolean",
            "title": "Experience Truncated",
            "default": false
          },
          "skills_truncated": {
            "type": "boolean",
            "title": "Skills Truncated",
            "default": false
          },
          "education": {
            "items": {},
            "type": "array",
            "title": "Education",
            "default": []
          },
          "certifications": {
            "items": {},
            "type": "array",
            "title": "Certifications",
            "default": []
          },
          "languages": {
            "items": {},
            "type": "array",
            "title": "Languages",
            "default": []
          },
          "skills": {
            "items": {},
            "type": "array",
            "title": "Skills",
            "default": []
          },
          "projects": {
            "items": {},
            "type": "array",
            "title": "Projects",
            "default": []
          },
          "publications": {
            "items": {},
            "type": "array",
            "title": "Publications",
            "default": []
          },
          "courses": {
            "items": {},
            "type": "array",
            "title": "Courses",
            "default": []
          },
          "honors": {
            "items": {},
            "type": "array",
            "title": "Honors",
            "default": []
          },
          "volunteering": {
            "items": {},
            "type": "array",
            "title": "Volunteering",
            "default": []
          },
          "recommendations": {
            "items": {},
            "type": "array",
            "title": "Recommendations",
            "default": []
          },
          "interests": {
            "items": {},
            "type": "array",
            "title": "Interests",
            "default": []
          },
          "patents": {
            "items": {},
            "type": "array",
            "title": "Patents",
            "default": []
          },
          "organizations": {
            "items": {},
            "type": "array",
            "title": "Organizations",
            "default": []
          },
          "websites": {
            "items": {},
            "type": "array",
            "title": "Websites",
            "default": []
          },
          "top_skills": {
            "items": {},
            "type": "array",
            "title": "Top Skills",
            "default": []
          },
          "experiences": {
            "items": {
              "$ref": "#/components/schemas/Experience"
            },
            "type": "array",
            "title": "Experiences",
            "default": []
          },
          "scraped_at": {
            "type": "string",
            "format": "date-time",
            "title": "Scraped At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "ordinal",
          "linkedin_url",
          "scraped_at"
        ],
        "title": "ProfileOut"
      },
      "ProfilePage": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/ProfileOut"
            },
            "type": "array",
            "title": "Data"
          },
          "has_more": {
            "type": "boolean",
            "title": "Has More"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "type": "object",
        "required": [
          "data",
          "has_more"
        ],
        "title": "ProfilePage"
      },
      "ProfileSearchRequest": {
        "properties": {
          "search_query": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 300
              },
              {
                "type": "null"
              }
            ],
            "title": "Search Query"
          },
          "locations": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Locations"
          },
          "exclude_locations": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Exclude Locations"
          },
          "current_job_titles": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Current Job Titles"
          },
          "past_job_titles": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Past Job Titles"
          },
          "exclude_current_job_titles": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Exclude Current Job Titles"
          },
          "exclude_past_job_titles": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Exclude Past Job Titles"
          },
          "current_companies": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Current Companies"
          },
          "past_companies": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Past Companies"
          },
          "exclude_current_companies": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Exclude Current Companies"
          },
          "exclude_past_companies": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Exclude Past Companies"
          },
          "schools": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Schools"
          },
          "exclude_schools": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Exclude Schools"
          },
          "industry_ids": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Industry Ids"
          },
          "exclude_industry_ids": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Exclude Industry Ids"
          },
          "function_ids": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Function Ids"
          },
          "exclude_function_ids": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Exclude Function Ids"
          },
          "seniority_ids": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Seniority Ids"
          },
          "exclude_seniority_ids": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Exclude Seniority Ids"
          },
          "years_of_experience": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Years Of Experience"
          },
          "years_at_current_company": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Years At Current Company"
          },
          "company_headcount": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Company Headcount"
          },
          "company_hq_locations": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Company Hq Locations"
          },
          "exclude_company_hq_locations": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Exclude Company Hq Locations"
          },
          "first_names": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "First Names"
          },
          "last_names": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Last Names"
          },
          "profile_languages": {
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "type": "array",
            "maxItems": 100,
            "title": "Profile Languages"
          },
          "recently_changed_jobs": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recently Changed Jobs"
          },
          "recently_posted": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Recently Posted"
          },
          "max_items": {
            "type": "integer",
            "maximum": 2000,
            "minimum": 25,
            "title": "Max Items",
            "description": "Profiles to fetch. A multiple of 25: the search is served and billed in blocks of 25 whether or not the whole block is taken, so asking for 30 would pay for 50.",
            "default": 100
          },
          "start_page": {
            "type": "integer",
            "maximum": 10000,
            "minimum": 1,
            "title": "Start Page",
            "description": "Which page of the result set to start from. NOT a stable cursor: the underlying ordering shifts between calls, so consecutive pages can overlap or skip. Prefer one call with a high max_items over several with paging.",
            "default": 1
          },
          "label": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          },
          "webhook_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "null"
              }
            ],
            "title": "Webhook Url"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "ProfileSearchRequest",
        "description": "Filters inline, plus the two knobs that control size and position."
      },
      "RunAccepted": {
        "properties": {
          "run_id": {
            "type": "string",
            "format": "uuid",
            "title": "Run Id"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "mode": {
            "type": "string",
            "title": "Mode"
          },
          "resource_type": {
            "type": "string",
            "title": "Resource Type"
          },
          "start_page": {
            "type": "integer",
            "title": "Start Page"
          },
          "max_items": {
            "type": "integer",
            "title": "Max Items"
          },
          "webhook_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Webhook Url"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          }
        },
        "type": "object",
        "required": [
          "run_id",
          "status",
          "mode",
          "resource_type",
          "start_page",
          "max_items",
          "webhook_url",
          "created_at"
        ],
        "title": "RunAccepted",
        "description": "What a 202 carries. The run is queued, not done."
      },
      "RunDetail": {
        "properties": {
          "run_id": {
            "type": "string",
            "format": "uuid",
            "title": "Run Id"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "mode": {
            "type": "string",
            "title": "Mode"
          },
          "resource_type": {
            "type": "string",
            "title": "Resource Type"
          },
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label"
          },
          "input": {
            "additionalProperties": true,
            "type": "object",
            "title": "Input"
          },
          "start_page": {
            "type": "integer",
            "title": "Start Page"
          },
          "max_items": {
            "type": "integer",
            "title": "Max Items"
          },
          "profiles_delivered": {
            "type": "integer",
            "title": "Profiles Delivered"
          },
          "duplicates_discarded": {
            "type": "integer",
            "title": "Duplicates Discarded"
          },
          "charged": {
            "$ref": "#/components/schemas/Money"
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "failure": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Failure"
              },
              {
                "type": "null"
              }
            ]
          },
          "unresolved": {
            "items": {
              "$ref": "#/components/schemas/Unresolved"
            },
            "type": "array",
            "title": "Unresolved",
            "default": []
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "started_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At"
          },
          "finished_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Finished At"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "title": "Expires At"
          }
        },
        "type": "object",
        "required": [
          "run_id",
          "status",
          "mode",
          "resource_type",
          "input",
          "start_page",
          "max_items",
          "profiles_delivered",
          "duplicates_discarded",
          "charged",
          "pagination",
          "created_at",
          "expires_at"
        ],
        "title": "RunDetail"
      },
      "SessionOut": {
        "properties": {
          "session_token": {
            "type": "string",
            "title": "Session Token"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time",
            "title": "Expires At"
          },
          "account_id": {
            "type": "string",
            "format": "uuid",
            "title": "Account Id"
          },
          "role": {
            "type": "string",
            "title": "Role"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes"
          }
        },
        "type": "object",
        "required": [
          "session_token",
          "expires_at",
          "account_id",
          "role",
          "scopes"
        ],
        "title": "SessionOut",
        "description": "The token is shown once and is not retrievable afterwards.\n\nSent back as `Authorization: Bearer sess_...`. Deliberately not a cookie: a\ncookie travels automatically, which is what makes CSRF possible at all, and a\nbearer credential does not. See app/sessions.py."
      },
      "SignupRequest": {
        "properties": {
          "email": {
            "type": "string",
            "maxLength": 254,
            "title": "Email"
          },
          "password": {
            "type": "string",
            "maxLength": 1024,
            "minLength": 12,
            "title": "Password"
          },
          "account_name": {
            "type": "string",
            "maxLength": 200,
            "minLength": 1,
            "title": "Account Name"
          }
        },
        "type": "object",
        "required": [
          "email",
          "password",
          "account_name"
        ],
        "title": "SignupRequest"
      },
      "Unresolved": {
        "properties": {
          "requested_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Requested Url"
          },
          "reason": {
            "type": "string",
            "title": "Reason"
          },
          "detail": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Detail"
          }
        },
        "type": "object",
        "required": [
          "reason"
        ],
        "title": "Unresolved",
        "description": "A URL that was asked for and did not come back as a profile.\n\nLookup mode only. The caller sent a list and is owed an answer about every\nitem in it: a batch of 200 that returns 187 profiles has to say which 13\ndid not resolve, and `requested_url` is how it says so. None of these are\nbilled."
      },
      "UsageEntry": {
        "properties": {
          "kind": {
            "type": "string",
            "title": "Kind"
          },
          "units": {
            "type": "integer",
            "title": "Units"
          },
          "amount": {
            "$ref": "#/components/schemas/Money"
          },
          "run_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid"
              },
              {
                "type": "null"
              }
            ],
            "title": "Run Id"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          }
        },
        "type": "object",
        "required": [
          "kind",
          "units",
          "amount",
          "created_at"
        ],
        "title": "UsageEntry"
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          },
          "input": {
            "title": "Input"
          },
          "ctx": {
            "type": "object",
            "title": "Context"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "An API key (`pine_sk_…`) for machines, or a session token (`sess_…`) for a signed-in person. Both go in `Authorization: Bearer …`."
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ]
}
```