ConsentEase API

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

Operations 19

GET /api/v1/sites GET /api/v1/sites #
POST /consent POST /consent #
GET /sites Read endpoints (sites:read) #
POST /sites POST /sites #
GET /sites/{id} Read endpoints (sites:read) #
GET /sites/{id}/analytics Read endpoints (sites:read) #
GET /sites/{id}/analytics/devices Read endpoints (sites:read) #
GET /sites/{id}/analytics/geographic Read endpoints (sites:read) #
GET /sites/{id}/categories Read endpoints (sites:read) #
GET /sites/{id}/compliance Read endpoints (sites:read) #
GET /sites/{id}/cookies Read endpoints (sites:read) #
POST /sites/{id}/cookies POST /sites/:id/cookies #
GET /sites/{id}/embed Read endpoints (sites:read) #
POST /sites/{id}/installation-check Installation check #
POST /sites/{id}/scan POST /sites/:id/scan #
GET /sites/{id}/status Read endpoints (sites:read) #
POST /sites/setup POST /sites/setup #

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

consentease-io-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: ConsentEase API
  version: '2026-11-04'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-11-04: 19 operation(s) read from 2 public documentation page(s) (each operation
    names its page in x-source). This is not the provider''s published contract; ConsentEase has published no machine-readable contract that the
    pipeline could find. Engine: local.'
  x-evidence-tiers:
    code-example: 2
    documentation: 17
    pages-with-code: 2
    pages-read: 2
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-11-04'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://docs.consentease.io/rest-api
  - https://docs.consentease.io/consent-stats
