Guardr API

Guardr API as documented publicly: 14 operations. Contract generated from the documentation by API Evangelist (2026-11-11); not the provider's own document.

GitHub OpenAPI

Operations 14

GET /api/enrollment-tokens GET /api/enrollment-tokens #
POST /api/enrollment-tokens POST /api/enrollment-tokens #
GET /api/enrollment-tokens/{id}/redemptions Lists every key ever issued from one token. #
POST /api/enrollment-tokens/{id}/revoke-all Revokes every active key ever issued from this token plus the token itself. #
GET /v1/account Returns your current plan, quota configuration and list of active API keys. #
POST /v1/enroll Redeems an enrollment token for a permanent, single-site-bound API key. #
GET /v1/scan read results #
POST /v1/scan POST /v1/scan #
GET /v1/scan/{domain} Returns the most recent cached scan result for a domain. #
POST /v1/scan/example.com POST /v1/scan/example.com #
GET /v1/sites Returns all active monitored sites for your account. #
POST /v1/sites Adds a domain to your monitored sites and triggers an immediate first scan. #
DELETE /v1/sites/{domain} Removes a site from monitoring. #
GET /your-address.json GET /your-address.json #

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/guardr-io:guardr-io-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

guardr-io-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: Guardr API
  version: '2026-11-11'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-11-11: 14 operation(s) read from 7 public documentation page(s) (each operation
    names its page in x-source). This is not the provider''s published contract; Guardr has published no machine-readable contract that the pipeline
    could find. Engine: local.'
  x-evidence-tiers:
    code-example: 7
    documentation: 7
    pages-with-code: 2
    pages-read: 7
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-11-11'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://guardr.io/docs/api
  - https://guardr.io/docs/mcp
  - https://guardr.io/docs/getting-started
  - https://guardr.io/docs/reports
  - https://guardr.io/docs/status-pages
  - https://guardr.io/docs/audit-log
  - https://guardr.io/docs
