> ## Documentation Index
> Fetch the complete documentation index at: https://docs.spidra.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a Monitor

> One monitor with its sources, schedule, alert settings and last result.

```bash theme={null}
curl "https://api.spidra.io/api/monitors/d6761e12-b011-4633-a593-fa6be2ef466c" \
  -H "Authorization: Bearer $SPIDRA_API_KEY"
```

```json theme={null}
{
  "status": "success",
  "monitor": {
    "id": "d6761e12-b011-4633-a593-fa6be2ef466c",
    "name": "Docs test page",
    "status": "active",
    "sources": [{ "id": "ae22524a61ad", "kind": "urls", "urls": ["https://httpbin.org/uuid"], "label": "httpbin.org" }],
    "schedule": { "every": "1d", "at": "09:00", "timezone": "Africa/Lagos" },
    "cron": "0 9 * * *",
    "alertOn": "page",
    "watchFields": [],
    "rule": null,
    "goal": null,
    "notify": { "email": { "enabled": false } },
    "nextRunAt": "2026-10-25T08:00:00.000Z",
    "lastCheckAt": "2026-10-24T18:51:34.000Z",
    "lastChangeAt": "2026-10-24T18:51:34.000Z",
    "lastStatus": "completed",
    "lastSummary": "1 page changed",
    "createdAt": "2026-10-24T18:50:07.000Z",
    "updatedAt": "2026-10-24T18:50:07.000Z"
  }
}
```

* `nextRunAt` is `null` while the monitor is paused. Times are UTC.
* `lastSummary` is the last check in a few words: "3 new", "No change", "Price dropped on 1 item".
* With a webhook, `notify.webhook.secret` holds the signing secret, including one Spidra generated for you.


## OpenAPI

````yaml GET /monitors/{monitorId}
openapi: 3.1.0
info:
  title: Spidra API
  version: 1.0.0
  description: >-
    Public API endpoints for web scraping via Spidra. Authenticate with
    `Authorization: Bearer YOUR_API_KEY`.
servers:
  - url: https://api.spidra.io/api
security:
  - BearerAuth: []
  - ApiKeyAuth: []
paths:
  /monitors/{monitorId}:
    get:
      tags:
        - Monitors
      summary: Get a Monitor
      description: One monitor.
      parameters:
        - name: monitorId
          in: path
          required: true
          schema:
            type: string
          description: The monitor's ID.
      responses:
        '200':
          description: The monitor.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                      - success
                  monitor:
                    $ref: '#/components/schemas/Monitor'
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: No monitor with this ID on your account (`NOT_FOUND`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    Monitor:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        status:
          type: string
          enum:
            - active
            - paused
        sources:
          type: array
          items:
            $ref: '#/components/schemas/MonitorSource'
        schedule:
          $ref: '#/components/schemas/MonitorSchedule'
        cron:
          type: string
          description: The schedule as a cron expression.
        alertOn:
          type: string
        watchFields:
          type: array
          items:
            type: string
        rule:
          $ref: '#/components/schemas/MonitorRule'
        goal:
          type:
            - string
            - 'null'
        notify:
          $ref: '#/components/schemas/MonitorNotify'
        nextRunAt:
          type:
            - string
            - 'null'
          format: date-time
        lastCheckAt:
          type:
            - string
            - 'null'
          format: date-time
        lastChangeAt:
          type:
            - string
            - 'null'
          format: date-time
        lastStatus:
          type:
            - string
            - 'null'
        lastSummary:
          type:
            - string
            - 'null'
          description: The last check in a few words, such as "3 new" or "No change".
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    ErrorResponse:
      type: object
      properties:
        status:
          type: string
          enum:
            - error
        message:
          type: string
      required:
        - status
        - message
    MonitorSource:
      type: object
      required:
        - kind
      properties:
        id:
          type: string
          description: >-
            Optional. Kept per source so changes are compared against the same
            source next time.
        kind:
          type: string
          enum:
            - template
            - preset
            - urls
        label:
          type: string
          description: Shown in alerts. Defaults to the template, preset or site name.
        template:
          type: string
          description: 'kind template: the template''s slug.'
        inputs:
          type: object
          description: 'kind template: the template''s inputs.'
        presetId:
          type: string
          description: >-
            kind preset: the preset's ID. Scrape, batch, map, search and
            template presets can be watched.
        urls:
          type: array
          items:
            type: string
          maxItems: 50
          description: 'kind urls: up to 50 public pages.'
    MonitorSchedule:
      type: object
      properties:
        every:
          type: string
          enum:
            - 5m
            - 15m
            - 30m
            - 1h
            - 6h
            - 12h
            - 1d
            - 1w
        at:
          type: string
          description: >-
            "HH:MM". The time for 1d and 1w, and the minute past the hour for
            1h, 6h and 12h. Default 09:00.
        day:
          type: integer
          minimum: 0
          maximum: 6
          description: '1w only: 0 is Sunday. Default 1 (Monday).'
        cron:
          type: string
          description: 'Instead of `every`: a 5-field cron expression.'
        timezone:
          type: string
          description: An IANA time zone such as Africa/Lagos. Default UTC.
      description: >-
        Your plan sets the shortest interval: daily on Free, hourly on Starter,
        every 15 minutes on Builder, every 5 minutes on Pro.
    MonitorRule:
      type:
        - object
        - 'null'
      properties:
        field:
          type: string
        op:
          type: string
          enum:
            - lt
            - lte
            - gt
            - gte
            - eq
            - neq
            - contains
            - drops_by_pct
            - rises_by_pct
        value:
          type:
            - number
            - string
      description: >-
        Only alert about items where this is true, for example `{ "field":
        "price", "op": "drops_by_pct", "value": 10 }`.
    MonitorNotify:
      type: object
      properties:
        email:
          type: object
          properties:
            enabled:
              type: boolean
              default: true
            recipients:
              type: array
              items:
                type: string
              maxItems: 10
              description: >-
                Extra addresses. Each gets alerts only after confirming by
                email.
          description: Your account's email is on unless `enabled` is false.
        webhook:
          type: object
          properties:
            url:
              type: string
              description: A public https URL.
            secret:
              type: string
              description: >-
                16 to 128 letters, digits, - or _. Generated when you leave it
                out.
        slack:
          type: object
          properties:
            webhookUrl:
              type: string
              description: A Slack incoming webhook URL (https://hooks.slack.com/...).
        discord:
          type: object
          properties:
            webhookUrl:
              type: string
              description: A Discord webhook URL (https://discord.com/api/webhooks/...).
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.