JobsPipe Technologies API
The Technologies API from JobsPipe — 3 operation(s) for technologies.
The Technologies API from JobsPipe — 3 operation(s) for technologies.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/jobspipe:jobspipe-technologies-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Jobspipe Technologies API
version: 1.0.0
description: 'Operations tagged Technologies across 3 of this provider''s published API definitions: jobspipe-jobspipe-api-openapi.json, jobspipe-openapi.json, jobspipe-openapi_2.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.jobspipe.dev
tags:
- name: Technologies
description: The technologies companies hire for, and who uses each one.
paths:
/v1/technologies:
get:
operationId: listTechnologies
summary: List technologies
tags:
- Technologies
x-consequence: read-only
x-side-effects: consumes 1 credit
security:
- apiKey: []
- oidc:
- jobs:read
description: Technologies named in job postings, ranked by how many companies hire for them. Costs one credit per call.
parameters:
- name: kind
in: query
required: false
schema:
type: string
description: Comma-separated kinds.
- name: category
in: query
required: false
schema:
type: string
description: Comma-separated category slugs.
- name: country
in: query
required: false
schema:
type: string
description: Comma-separated ISO country codes of the postings.
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 200
default: 50
- name: page
in: query
required: false
schema:
type: integer
minimum: 0
default: 0
responses:
'200':
description: OK.
content:
application/json:
schema:
$ref: '#/components/schemas/TechnologyListResponse'
example:
as_of: '2026-10-24'
metadata:
total_results: 4210
limit: 1
page: 1
data:
- technology:
slug: snowflake
name: Snowflake
category: Data warehouses
category_slug: data-warehouses
parent_category: Data
kind: software
logo: null
companies: 1840
jobs: 6120
first_date_found: '2026-06-02'
last_date_found: '2026-10-24'
'400':
description: Invalid filters.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'402':
description: Monthly request quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Per-second rate limit exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/RateLimitErrorResponse'
servers:
- url: https://api.jobspipe.dev
/v1/technologies/export:
get:
operationId: exportTechnologies
summary: Export companies by technology
tags:
- Technologies
x-consequence: read-only
x-side-effects: consumes 1 credit per call plus 1 per company in the file that the account has not already paid for this calendar month, settled once the data is ready and before the download starts
security:
- apiKey: []
- oidc:
- jobs:read
description: Downloads every company matching the company-search filters as CSV or JSON Lines, one line per company and technology, with the evidence tier, posting counts and first and last dates. Paid plans only. Up to 10,000 companies per file on Builder and Growth, 50,000 on Scale and above; without limit, a larger match is refused with the count. 1 credit per call plus 1 per company not already paid for this calendar month, so re-running an export costs only the call. The charge is settled once the data is ready, before the download starts; nothing is charged on a refusal. One export at a time per account. In CSV, text cells starting with = + - or @ are prefixed with ' so spreadsheets do not run them as formulas.
parameters:
- name: company_technology_slug_or
in: query
required: false
schema:
type: string
description: Companies using ANY of these technologies. Comma-separated or repeated, at most 10.
- name: company_technology_slug_and
in: query
required: false
schema:
type: string
description: Companies using ALL of these technologies. Comma-separated or repeated, at most 10.
- name: company_technology_slug_not
in: query
required: false
schema:
type: string
description: Leave out companies with any evidence, at any tier, for these technologies.
- name: company_country_code_or
in: query
required: false
schema:
type: string
description: Comma-separated ISO country codes of the postings that name the technology.
- name: company_domain_or
in: query
required: false
schema:
type: string
description: Comma-separated company domains.
- name: company_name_or
in: query
required: false
schema:
type: string
description: A company name. Repeat the parameter for several; a comma stays part of the name.
- name: tier_min
in: query
required: false
schema:
type: string
enum:
- confirmed
- likely
- mentioned
default: likely
description: 'Weakest evidence tier that counts. confirmed: two independent checks agree on at least one posting. likely: a required-strength mention or two postings. mentioned: a single mention.'
- name: min_num_jobs_found
in: query
required: false
schema:
type: integer
minimum: 1
- name: format
in: query
required: false
schema:
type: string
enum:
- csv
- jsonl
default: csv
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
description: Export at most this many companies, up to the plan's cap.
responses:
'200':
description: The export, streamed as an attachment. One line per company and technology; CSV has a header row.
headers:
Content-Disposition:
schema:
type: string
description: attachment; filename=technologies-<date>.csv or .jsonl
X-Credits-Charged:
schema:
type: integer
description: Credits this export cost.
X-Companies-Already-Paid:
schema:
type: integer
description: Companies in the file already paid for this month.
X-Total-Companies:
schema:
type: integer
description: Companies in the file.
content:
text/csv:
schema:
type: string
application/x-ndjson:
schema:
type: string
'400':
description: 'Invalid parameters, or export_too_large: the search matches more companies than the plan''s cap (total_companies and max_rows say by how much).'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'402':
description: A free plan (exports need a paid plan), or not enough credits left this month for the call plus the companies not yet paid for (credits_required, credits_remaining).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: 'export_in_progress: another export for this account is being prepared.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Per-second rate limit exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/RateLimitErrorResponse'
'502':
description: The data could not be prepared. Nothing is charged.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'503':
description: 'export_billing_unavailable: credits could not be checked. Nothing is charged.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
servers:
- url: https://api.jobspipe.dev
/v1/technologies/resolve:
post:
operationId: resolveTechnologies
summary: Resolve names to technology slugs
tags:
- Technologies
x-consequence: read-only
x-side-effects: none; free
security:
- apiKey: []
- oidc:
- jobs:read
description: 'Turn a list of technology or product names, or vendor domains, into the slugs the company search takes, each with how it matched and how many companies and postings carry evidence for it. A name that is not tracked answers match: none, which is no signal, not proof it is unused. Free: it costs no credits and is limited to 5 calls a second.'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TechResolveRequest'
example:
names:
- Okta Identity Platform
- okta.com
- Aerospike Database
responses:
'200':
description: One row per name, in the order sent.
content:
application/json:
schema:
$ref: '#/components/schemas/TechResolveResponse'
example:
as_of: '2026-10-24'
data:
- name: okta.com
slug: okta
technology_name: Okta
match: domain
companies: 2310
jobs: 4870
'400':
description: 'Invalid body: names must be 1 to 2,000 strings.'
'401':
description: Not signed in and no API key.
'429':
description: More than 5 calls a second.
servers:
- url: https://api.jobspipe.dev
/v1/technologies/{slug}:
get:
operationId: getTechnology
summary: One technology
tags:
- Technologies
x-consequence: read-only
x-side-effects: consumes 1 credit
security:
- apiKey: []
- oidc:
- jobs:read
description: Companies by evidence tier, top countries and occupations, the top companies, companies that recently started hiring for it, and a monthly adoption series. Costs one credit per call.
parameters:
- name: slug
in: path
required: true
schema:
type: string
description: Technology slug, e.g. "snowflake".
responses:
'200':
description: OK.
content:
application/json:
schema:
$ref: '#/components/schemas/TechnologyDetailResponse'
example:
as_of: '2026-10-24'
technology:
slug: snowflake
name: Snowflake
category: Data warehouses
category_slug: data-warehouses
parent_category: Data
kind: software
logo: null
companies: 1840
jobs: 6120
first_date_found: '2026-06-02'
last_date_found: '2026-10-24'
companies_by_tier:
confirmed: 910
likely: 640
mentioned: 290
top_countries:
- US
- GB
- IN
top_companies:
- id: '3837186692681720328'
name: Google
domain: google.com
url: https://google.com
logo: null
tier: confirmed
confidence: high
jobs: 214
first_date_found: '2026-08-03'
last_date_found: '2026-10-06'
monthly_adoption:
- month: 2026-09
companies: 1210
active_companies: 1102
jobs: 1980
'400':
description: Invalid filters.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'402':
description: Monthly request quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Per-second rate limit exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/RateLimitErrorResponse'
servers:
- url: https://api.jobspipe.dev
components:
schemas:
ErrorResponse:
type: object
required:
- error
properties:
error:
type: string
description: 'Human-readable error message, e.g. "Invalid search filters: unknown filter: ''query''. Did you mean query -> job_title_or?". Not a stable machine-readable code; match on the HTTP status instead. A few stack-scan errors carry a short identifier such as missing_domain or invalid_domain.'
message:
type: string
description: Additional detail. Present on 402 quota responses; other errors carry only error.
TechnologyCompany:
type: object
properties:
id:
type: string
name:
type: string
nullable: true
domain:
type: string
nullable: true
url:
type: string
nullable: true
logo:
type: string
nullable: true
tier:
type: string
enum:
- confirmed
- likely
- mentioned
confidence:
type: string
enum:
- high
- medium
- low
jobs:
type: integer
first_date_found:
type: string
nullable: true
last_date_found:
type: string
nullable: true
TechnologyListResponse:
type: object
properties:
as_of:
type: string
nullable: true
metadata:
type: object
properties:
total_results:
type: integer
limit:
type: integer
page:
type: integer
data:
type: array
items:
type: object
properties:
technology:
$ref: '#/components/schemas/Technology'
companies:
type: integer
jobs:
type: integer
first_date_found:
type: string
nullable: true
last_date_found:
type: string
nullable: true
TechnologyDetailResponse:
type: object
properties:
as_of:
type: string
nullable: true
technology:
$ref: '#/components/schemas/Technology'
companies:
type: integer
jobs:
type: integer
first_date_found:
type: string
nullable: true
last_date_found:
type: string
nullable: true
companies_by_tier:
type: object
properties:
confirmed:
type: integer
likely:
type: integer
mentioned:
type: integer
top_countries:
type: array
items:
type: string
top_occupations:
type: array
items:
type: string
top_companies:
type: array
items:
$ref: '#/components/schemas/TechnologyCompany'
recently_adopted:
type: array
items:
$ref: '#/components/schemas/TechnologyCompany'
monthly_adoption:
type: array
items:
type: object
properties:
month:
type: string
companies:
type: integer
description: Companies whose first posting naming it is in this month.
active_companies:
type: integer
description: Companies with a posting naming it in this month.
jobs:
type: integer
TechResolveResponse:
type: object
properties:
as_of:
type: string
nullable: true
data:
type: array
items:
type: object
properties:
name:
type: string
description: The name as sent.
slug:
type: string
nullable: true
description: The technology slug to search with, or null when the name is not tracked.
technology_name:
type: string
nullable: true
match:
type: string
enum:
- exact
- alias
- domain
- prefix
- none
description: 'exact: the name itself. alias: a known alias once marketplace words are dropped. domain: a vendor''s domain. prefix: the name starts with the technology, so check it. none: not tracked (no signal, not proof it is unused).'
companies:
type: integer
description: Companies with any evidence for the technology.
jobs:
type: integer
description: Postings that named it.
Technology:
type: object
properties:
slug:
type: string
name:
type: string
category:
type: string
nullable: true
category_slug:
type: string
nullable: true
parent_category:
type: string
nullable: true
kind:
type: string
nullable: true
description: product, methodology, certification or standard.
logo:
type: string
nullable: true
TechResolveRequest:
type: object
additionalProperties: false
required:
- names
properties:
names:
type: array
items:
type: string
minLength: 1
maxLength: 200
minItems: 1
maxItems: 2000
description: Technology or product names as you have them, or vendor domains such as okta.com.
RateLimitErrorResponse:
type: object
required:
- error
description: 'Sent with HTTP 429 when the per-second rate limit is exceeded. The response also carries Retry-After: 1 and the RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and RateLimit-Policy headers. A 429 costs no credit.'
properties:
error:
type: string
description: 'Human-readable message: "Rate limit exceeded".'
securitySchemes:
apiKey:
type: http
scheme: bearer
description: 'API key issued from the JobsPipe dashboard, prefixed jp_live_, sent as a bearer token in the Authorization header. Keys are read-only and scoped: jobs:read grants POST /v1/jobs/search, stack:read grants POST /v1/stack/scan. No scope grants write access to JobsPipe data.'
oidc:
type: openIdConnect
openIdConnectUrl: https://jobspipe.dev/.well-known/openid-configuration
description: 'OpenID Connect / OAuth 2.0 access via the JobsPipe authorization server. Supported scopes (also advertised in the protected-resource metadata at https://api.jobspipe.dev/.well-known/oauth-protected-resource): jobs:read - search normalized job postings; stack:read - run technology-stack scans.'
bearerAuth:
type: http
scheme: bearer
description: Your JobsPipe API key (starts with jp_live_).
x-refined-from:
- jobspipe-jobspipe-api-openapi.json
- jobspipe-openapi.json
- jobspipe-openapi_2.json
x-service-info:
categories:
- data
- jobs
- technographics
docs:
homepage: https://jobspipe.dev
apiReference: https://docs.jobspipe.dev
llms: https://jobspipe.dev/llms.txt