JobsPipe Technologies API

The Technologies API from JobsPipe — 3 operation(s) for technologies.

GitHub OpenAPI
Business capability
Company & Contact Data AE-230.30

Operations 4

GET /v1/technologies List technologies #
GET /v1/technologies/export Export companies by technology #
POST /v1/technologies/resolve Resolve names to technology slugs #
GET /v1/technologies/{slug} One technology #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/jobspipe:jobspipe-technologies-api"
All apis
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.

Get an API 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 Specification

jobspipe-technologies-api-openapi.yml Raw ↑
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