servers:
- url: https://consentease.io
paths:
  /api/v1/sites:
    get:
      operationId: get_api_v1_sites
      tags:
      - Api
      summary: GET /api/v1/sites
      x-source: https://docs.consentease.io/rest-api
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiV1SitesResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl --fail-with-body 'https://consentease.io/api/v1/sites?limit=20'  -H \"Authorization: Bearer $CONSENTEASE_API_KEY\"  -H\
          \ 'Accept: application/json'\n Treat the response as JSON only after checking status/content type. Unrecognised API paths must not be\
          \ accepted as a successful result merely because a SPA returned HTML 200. \n Read endpoints (sites:read) \n Method / path \n Parameters\
          \ and response con"
  /consent:
    post:
      operationId: post_consent
      tags:
      - Consent
      summary: POST /consent
      x-source: https://docs.consentease.io/rest-api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostConsentRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostConsentResponse'
      x-evidence:
        kind: documentation
  /sites:
    get:
      operationId: get_sites
      tags:
      - Sites
      summary: Read endpoints (sites:read)
      x-source: https://docs.consentease.io/rest-api
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: string
        description: default 20, cap 100
      - name: cursor
        in: query
        required: false
        schema:
          type: string
        description: cursor for pagination
      - name: domain
        in: query
        required: false
        schema:
          type: string
        description: optional exact domain filter
      - name: status
        in: query
        required: false
        schema:
          type: string
        description: optional status filter
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSitesResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_sites
      tags:
      - Sites
      summary: POST /sites
      x-source: https://docs.consentease.io/rest-api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostSitesRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostSitesResponse'
      x-evidence:
        kind: documentation
  /sites/{id}:
    get:
      operationId: get_sites_id
      tags:
      - Sites
      summary: Read endpoints (sites:read)
      x-source: https://docs.consentease.io/rest-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/GetSitesIdResponse'
      x-evidence:
        kind: documentation
  /sites/{id}/analytics:
    get:
      operationId: get_sites_id_analytics
      tags:
      - Sites
      summary: Read endpoints (sites:read)
      x-source: https://docs.consentease.io/rest-api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: period
        in: query
        required: false
        schema:
          type: string
        description: 7d,30d,90d (default 30d)
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSitesIdAnalyticsResponse'
      x-evidence:
        kind: documentation
  /sites/{id}/analytics/devices:
    get:
      operationId: get_sites_id_analytics_devices
      tags:
      - Sites
      summary: Read endpoints (sites:read)
      x-source: https://docs.consentease.io/rest-api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: period
        in: query
        required: false
        schema:
          type: string
        description: same period as analytics
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSitesIdAnalyticsDevicesResponse'
      x-evidence:
        kind: documentation
  /sites/{id}/analytics/geographic:
    get:
      operationId: get_sites_id_analytics_geographic
      tags:
      - Sites
      summary: Read endpoints (sites:read)
      x-source: https://docs.consentease.io/rest-api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: period
        in: query
        required: false
        schema:
          type: string
        description: same period as analytics
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSitesIdAnalyticsGeographicResponse'
      x-evidence:
        kind: documentation
  /sites/{id}/categories:
    get:
      operationId: get_sites_id_categories
      tags:
      - Sites
      summary: Read endpoints (sites:read)
      x-source: https://docs.consentease.io/rest-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/GetSitesIdCategoriesResponse'
      x-evidence:
        kind: documentation
  /sites/{id}/compliance:
    get:
      operationId: get_sites_id_compliance
      tags:
      - Sites
      summary: Read endpoints (sites:read)
      x-source: https://docs.consentease.io/rest-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/GetSitesIdComplianceResponse'
      x-evidence:
        kind: documentation
  /sites/{id}/consent-log:
    get:
      operationId: get_sites_id_consent_log
      tags:
      - Sites
      summary: Read endpoints (sites:read)
      x-source: https://docs.consentease.io/rest-api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: limit
        in: query
        required: false
        schema:
          type: string
        description: default 100, cap 1000
      - name: offset
        in: query
        required: false
        schema:
          type: string
        description: offset for pagination
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSitesIdConsentLogResponse'
      x-evidence:
        kind: documentation
  /sites/{id}/consent-stats:
    get:
      operationId: get_sites_id_consent_stats
      tags:
      - Sites
      summary: Read endpoints (sites:read)
      x-source: https://docs.consentease.io/rest-api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: from
        in: query
        required: true
        schema:
          type: string
        description: required from date
      - name: to
        in: query
        required: true
        schema:
          type: string
        description: required to date
      - name: tz
        in: query
        required: false
        schema:
          type: string
        description: optional timezone
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSitesIdConsentStatsResponse'
      x-evidence:
        kind: documentation
  /sites/{id}/cookies:
    get:
      operationId: get_sites_id_cookies
      tags:
      - Sites
      summary: Read endpoints (sites:read)
      x-source: https://docs.consentease.io/rest-api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - name: cursor
        in: query
        required: false
        schema:
          type: string
        description: cursor pagination
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSitesIdCookiesResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_sites_id_cookies
      tags:
      - Sites
      summary: POST /sites/:id/cookies
      x-source: https://docs.consentease.io/rest-api
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostSitesIdCookiesRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostSitesIdCookiesResponse'
      x-evidence:
        kind: documentation
  /sites/{id}/embed:
    get:
      operationId: get_sites_id_embed
      tags:
      - Sites
      summary: Read endpoints (sites:read)
      x-source: https://docs.consentease.io/rest-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/GetSitesIdEmbedResponse'
      x-evidence:
        kind: documentation
  /sites/{id}/installation-check:
    post:
      operationId: post_sites_id_installation_check
      tags:
      - Sites
      summary: Installation check
      x-source: https://docs.consentease.io/rest-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/PostSitesIdInstallationCheckResponse'
      x-evidence:
        kind: documentation
  /sites/{id}/scan:
    post:
      operationId: post_sites_id_scan
      tags:
      - Sites
      summary: POST /sites/:id/scan
      x-source: https://docs.consentease.io/rest-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/PostSitesIdScanResponse'
      x-evidence:
        kind: documentation
  /sites/{id}/status:
    get:
      operationId: get_sites_id_status
      tags:
      - Sites
      summary: Read endpoints (sites:read)
      x-source: https://docs.consentease.io/rest-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/GetSitesIdStatusResponse'
      x-evidence:
        kind: documentation
  /sites/setup:
    post:
      operationId: post_sites_setup
      tags:
      - Sites
      summary: POST /sites/setup
      x-source: https://docs.consentease.io/rest-api
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostSitesSetupRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostSitesSetupResponse'
      x-evidence:
        kind: documentation
