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

# List clickwrap events

> Retrieve a paginated list of verified clickwrap events for the current
tenant. Use this endpoint for audit workflows, compliance exports, and
historical lookups across end users and templates.

Results are ordered **newest first** by `actionAt`. Filtering can be
applied individually or in combination.

The `nextPageCursor` value is **opaque**. Clients must treat it as an
uninterpreted value and pass it back exactly as returned.

**Authenticated** — requires `X-APP-ID` and `X-APP-KEY` headers.




## OpenAPI

````yaml /openapi/clickterm-public-api.yaml get /clickwrap-events
openapi: 3.0.3
info:
  title: ClickTerm Public Client API
  version: '1.0'
  description: |
    The ClickTerm Public Client API lets you integrate legally-binding
    consent management into your application. Use it alongside the
    ClickTerm Web SDK or Android SDK.

    **Authentication:** Most endpoints require `X-APP-ID` and `X-APP-KEY`
    headers. The exceptions are `GET /clickwrap` and `POST /clickwrap`,
    which use the public `appId` in query/body parameters and do not
    require the App Key.
  contact:
    name: ClickTerm Support
    url: https://clickterm.com
    email: support@clickterm.com
servers:
  - url: https://api.clickterm.com/public-client/v1
    description: Production
security: []
tags:
  - name: Clickwrap
    description: >-
      Core clickwrap operations — fetch templates, record acceptance, verify
      Signatures
  - name: Events
    description: Clickwrap event details, certificates, and consent status
  - name: Templates
    description: Template discovery and metadata
paths:
  /clickwrap-events:
    get:
      tags:
        - Events
      summary: List clickwrap events
      description: |
        Retrieve a paginated list of verified clickwrap events for the current
        tenant. Use this endpoint for audit workflows, compliance exports, and
        historical lookups across end users and templates.

        Results are ordered **newest first** by `actionAt`. Filtering can be
        applied individually or in combination.

        The `nextPageCursor` value is **opaque**. Clients must treat it as an
        uninterpreted value and pass it back exactly as returned.

        **Authenticated** — requires `X-APP-ID` and `X-APP-KEY` headers.
      operationId: listClickwrapEvents
      parameters:
        - name: clickwrapTemplateId
          in: query
          required: false
          schema:
            type: string
            format: uuid
          description: Filter by Clickwrap Template ID
        - name: endUserId
          in: query
          required: false
          schema:
            type: string
          description: Filter by end user identifier
        - name: clickwrapEventStatus
          in: query
          required: false
          schema:
            type: string
            enum:
              - ACCEPTED
              - DECLINED
          description: Filter by verified event status
        - name: from
          in: query
          required: false
          schema:
            type: string
            format: date-time
          description: Inclusive lower bound for `actionAt` (UTC, ISO-8601)
        - name: to
          in: query
          required: false
          schema:
            type: string
            format: date-time
          description: >-
            Inclusive upper bound for `actionAt` (UTC, ISO-8601). Must be after
            `from`.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
          description: Maximum number of results to return per page
        - name: nextPageCursor
          in: query
          required: false
          schema:
            type: string
          description: Opaque pagination cursor returned by the previous page
      responses:
        '200':
          description: Paginated list of clickwrap events
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClickwrapEventPageResponse'
              examples:
                Page with results:
                  summary: Filtered page with next cursor
                  value:
                    items:
                      - clickwrapEventStatus: ACCEPTED
                        clickwrapEventId: 123e4567-e89b-12d3-a456-426614174000
                        clickwrapTemplateId: 987e6543-e21b-45d3-b321-426614174999
                        clickwrapTemplateVersion: 3
                        clickwrapTemplateVersionMinor: 1
                        endUserId: user-123
                        templatePlaceholders: '{"email":"user@example.com"}'
                        technicalMetadata: '{"userAgent":"Mozilla/5.0...","ip":"203.0.113.42"}'
                        presentedAt: '2026-03-23T14:25:00Z'
                        actionAt: '2026-03-23T14:30:00Z'
                        effectiveAt: '2026-03-23T14:00:00Z'
                      - clickwrapEventStatus: DECLINED
                        clickwrapEventId: 223e4567-e89b-12d3-a456-426614174000
                        clickwrapTemplateId: 987e6543-e21b-45d3-b321-426614174999
                        clickwrapTemplateVersion: 3
                        clickwrapTemplateVersionMinor: 1
                        endUserId: user-456
                        templatePlaceholders: null
                        technicalMetadata: '{"userAgent":"Mozilla/5.0...","ip":"203.0.113.43"}'
                        presentedAt: '2026-03-22T09:58:00Z'
                        actionAt: '2026-03-22T10:00:00Z'
                        effectiveAt: '2026-03-23T14:00:00Z'
                    nextPageCursor: >-
                      eyJhY3Rpb25BdCI6IjIwMjYtMDMtMjJUMTA6MDA6MDBaIiwiZXZlbnRJZCI6IjIyM2U0NTY3LWU4OWItMTJkMy1hNDU2LTQyNjYxNDE3NDAwMCJ9
                Empty page:
                  summary: Empty result set
                  value:
                    items: []
                    nextPageCursor: null
        '400':
          description: >-
            Invalid filter values, invalid `nextPageCursor`, or `from` is after
            `to`
        '401':
          description: Invalid App Key or App Id
      security:
        - appIdHeader: []
          appKeyHeader: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |
            curl -X GET \
              -H "X-APP-ID: YOUR_APP_ID" \
              -H "X-APP-KEY: YOUR_APP_KEY" \
              "https://api.clickterm.com/public-client/v1/clickwrap-events?clickwrapTemplateId=987e6543-e21b-45d3-b321-426614174999&clickwrapEventStatus=ACCEPTED&limit=20"
        - lang: javascript
          label: Node.js
          source: |
            const params = new URLSearchParams({
              clickwrapTemplateId: templateId,
              clickwrapEventStatus: "ACCEPTED",
              limit: "20",
            });

            const response = await fetch(
              `https://api.clickterm.com/public-client/v1/clickwrap-events?${params}`,
              {
                headers: {
                  "X-APP-ID": process.env.CLICKTERM_APP_ID,
                  "X-APP-KEY": process.env.CLICKTERM_APP_KEY,
                },
              }
            );

            const page = await response.json();
        - lang: python
          label: Python
          source: |
            response = requests.get(
                "https://api.clickterm.com/public-client/v1/clickwrap-events",
                headers={
                    "X-APP-ID": CLICKTERM_APP_ID,
                    "X-APP-KEY": CLICKTERM_APP_KEY,
                },
                params={
                    "clickwrapTemplateId": clickwrap_template_id,
                    "clickwrapEventStatus": "ACCEPTED",
                    "limit": 20,
                },
            )
            page = response.json()
        - lang: java
          label: Java
          source: |
            HttpResponse<String> response = Unirest.get(
                "https://api.clickterm.com/public-client/v1/clickwrap-events")
              .header("X-APP-ID", "YOUR_APP_ID")
              .header("X-APP-KEY", "YOUR_APP_KEY")
              .queryString("clickwrapTemplateId", clickwrapTemplateId)
              .queryString("clickwrapEventStatus", "ACCEPTED")
              .queryString("limit", 20)
              .asString();
