Ablo Logs API

The logs API from Ablo — 2 operation(s) for logs.

Operations 2

GET /v1/logs Tail what changed #
GET /v1/logs/delivery How much of what was recorded could reach anyone #

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/ablo-logs-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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

abloatai-logs-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Ablo Logs API
  version: 0.55.0
  description: 'Ablo collaboration infrastructure: commit, read, and claim. `{model}` is any model from your pushed schema — the routes are the same whichever it is. Authenticate every request with your API key as a Bearer token.'
  license:
    name: Apache License 2.0
    identifier: Apache-2.0
servers:
- url: https://api.abloatai.com/api
  description: Production
- url: http://localhost:8787/api
  description: Local development
security:
- bearerAuth: []
tags:
- name: logs
paths:
  /v1/logs:
    get:
      tags:
      - logs
      summary: Tail what changed
      description: How a caller without a socket learns what its peers did. Omit `after` for the most recent entries, then copy each page's `next_cursor` back as `after` to walk forward. Scope is taken from your key — organization, branch and sync groups — so a caller cannot widen what it sees by asking.
      parameters:
      - name: after
        in: query
        schema:
          type: string
      - name: limit
        in: query
        schema:
          type: integer
          minimum: 1
      - name: model
        in: query
        schema:
          type: string
      - name: op
        in: query
        schema:
          type: string
          enum:
          - create
          - update
          - delete
          - archive
          - revive
          - visible
          - group_added
          - group_removed
      - name: since
        in: query
        schema:
          type: string
      responses:
        '200':
          description: A page of the feed, oldest first. Entries are discriminated on `object`, so a reader that meets an entry kind it does not know can skip it and keep paging.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LogPage'
        '400':
          description: The request did not satisfy the published contract.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          description: The Bearer credential is missing, malformed, or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '403':
          description: The credential does not authorize this operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: The addressed resource does not exist in the credential scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '409':
          description: The request conflicts with current claim, version, or idempotency state.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: The caller exceeded an enforced rate limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '500':
          description: The server could not complete the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '503':
          description: A required service is temporarily unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        default:
          description: An HTTP error not otherwise listed; decoded through the canonical envelope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
      operationId: listLogEntries
  /v1/logs/delivery:
    get:
      tags:
      - logs
      summary: How much of what was recorded could reach anyone
      description: The fan-out verdict for your plane over a recent window. `recorded` counts the changes the log accepted; `unroutable` counts the ones excluded from delivery because they carried no sync group, which is the state a row reaches when it was written into your database outside Ablo and so carries no tenancy value. Any number above zero means writes are landing that no subscriber is told about.
      responses:
        '200':
          description: The counts, plus the most recent undeliverable change when there is one.
          content:
            application/json:
              schema:
                type: object
                properties:
                  object:
                    type: string
                    const: log_delivery
                  window_seconds:
                    type: number
                  recorded:
                    type: number
                  unroutable:
                    type: number
                  sample:
                    anyOf:
                    - type: object
                      properties:
                        model:
                          type: string
                        id:
                          type: string
                        at:
                          type: string
                      required:
                      - model
                      - id
                      - at
                      additionalProperties: false
                    - type: 'null'
                required:
                - window_seconds
                - recorded
                - unroutable
                additionalProperties: false
        '400':
          description: The request did not satisfy the published contract.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          description: The Bearer credential is missing, malformed, or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '403':
          description: The credential does not authorize this operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '404':
          description: The addressed resource does not exist in the credential scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '409':
          description: The request conflicts with current claim, version, or idempotency state.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: The caller exceeded an enforced rate limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '500':
          description: The server could not complete the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '503':
          description: A required service is temporarily unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        default:
          description: An HTTP error not otherwise listed; decoded through the canonical envelope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
      operationId: getLogDelivery
