WritersLogic Verifiable AI Agent Hub Sessions API

Witnessing session lifecycle: create, submit events, checkpoint, stop, and query

GitHub OpenAPI

Operations 12

GET /v1/sessions List sessions #
POST /v1/sessions Create a witnessing session #
GET /v1/sessions/{id} Get session details #
POST /v1/sessions/{id}/events Submit event batch #
POST /v1/sessions/{id}/checkpoint Create checkpoint #
POST /v1/sessions/{id}/stop Stop session #
POST /v1/sessions/{id}/finalize Finalize session (alias for stop) #
GET /v1/sessions/{id}/verify Verify session evidence #
GET /v1/sessions/{id}/evidence Get evidence summary #
GET /v1/sessions/{id}/forensics Get forensic analysis #
GET /v1/sessions/{id}/timeline Get session timeline #
GET /v1/sessions/{id}/compliance Get compliance report #

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/writerslogic-com:writerslogic-com-sessions-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

writerslogic-com-sessions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: WritersProof Sessions API
  version: 1.0.0
  description: Certificate Authority and verification API for the Proof-of-Effort protocol. Certify, verify, and prove human authorship.
  contact:
    name: WritersLogic LLC
    url: https://writersproof.com
  license:
    name: SSPL-1.0
    url: https://www.mongodb.com/licensing/server-side-public-license
servers:
- url: https://api.writersproof.com
  description: Production
- url: https://api.writerslogic.com
  description: Legacy
tags:
- name: Sessions
  description: 'Witnessing session lifecycle: create, submit events, checkpoint, stop, and query'