components:
  schemas:
    GetApiV1SitesResponse:
      type: object
      properties:
        status:
          type: string
    PostConsentRequest:
      type: object
      properties:
        siteId:
          type: string
        visitorId:
          type: string
        action:
          type: string
          description: accept_all, reject_all or custom
        consentChoices:
          type: string
          description: up to 8192 characters or keyed object
        bannerVersion:
          type: string
        policyVersion:
          type: string
        userAgent:
          type: string
        country:
          type: string
        region:
          type: string
        consentTiming:
          type: object
          description: '{ decidedAt: ISO timestamp, renewalDays: integer }'
      required:
      - siteId
      - visitorId
      - action
      - consentChoices
    PostConsentResponse:
      type: object
      properties:
        success:
          type: boolean
        deduped:
          type: boolean
        limited:
          type: boolean
    GetSitesResponse:
      type: object
      properties:
        data:
          type: array
          description: website[]
        nextCursor:
          type: string
          description: cursor for next page
    PostSitesRequest:
      type: object
      properties:
        domain:
          type: string
      required:
      - domain
    PostSitesResponse:
      type: object
      properties:
        website:
          type: object
          description: created website object
    GetSitesIdResponse:
      type: object
      properties:
        website:
          type: object
          description: Website object, not a generic data/meta wrapper
    GetSitesIdAnalyticsResponse:
      type: object
      properties:
        data:
          type: object
          description: '{daily,summary}'
        meta:
          type: object
    GetSitesIdAnalyticsDevicesResponse:
      type: object
      properties:
        data:
          type: object
          description: '{devices}'
        meta:
          type: object
    GetSitesIdAnalyticsGeographicResponse:
      type: object
      properties:
        data:
          type: object
          description: '{countries}'
        meta:
          type: object
    GetSitesIdCategoriesResponse:
      type: object
      properties:
        data:
          type: array
          description: category[]; each item has id, name, displayName, isRequired and isEnabled
    GetSitesIdComplianceResponse:
      type: object
      properties:
        websiteId:
          type: string
        domain:
          type: string
        status:
          type: string
        lastScan:
          type: string
        bannerConfigured:
          type: boolean
        scan:
          type: object
        cookies:
          type: array
        categories:
          type: array
        warnings:
          type: array
    GetSitesIdConsentLogResponse:
      type: object
      properties:
        data:
          type: object
          description: '{records,total}'
        meta:
          type: object
    GetSitesIdConsentStatsResponse:
      type: object
      properties:
        explicit-range aggregate contract:
          type: object
          description: as described in the linked guide
    GetSitesIdCookiesResponse:
      type: object
      properties:
        data:
          type: array
          description: cookie[]
        nextCursor:
          type: string
          description: cursor for next page
    PostSitesIdCookiesRequest:
      type: object
      properties:
        name:
          type: string
        categoryId:
          type: string
        provider:
          type: string
        purpose:
          type: string
      required:
      - name
      - categoryId
    PostSitesIdCookiesResponse:
      type: object
      properties:
        cookie:
          type: object
          description: created cookie
    GetSitesIdEmbedResponse:
      type: object
      properties:
        publicId:
          type: string
        scriptUrl:
          type: string
        snippet:
          type: string
          description: canonical full snippet
    PostSitesIdInstallationCheckResponse:
      type: object
      properties:
        siteId:
          type: string
        domain:
          type: string
        checkedUrl:
          type: string
        status:
          type: string
          description: complete, partial, or unreachable
        reason:
          type: string
        setupScore:
          type: integer
          description: 0‑100
        checks:
          type: array
          description: list of {id, passed, detail}
        openItems:
          type: array
          description: plain‑language fixes
        checkedAt:
          type: string
          description: timestamp
        note:
          type: string
        installationWarnings:
          type: array
          description: list of warning objects
    PostSitesIdScanResponse:
      type: object
      properties:
        status:
          type: string
          description: '"scanning"'
    GetSitesIdStatusResponse:
      type: object
      properties:
        data:
          type: object
          description: '{signals,consentRate,lastScan,lastDiagnostic}'
        meta:
          type: object
    PostSitesSetupRequest:
      type: object
      properties:
        domain:
          type: string
      required:
      - domain
    PostSitesSetupResponse:
      type: object
      properties:
        status:
          type: string
          description: created or existing
        created:
          type: boolean
        siteId:
          type: string
        domain:
          type: string
        publicId:
          type: string
        scriptUrl:
          type: string
        snippet:
          type: string
        scanStatus:
          type: string
        scanStartedNow:
          type: boolean
        nextSteps:
          type: string
        installationCheck:
          type: string
        site:
          type: object
          description: website object
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
security:
- bearer: []
tags:
- name: Api
- name: Consent
- name: Sites