{"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":[]}]}