paths:
  /v1/sessions:
    get:
      tags:
      - Sessions
      operationId: listSessions
      summary: List sessions
      description: List the authenticated user's witnessing sessions, optionally filtered by document ID.
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      parameters:
      - name: documentId
        in: query
        required: false
        schema:
          type: string
        description: Filter by document ID
      responses:
        '200':
          description: Session list
          content:
            application/json:
              schema:
                type: object
                properties:
                  sessions:
                    type: array
                    items:
                      $ref: '#/components/schemas/SessionSummary'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      tags:
      - Sessions
      operationId: createSession
      summary: Create a witnessing session
      description: Start a new authorship witnessing session for a document.
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSessionRequest'
      responses:
        '201':
          description: Session created
          content:
            application/json:
              schema:
                type: object
                properties:
                  session_id:
                    type: string
                    format: uuid
                  status:
                    type: string
                    example: active
                  started_at:
                    type: string
                    format: date-time
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/sessions/{id}:
    get:
      tags:
      - Sessions
      operationId: getSession
      summary: Get session details
      description: Retrieve full details of a session owned by the authenticated user.
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      parameters:
      - $ref: '#/components/parameters/SessionId'
      responses:
        '200':
          description: Session details
          content:
            application/json:
              schema:
                type: object
                properties:
                  session:
                    $ref: '#/components/schemas/Session'
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/sessions/{id}/events:
    post:
      tags:
      - Sessions
      operationId: submitEvents
      summary: Submit event batch
      description: Submit a batch of behavioral events (keystrokes, mouse, focus, etc.) to an active session. Maximum 100 events per batch.
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      parameters:
      - $ref: '#/components/parameters/SessionId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitEventsRequest'
      responses:
        '200':
          description: Events accepted
          content:
            application/json:
              schema:
                type: object
                properties:
                  accepted:
                    type: integer
                  event_count:
                    type: integer
                  last_event_at:
                    type: string
                    format: date-time
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Session is not active
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/sessions/{id}/checkpoint:
    post:
      tags:
      - Sessions
      operationId: createCheckpoint
      summary: Create checkpoint
      description: Create a content checkpoint in the session's hash chain. The checkpoint hash is computed as SHA-256(prev_hash || content_hash || timestamp).
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      parameters:
      - $ref: '#/components/parameters/SessionId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - content_hash
              properties:
                content_hash:
                  type: string
                  pattern: ^[0-9a-fA-F]{64}$
                  description: SHA-256 hash of the document content
      responses:
        '201':
          description: Checkpoint created
          content:
            application/json:
              schema:
                type: object
                properties:
                  checkpoint_id:
                    type: string
                    format: uuid
                  sequence:
                    type: integer
                  checkpoint_hash:
                    type: string
                  prev_checkpoint_hash:
                    type:
                    - string
                    - 'null'
                  created_at:
                    type: string
                    format: date-time
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Session is not active
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/sessions/{id}/stop:
    post:
      tags:
      - Sessions
      operationId: stopSession
      summary: Stop session
      description: Stop an active session, compute the evidence score, and return the final verdict.
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      parameters:
      - $ref: '#/components/parameters/SessionId'
      responses:
        '200':
          description: Session stopped
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StopSessionResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Session is already stopped
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/sessions/{id}/finalize:
    post:
      tags:
      - Sessions
      operationId: finalizeSession
      summary: Finalize session (alias for stop)
      description: Alias for POST /v1/sessions/{id}/stop, used by marketplace integrations.
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      parameters:
      - $ref: '#/components/parameters/SessionId'
      responses:
        '200':
          description: Session finalized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StopSessionResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Session is already stopped
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/sessions/{id}/verify:
    get:
      tags:
      - Sessions
      operationId: verifySession
      summary: Verify session evidence
      description: Verify the checkpoint chain integrity and compute the evidence verdict for a session.
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      parameters:
      - $ref: '#/components/parameters/SessionId'
      responses:
        '200':
          description: Verification result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SessionVerifyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/sessions/{id}/evidence:
    get:
      tags:
      - Sessions
      operationId: getSessionEvidence
      summary: Get evidence summary
      description: Return the session metadata, metrics, and full checkpoint chain.
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      parameters:
      - $ref: '#/components/parameters/SessionId'
      responses:
        '200':
          description: Evidence summary
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EvidenceSummaryResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/sessions/{id}/forensics:
    get:
      tags:
      - Sessions
      operationId: getSessionForensics
      summary: Get forensic analysis
      description: Compute behavioral forensic metrics for a completed session, including velocity consistency, cadence naturalness, and forgery cost estimate.
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      parameters:
      - $ref: '#/components/parameters/SessionId'
      responses:
        '200':
          description: Forensic analysis
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForensicsResponse'
        '400':
          description: Session must be completed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/sessions/{id}/timeline:
    get:
      tags:
      - Sessions
      operationId: getSessionTimeline
      summary: Get session timeline
      description: Return a paginated, chronologically sorted interleaving of events and checkpoints.
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      parameters:
      - $ref: '#/components/parameters/SessionId'
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 500
          default: 100
      - name: offset
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          default: 0
      responses:
        '200':
          description: Timeline
          content:
            application/json:
              schema:
                type: object
                properties:
                  events:
                    type: array
                    items:
                      $ref: '#/components/schemas/TimelineEntry'
                  total:
                    type: integer
                  hasMore:
                    type: boolean
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/sessions/{id}/compliance:
    get:
      tags:
      - Sessions
      operationId: getSessionCompliance
      summary: Get compliance report
      description: Generate a compliance report for a completed session against NIST AI RMF, ISO 42001, IPTC, and WGA/SAG-AFTRA/MBA frameworks.
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      parameters:
      - $ref: '#/components/parameters/SessionId'
      responses:
        '200':
          description: Compliance report
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ComplianceResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Session must be completed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
      required:
      - error
    SessionVerifyResponse:
      type: object
      properties:
        sessionId:
          type: string
          format: uuid
        verdict:
          type: string
        legacyVerdict:
          type: string
        score:
          type: number
        details:
          type: object
          properties:
            status:
              type: string
            platform:
              type: string
            document_id:
              type: string
            event_count:
              type: integer
            checkpoint_count:
              type: integer
            duration_seconds:
              type: integer
            events_per_minute:
              type: number
            chain_valid:
              type: boolean
            chain_break_at:
              type:
              - integer
              - 'null'
            started_at:
              type: string
              format: date-time
            completed_at:
              type:
              - string
              - 'null'
              format: date-time
    CreateSessionRequest:
      type: object
      required:
      - platform
      - document_id
      - document_hash
      properties:
        platform:
          type: string
          enum:
          - macos
          - windows
          - linux
          - web
          - hubspot
          - google
          - atlassian
          - salesforce
          - servicenow
          - microsoft
          - canvas
          - blackboard
        document_id:
          type: string
          minLength: 1
          maxLength: 256
        document_name:
          type: string
          maxLength: 512
        document_hash:
          type: string
          pattern: ^[0-9a-fA-F]{64}$
        external_context:
          type: string
          pattern: ^[A-Za-z0-9._:|~-]{1,256}$
          description: Opaque platform id of the course/context this session was launched in. Required for canvas and blackboard, where one API key serves every launch. Later reads must present it as X-WP-External-Context.
        external_subject:
          type: string
          pattern: ^[A-Za-z0-9._:|~-]{1,256}$
          description: Opaque platform id of the launching user. Requires external_context. Later reads must present it as X-WP-External-Subject, unless X-WP-External-Role is instructor.
    StopSessionResponse:
      type: object
      properties:
        session_id:
          type: string
          format: uuid
        status:
          type: string
          example: completed
        started_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
        duration_seconds:
          type: integer
        event_count:
          type: integer
        checkpoint_count:
          type: integer
        evidence_score:
          type: number
        basic_score:
          type: number
        verdict:
          type: string
        confidence:
          type: number
    ForensicsResponse:
      type: object
      properties:
        sessionId:
          type: string
          format: uuid
        processScore:
          type: integer
        enhancedScore:
          type: number
        verdict:
          type: string
        confidence:
          type: number
        securityLevel:
          type: string
          enum:
          - standard
          - enhanced
          - maximum
        metrics:
          type: object
          properties:
            velocityConsistency:
              type: number
            cadenceNaturalness:
              type: number
            idlePatternScore:
              type: number
            revisionDepth:
              type: number
            crossModalConsistency:
              type: number
            biologicalPlausibility:
              type: number
        summary:
          type: object
          properties:
            eventCount:
              type: integer
            checkpointCount:
              type: integer
            durationSeconds:
              type: integer
            eventsPerMinute:
              type: number
        forgeryCostEstimate:
          type: number
          description: Estimated cost in USD to forge this session
    SubmitEventsRequest:
      type: object
      required:
      - events
      properties:
        events:
          type: array
          minItems: 1
          maxItems: 100
          items:
            type: object
            required:
            - event_type
            - timestamp
            properties:
              event_type:
                type: string
                enum:
                - keystroke
                - mouse_move
                - mouse_click
                - focus_change
                - paste
                - undo
                - redo
                - scroll
                - selection
                - title_modified
                - body_modified
                - blog_post_modified
                - landing_page_modified
                - email_template_modified
                - content_created
                - content_published
                - other
              timestamp:
                type: string
                format: date-time
              data:
                type: object
                additionalProperties: true
    TimelineEntry:
      type: object
      properties:
        type:
          type: string
          enum:
          - event
          - checkpoint
        timestamp:
          type: string
          format: date-time
        event_type:
          type: string
        data:
          type: object
          additionalProperties: true
        sequence:
          type: integer
        hash:
          type: string
    SessionSummary:
      type: object
      properties:
        sessionId:
          type: string
          format: uuid
        status:
          type: string
          enum:
          - active
          - completed
        eventCount:
          type: integer
        score:
          type:
          - number
          - 'null'
        verdict:
          type:
          - string
          - 'null'
        createdAt:
          type: string
          format: date-time
        documentId:
          type: string
        documentName:
          type:
          - string
          - 'null'
        platform:
          type: string
    Session:
      type: object
      properties:
        id:
          type: string
          format: uuid
        user_id:
          type: string
        platform:
          type: string
        document_id:
          type: string
        document_name:
          type:
          - string
          - 'null'
        document_hash:
          type: string
        status:
          type: string
          enum:
          - active
          - completed
        event_count:
          type: integer
        checkpoint_count:
          type: integer
        last_event_at:
          type:
          - string
          - 'null'
          format: date-time
        started_at:
          type: string
          format: date-time
        completed_at:
          type:
          - string
          - 'null'
          format: date-time
        evidence_score:
          type:
          - number
          - 'null'
    ComplianceResponse:
      type: object
      properties:
        nistRmf:
          type: object
          properties:
            govern:
              type: integer
            map:
              type: integer
            measure:
              type: integer
            manage:
              type: integer
            overall:
              type: integer
        iso42001:
          type: object
          properties:
            processDoc:
              type: boolean
            riskAssessment:
              type: boolean
            humanOversight:
              type: boolean
            transparency:
              type: boolean
            overall:
              type: integer
        aiDisclosure:
          type: object
          properties:
            level:
              type: string
              enum:
              - none
              - assisted
              - ai_generated
            iptcSourceType:
              type: string
        iptcSourceType:
          type: string
        wgaMbaCompliant:
          type: boolean
        overallScore:
          type: integer
    EvidenceSummaryResponse:
      type: object
      properties:
        session:
          type: object
          properties:
            id:
              type: string
              format: uuid
            platform:
              type: string
            document_id:
              type: string
            document_name:
              type:
              - string
              - 'null'
            document_hash:
              type: string
            status:
              type: string
            started_at:
              type: string
              format: date-time
            completed_at:
              type:
              - string
              - 'null'
              format: date-time
            evidence_score:
              type:
              - number
              - 'null'
        metrics:
          type: object
          properties:
            event_count:
              type: integer
            checkpoint_count:
              type: integer
            duration_seconds:
              type: integer
            events_per_minute:
              type: number
        checkpoints:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
              sequence:
                type: integer
              content_hash:
                type: string
              checkpoint_hash:
                type: string
              prev_checkpoint_hash:
                type:
                - string
                - 'null'
              created_at:
                type: string
                format: date-time
  parameters:
    SessionId:
      name: id
      in: path
      required: true
      schema:
        type: string
        format: uuid
      description: Session ID
  responses:
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ValidationError:
      description: Request validation failed
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
                example: Validation failed
              details:
                type: array
                items:
                  type: string
    Unauthorized:
      description: Authentication required
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Supabase JWT token
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: API key with wp_sk_ prefix