servers:
- url: https://api.guardr.io
paths:
  /api/enrollment-tokens:
    get:
      operationId: get_api_enrollment_tokens
      tags:
      - Api
      summary: GET /api/enrollment-tokens
      x-source: https://guardr.io/docs/api
      responses:
        '200':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiEnrollmentTokensResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl curl https://guardr.io/api/enrollment-tokens  -b \"session=your_dashboard_session_cookie\" Response - 200 OK 200 OK {\n\
          \ \"tokens\": [\n {\n \"id\": \"b7e2c1a0-...\",\n \"label\": \"Agency rollout - batch 1\",\n \"expires_at\": \"2026-07-25T10:00:00.000Z\"\
          ,\n \"max_uses\": 12,\n \"uses_remaining\": 9,\n \"created_at\": \"2026-07-23T10:00:00.000Z\",\n \"revoked\": false,\n \"expired\":\
          \ false,\n \"redemption_count\": 3,\n \"active_redemp"
    post:
      operationId: post_api_enrollment_tokens
      tags:
      - Api
      summary: POST /api/enrollment-tokens
      x-source: https://guardr.io/docs/api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiEnrollmentTokensRequest'
      responses:
        '201':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiEnrollmentTokensResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl curl -X POST https://guardr.io/api/enrollment-tokens  -b \"session=your_dashboard_session_cookie\"  -H \"Content-Type:\
          \ application/json\"  -d '{\"label\": \"Agency rollout - batch 1\"}' Response - 201 Created 201 Created {\n \"token\": \"grd_enroll_...\"\
          ,\n \"token_id\": \"b7e2c1a0-...\",\n \"label\": \"Agency rollout - batch 1\",\n \"expires_at\": \"2026-07-25T10:00:00.000Z\",\n \"\
          max_uses\": 12,\n \"shown_once\": true,\n \"me"
  /api/enrollment-tokens/{id}/redemptions:
    get:
      operationId: get_api_enrollment_tokens_id_redemptions
      tags:
      - Api
      summary: Lists every key ever issued from one token.
      x-source: https://guardr.io/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiEnrollmentTokensIdRedemptionsResponse'
      x-evidence:
        kind: documentation
  /api/enrollment-tokens/{id}/revoke-all:
    post:
      operationId: post_api_enrollment_tokens_id_revoke_all
      tags:
      - Api
      summary: Revokes every active key ever issued from this token plus the token itself.
      x-source: https://guardr.io/docs/api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiEnrollmentTokensIdRevokeAllResponse'
      x-evidence:
        kind: documentation
  /v1/account:
    get:
      operationId: get_v1_account
      tags:
      - Account
      summary: Returns your current plan, quota configuration and list of active API keys.
      x-source: https://guardr.io/docs/api
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1AccountResponse'
      x-evidence:
        kind: documentation
  /v1/enroll:
    post:
      operationId: post_v1_enroll
      tags:
      - Enroll
      summary: Redeems an enrollment token for a permanent, single-site-bound API key.
      x-source: https://guardr.io/docs/api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1EnrollRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostV1EnrollResponse'
      x-evidence:
        kind: documentation
  /v1/scan:
    get:
      operationId: get_v1_scan
      tags:
      - Scan
      summary: read results
      x-source: https://guardr.io/docs
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
    post:
      operationId: post_v1_scan
      tags:
      - Scan
      summary: POST /v1/scan
      x-source: https://guardr.io/docs/api
      responses:
        '201':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostV1ScanResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X POST https://api.guardr.io/v1/scan  -H \"X-API-Key: your_key_here\"  -H \"Content-Type: application/json\"  -d \"{\\\
          \"domain\\\": \\\"$domain\\\"}\"\ndone Quota is per-domain - scanning 10 different domains uses 10 quota slots, not 10× a single slot.\
          \ GET /v1/scan/:domain \nReturns the most recent cached scan result for a domain. Never triggers a new scan - use\n POST /v1/scan for\
          \ that.\n Parameters Paramete"
  /v1/scan/{domain}:
    get:
      operationId: get_v1_scan_domain
      tags:
      - Scan
      summary: Returns the most recent cached scan result for a domain.
      x-source: https://guardr.io/docs/api
      parameters:
      - name: domain
        in: path
        required: true
        schema:
          type: string
      - name: path
        in: query
        required: false
        schema:
          type: string
        description: Monitored path on that domain, e.g. ?path=/checkout
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1ScanDomainResponse'
      x-evidence:
        kind: documentation
  /v1/scan/example.com:
    post:
      operationId: post_v1_scan_example_com
      tags:
      - Scan
      summary: POST /v1/scan/example.com
      x-source: https://guardr.io/docs/api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1ScanExampleComRequest'
      responses:
        '201':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostV1ScanExampleComResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl curl https://api.guardr.io/v1/scan/example.com 200 OK {\n \"domain\": \"example.com\",\n \"scanned_at\": \"2026-04-18T10:00:00.000Z\"\
          ,\n \"grade\": \"B+\",\n \"score\": 83,\n \"categories\": {\n \"tls\": 90,\n \"headers\": 78,\n \"cookies\": 100,\n \"dns\": 80,\n \"\
          exposure\": 100\n }\n} Authentication \nAuthenticate by passing your API key in the\n X-API-Key \nrequest header. Get your key from\n\
          \ Dashboard → API Access .\n Authenticat"
  /v1/sites:
    get:
      operationId: get_v1_sites
      tags:
      - Sites
      summary: Returns all active monitored sites for your account.
      x-source: https://guardr.io/docs/api
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetV1SitesResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_v1_sites
      tags:
      - Sites
      summary: Adds a domain to your monitored sites and triggers an immediate first scan.
      x-source: https://guardr.io/docs/api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostV1SitesRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostV1SitesResponse'
      x-evidence:
        kind: documentation
  /v1/sites/{domain}:
    delete:
      operationId: delete_v1_sites_domain
      tags:
      - Sites
      summary: Removes a site from monitoring.
      x-source: https://guardr.io/docs/api
      parameters:
      - name: domain
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteV1SitesDomainResponse'
      x-evidence:
        kind: documentation
  /your-address.json:
    get:
      operationId: get_your_address_json
      tags:
      - Your Address
      summary: GET /your-address.json
      x-source: https://guardr.io/docs/status-pages
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -H 'If-None-Match: W/\"0c78eb0c7638c043\"'  https://status.guardr.io/your-address.json What the JSON carries \nThe JSON\
          \ is the page's own data rather than a separate API, so it holds what the page shows:\n page - the page's title , its slug and its overall\
          \ state . components - one entry per component, each with its label , its\n state , when it was last_verified_at and a\n data_confidence\
          \ reading f"
