JobsPipe Monitors API

The Monitors API from JobsPipe — 4 operation(s) for monitors.

Operations 8

POST /v1/monitors Create a monitor #
GET /v1/monitors List monitors #
GET /v1/monitors/{id} Get a monitor #
DELETE /v1/monitors/{id} Delete a monitor #
POST /v1/monitors/{id}/renew Renew a monitor #
POST /v1/monitors/{id}/ids Add records to a monitor #
DELETE /v1/monitors/{id}/ids Remove records from a monitor #
GET /v1/monitors/{id}/ids List a monitor's records #

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-monitors-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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-monitors-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: JobsPipe Monitors API
  version: 1.0.0
  description: JobsPipe is a unified data API over public job and technographic sources.
  contact:
    name: JobsPipe
    url: https://jobspipe.dev
    email: support@jobspipe.dev
servers:
- url: https://api.jobspipe.dev
security:
- apiKey: []
tags:
- name: Monitors
paths:
  /v1/monitors:
    post:
      operationId: createMonitor
      summary: Create a monitor
      x-consequence: reversible
      x-side-effects: creates a monitor - consumes no credits
      security:
      - apiKey: []
      - oidc:
        - jobs:read
      description: Monitors up to 1,000 job ids (more can be added), sending job.closed to one of your webhook endpoints until the monitor expires (1-365 days, default 90). The ids are looked up, so the response also says, for free, which are already closed and which match nothing; neither is added. Paid plans only.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - type
              - ids
              - webhook_id
              properties:
                type:
                  type: string
                  enum:
                  - job
                ids:
                  type: array
                  items:
                    type: string
                  minItems: 1
                  maxItems: 1000
                events:
                  type: array
                  items:
                    type: string
                    enum:
                    - job.closed
                  description: 'Default: every event of the type.'
                webhook_id:
                  type: string
                  format: uuid
                expires_in_days:
                  type: integer
                  minimum: 1
                  maximum: 365
                  default: 90
      responses:
        '201':
          description: The monitor.
          content:
            application/json:
              schema:
                allOf:
                - type: object
                  properties:
                    id:
                      type: string
                    type:
                      type: string
                      enum:
                      - job
                    events:
                      type: array
                      items:
                        type: string
                        enum:
                        - job.closed
                    webhook_id:
                      type: string
                    status:
                      type: string
                      enum:
                      - active
                      - expired
                    expires_at:
                      type: string
                    created_at:
                      type: string
                    target_count:
                      type: integer
                    open_target_count:
                      type: integer
                - type: object
                  properties:
                    already_closed:
                      type: array
                      items:
                        type: object
                        properties:
                          id:
                            type: string
                          closed_at:
                            type:
                            - string
                            - 'null'
                          closed_reason:
                            type:
                            - string
                            - 'null'
                    not_found:
                      type: array
                      items:
                        type: string
        '400':
          description: Invalid request.
          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: Monitors need a paid plan, or the request would pass the plan's monitored-records limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: No such monitor or webhook on this account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Monitors
    get:
      operationId: listMonitors
      summary: List monitors
      x-consequence: read-only
      x-side-effects: none - consumes no credits
      security:
      - apiKey: []
      - oidc:
        - jobs:read
      description: Your monitors, newest first. Pass next_cursor back as cursor.
      parameters:
      - name: cursor
        in: query
        required: false
        schema:
          type: string
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 1000
      responses:
        '200':
          description: One page of monitors.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        type:
                          type: string
                          enum:
                          - job
                        events:
                          type: array
                          items:
                            type: string
                            enum:
                            - job.closed
                        webhook_id:
                          type: string
                        status:
                          type: string
                          enum:
                          - active
                          - expired
                        expires_at:
                          type: string
                        created_at:
                          type: string
                        target_count:
                          type: integer
                        open_target_count:
                          type: integer
                  next_cursor:
                    type:
                    - string
                    - 'null'
        '400':
          description: Invalid request.
          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: Monitors need a paid plan, or the request would pass the plan's monitored-records limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: No such monitor or webhook on this account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Monitors
  /v1/monitors/{id}:
    get:
      operationId: getMonitor
      summary: Get a monitor
      x-consequence: read-only
      x-side-effects: none - consumes no credits
      security:
      - apiKey: []
      - oidc:
        - jobs:read
      description: One monitor.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: The monitor.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  type:
                    type: string
                    enum:
                    - job
                  events:
                    type: array
                    items:
                      type: string
                      enum:
                      - job.closed
                  webhook_id:
                    type: string
                  status:
                    type: string
                    enum:
                    - active
                    - expired
                  expires_at:
                    type: string
                  created_at:
                    type: string
                  target_count:
                    type: integer
                  open_target_count:
                    type: integer
        '400':
          description: Invalid request.
          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: Monitors need a paid plan, or the request would pass the plan's monitored-records limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: No such monitor or webhook on this account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Monitors
    delete:
      operationId: deleteMonitor
      summary: Delete a monitor
      x-consequence: irreversible
      x-side-effects: deletes the monitor and its records - consumes no credits
      security:
      - apiKey: []
      - oidc:
        - jobs:read
      description: Deletes a monitor; it sends nothing more.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Deleted.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  deleted:
                    type: boolean
        '400':
          description: Invalid request.
          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: Monitors need a paid plan, or the request would pass the plan's monitored-records limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: No such monitor or webhook on this account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Monitors
  /v1/monitors/{id}/renew:
    post:
      operationId: renewMonitor
      summary: Renew a monitor
      x-consequence: reversible
      x-side-effects: extends the monitor - consumes no credits
      security:
      - apiKey: []
      - oidc:
        - jobs:read
      description: Sets the monitor to expire expires_in_days (default 90) from now; works on an expired monitor too.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                expires_in_days:
                  type: integer
                  minimum: 1
                  maximum: 365
                  default: 90
      responses:
        '200':
          description: The renewed monitor.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  type:
                    type: string
                    enum:
                    - job
                  events:
                    type: array
                    items:
                      type: string
                      enum:
                      - job.closed
                  webhook_id:
                    type: string
                  status:
                    type: string
                    enum:
                    - active
                    - expired
                  expires_at:
                    type: string
                  created_at:
                    type: string
                  target_count:
                    type: integer
                  open_target_count:
                    type: integer
        '400':
          description: Invalid request.
          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: Monitors need a paid plan, or the request would pass the plan's monitored-records limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: No such monitor or webhook on this account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Monitors
  /v1/monitors/{id}/ids:
    post:
      operationId: addMonitorIds
      summary: Add records to a monitor
      x-consequence: reversible
      x-side-effects: adds records - consumes no credits
      security:
      - apiKey: []
      - oidc:
        - jobs:read
      description: Adds open jobs to the monitor; already-closed and unknown ids are reported, not added.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - ids
              properties:
                ids:
                  type: array
                  items:
                    type: string
                  minItems: 1
                  maxItems: 1000
                  description: Ids as search returned them, up to 1,000.
      responses:
        '200':
          description: What was added.
          content:
            application/json:
              schema:
                type: object
                properties:
                  added:
                    type: integer
                  target_count:
                    type: integer
                  already_closed:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        closed_at:
                          type:
                          - string
                          - 'null'
                        closed_reason:
                          type:
                          - string
                          - 'null'
                  not_found:
                    type: array
                    items:
                      type: string
        '400':
          description: Invalid request.
          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: Monitors need a paid plan, or the request would pass the plan's monitored-records limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: No such monitor or webhook on this account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Monitors
    delete:
      operationId: removeMonitorIds
      summary: Remove records from a monitor
      x-consequence: reversible
      x-side-effects: removes records - consumes no credits
      security:
      - apiKey: []
      - oidc:
        - jobs:read
      description: Removes records; ids not in the monitor are ignored.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - ids
              properties:
                ids:
                  type: array
                  items:
                    type: string
                  minItems: 1
                  maxItems: 1000
                  description: Ids as search returned them, up to 1,000.
      responses:
        '200':
          description: How many were removed.
          content:
            application/json:
              schema:
                type: object
                properties:
                  removed:
                    type: integer
        '400':
          description: Invalid request.
          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: Monitors need a paid plan, or the request would pass the plan's monitored-records limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: No such monitor or webhook on this account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Monitors
    get:
      operationId: listMonitorIds
      summary: List a monitor's records
      x-consequence: read-only
      x-side-effects: none - consumes no credits
      security:
      - apiKey: []
      - oidc:
        - jobs:read
      description: The monitor's records in id order; a record whose event was sent shows status closed.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: cursor
        in: query
        required: false
        schema:
          type: string
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 1000
      responses:
        '200':
          description: One page of records.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        source_provider:
                          type:
                          - string
                          - 'null'
                        status:
                          type: string
                          enum:
                          - open
                          - closed
                        added_at:
                          type: string
                        closed_at:
                          type:
                          - string
                          - 'null'
                  next_cursor:
                    type:
                    - string
                    - 'null'
        '400':
          description: Invalid request.
          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: Monitors need a paid plan, or the request would pass the plan's monitored-records limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: No such monitor or webhook on this account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Monitors
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.
  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.'
x-service-info:
  categories:
  - data
  - jobs
  - technographics
  docs:
    homepage: https://jobspipe.dev
    apiReference: https://docs.jobspipe.dev
    llms: https://jobspipe.dev/llms.txt