components:
  schemas:
    ClickwrapEventPageResponse:
      type: object
      description: Cursor-paginated response containing verified clickwrap events
      properties:
        items:
          type: array
          description: >-
            Events matching the supplied filters, ordered newest first by
            `actionAt`
          items:
            $ref: '#/components/schemas/ClickwrapEventResponseDto'
        nextPageCursor:
          type: string
          nullable: true
          description: Opaque cursor for the next page, or null when no more results remain
    ClickwrapEventResponseDto:
      type: object
      description: Full details of a verified clickwrap event
      properties:
        clickwrapEventStatus:
          type: string
          enum:
            - ACCEPTED
            - DECLINED
          description: The verified status of the clickwrap event
        clickwrapEventId:
          type: string
          format: uuid
          description: Unique identifier for this Clickwrap Event
        clickwrapTemplateId:
          type: string
          format: uuid
          description: The clickwrap template shown to the end user
        clickwrapTemplateVersion:
          type: integer
          description: Major version number of the template used for this event
        clickwrapTemplateVersionMinor:
          type: integer
          description: Minor version number of the template used for this event
        endUserId:
          type: string
          description: The end user identifier linked to this event
        templatePlaceholders:
          type: string
          nullable: true
          description: JSON-encoded placeholder values used in the template, or null
        technicalMetadata:
          type: string
          description: JSON-encoded client metadata (IP address, user agent, device info)
        presentedAt:
          type: string
          format: date-time
          description: When the clickwrap was presented to the end user (UTC, ISO-8601)
        actionAt:
          type: string
          format: date-time
          description: When the end user performed the action (UTC, ISO-8601)
        effectiveAt:
          type: string
          format: date-time
          description: When the template version became effective (UTC, ISO-8601)
  securitySchemes:
    appIdHeader:
      type: apiKey
      in: header
      name: X-APP-ID
      description: |
        Your application's App ID, sent as the `X-APP-ID` header.
        Must be accompanied by `X-APP-KEY` for authenticated endpoints.
    appKeyHeader:
      type: apiKey
      in: header
      name: X-APP-KEY
      description: Your application's secret App Key (server-side only)

````