components:
  schemas:
    GetApiEnrollmentTokensResponse:
      type: object
      properties:
        tokens:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              label:
                type: string
              expires_at:
                type: string
                format: date-time
              max_uses:
                type: integer
              uses_remaining:
                type: integer
              created_at:
                type: string
                format: date-time
              revoked:
                type: boolean
              expired:
                type: boolean
              redemption_count:
                type: integer
              active_redemption_count:
                type: integer
    PostApiEnrollmentTokensRequest:
      type: object
      properties:
        label:
          type: string
    PostApiEnrollmentTokensResponse:
      type: object
      properties:
        token:
          type: string
        token_id:
          type: string
        label:
          type: string
        expires_at:
          type: string
          format: date-time
        max_uses:
          type: integer
        shown_once:
          type: boolean
        message:
          type: string
    GetApiEnrollmentTokensIdRedemptionsResponse:
      type: object
      properties:
        redemptions:
          type: array
    PostApiEnrollmentTokensIdRevokeAllResponse:
      type: object
      properties:
        success:
          type: boolean
        revoked_count:
          type: integer
    GetV1AccountResponse:
      type: object
      properties:
        plan:
          type: string
        quota:
          type: object
        keys:
          type: array
    PostV1EnrollRequest:
      type: object
      properties:
        enrollment_token:
          type: string
          description: Generated from Dashboard → API Access → Enrollment Tokens.
        domain:
          type: string
          description: Domain to bind this redemption to, e.g. example.com.
      required:
      - enrollment_token
      - domain
    PostV1EnrollResponse:
      type: object
      properties:
        key:
          type: string
        site:
          type: object
        shown_once:
          type: boolean
        message:
          type: string
    PostV1ScanResponse:
      type: object
      properties:
        domain:
          type: string
        scanned_at:
          type: string
          format: date-time
        grade:
          type: string
        score:
          type: integer
        categories:
          type: object
          properties:
            tls:
              type: integer
            headers:
              type: integer
            cookies:
              type: integer
            dns:
              type: integer
            exposure:
              type: integer
        issues:
          type: array
          items:
            type: object
            properties:
              title:
                type: string
              severity:
                type: string
              category:
                type: string
              description:
                type: string
              remediation:
                type: object
                properties:
                  summary:
                    type: string
                  effort:
                    type: string
                  snippets:
                    type: array
                    items: {}
        issues_truncated:
          type: boolean
        total_issues:
          type: integer
        secrets_found:
          type: array
          items: {}
    GetV1ScanDomainResponse:
      type: object
      properties:
        domain:
          type: string
        scanned_at:
          type: string
        grade:
          type: string
        score:
          type: integer
        categories:
          type: object
        issues:
          type: array
        issues_truncated:
          type: boolean
        total_issues:
          type: integer
        secrets_found:
          type: array
    PostV1ScanExampleComRequest:
      type: object
      properties:
        domain:
          type: string
    PostV1ScanExampleComResponse:
      type: object
      properties:
        domain:
          type: string
        scanned_at:
          type: string
          format: date-time
        grade:
          type: string
        score:
          type: integer
        categories:
          type: object
          properties:
            tls:
              type: integer
            headers:
              type: integer
            cookies:
              type: integer
            dns:
              type: integer
            exposure:
              type: integer
    GetV1SitesResponse:
      type: object
      properties:
        sites:
          type: array
        total:
          type: integer
    PostV1SitesRequest:
      type: object
      properties:
        domain:
          type: string
          description: Domain to add, e.g. example.com
        path:
          type: string
          description: Specific path to monitor on that domain, e.g. /checkout
      required:
      - domain
    PostV1SitesResponse:
      type: object
      properties:
        site:
          type: object
    DeleteV1SitesDomainResponse:
      type: object
      properties:
        success:
          type: boolean
        domain:
          type: string
        path:
          type: string
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-API-Key
security:
- apiKey: []
tags:
- name: Account
- name: Api
- name: Enroll
- name: Scan
- name: Sites
- name: Your Address