components:
  schemas:
    Cursor:
      type: string
      description: An opaque pagination position. Copy it unchanged into the next request.
    ErrorEnvelope:
      type: object
      properties:
        type:
          type: string
        code:
          type: string
        param:
          type: string
        message:
          type: string
        doc_url:
          type: string
        request_id:
          type: string
        event_id:
          type: string
        errors:
          readOnly: true
          type: array
          items:
            readOnly: true
            type: object
            properties:
              code:
                type: string
              message:
                type: string
              param:
                type: string
            required:
            - message
            additionalProperties: false
      required:
      - type
      - message
      additionalProperties: true
    LogPage:
      type: object
      properties:
        object:
          type: string
          const: list
        data:
          readOnly: true
          type: array
          items:
            oneOf:
            - type: object
              properties:
                object:
                  type: string
                  const: log_event
                id:
                  type: number
                at:
                  type: string
                model:
                  type: string
                op:
                  type: string
                  enum:
                  - create
                  - update
                  - delete
                  - archive
                  - revive
                  - visible
                  - group_added
                  - group_removed
                recordId:
                  type: string
                actor:
                  anyOf:
                  - type: string
                  - type: 'null'
                delta:
                  type: object
                  properties:
                    id:
                      type: number
                    actionType:
                      type: string
                      enum:
                      - I
                      - U
                      - D
                      - A
                      - V
                      - C
                      - G
                      - S
                    modelName:
                      type: string
                      minLength: 1
                    modelId:
                      type: string
                      minLength: 1
                    data:
                      anyOf:
                      - anyOf:
                        - type: object
                          additionalProperties: true
                        - type: string
                      - type: 'null'
                    previousData:
                      anyOf:
                      - anyOf:
                        - type: object
                          additionalProperties: true
                        - type: string
                      - type: 'null'
                    createdAt:
                      type: string
                    actor:
                      anyOf:
                      - type: object
                        properties:
                          kind:
                            type: string
                            enum:
                            - user
                            - agent
                            - system
                          id:
                            type: string
                        required:
                        - kind
                        - id
                        additionalProperties: false
                      - type: 'null'
                    onBehalfOf:
                      anyOf:
                      - type: object
                        properties:
                          kind:
                            type: string
                            enum:
                            - user
                            - agent
                            - system
                          id:
                            type: string
                        required:
                        - kind
                        - id
                        additionalProperties: false
                      - type: 'null'
                    capabilityId:
                      anyOf:
                      - type: string
                      - type: 'null'
                    confirmationState:
                      anyOf:
                      - type: string
                        enum:
                        - auto
                        - previewed
                        - approved
                        - required_human_approval
                        - auto_historical
                      - type: 'null'
                  required:
                  - id
                  - actionType
                  - modelName
                  - modelId
                  - data
                  - createdAt
                  additionalProperties: false
              required:
              - object
              - id
              - at
              - model
              - op
              - recordId
              - actor
              additionalProperties: false
            - readOnly: true
              type: object
              properties:
                actor:
                  type: string
                participantKind:
                  type: string
                  enum:
                  - user
                  - agent
                  - system
                onBehalfOfId:
                  anyOf:
                  - type: string
                  - type: 'null'
                onBehalfOfKind:
                  anyOf:
                  - type: string
                    enum:
                    - user
                    - agent
                    - system
                  - type: 'null'
                capabilityId:
                  anyOf:
                  - type: string
                  - type: 'null'
                description:
                  type: string
                status:
                  type: string
                  enum:
                  - active
                  - queued
                  - committed
                  - expired
                  - canceled
                position:
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
                expiresAt:
                  type: integer
                  minimum: -9007199254740991
                  maximum: 9007199254740991
                fenceToken:
                  type: integer
                  minimum: -9007199254740991
                  maximum: 9007199254740991
                target:
                  readOnly: true
                  type: object
                  properties:
                    model:
                      type: string
                    id:
                      type: string
                    field:
                      type: string
                    fields:
                      readOnly: true
                      type: array
                      items:
                        type: string
                    meta:
                      type: object
                      additionalProperties: true
                  required:
                  - model
                  - id
                  additionalProperties: false
                object:
                  type: string
                  const: claim_event
                seq:
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
                at:
                  type: string
                claimId:
                  type: string
              required:
              - actor
              - participantKind
              - onBehalfOfId
              - onBehalfOfKind
              - capabilityId
              - description
              - status
              - expiresAt
              - target
              - object
              - seq
              - at
              - claimId
              additionalProperties: false
        has_more:
          type: boolean
        next_cursor:
          oneOf:
          - $ref: '#/components/schemas/Cursor'
          - type: 'null'
      required:
      - object
      - data
      - has_more
      - next_cursor
      additionalProperties: false
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Your Ablo API key (sk_… / rk_…).