Debriefing Digests API

Generated digests for this workspace.

Operations 2

GET /api/v1/digests List generated digests #
GET /api/v1/digests/{id} Get one digest #

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/debriefing-io:debriefing-io-digests-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

debriefing-io-digests-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Debriefing Read Digests API
  version: 1.0.0
  summary: Read competitors, signals, digests, and battlecards for one workspace.
  description: 'A JSON API for one organization. Create an API key in Settings → Integrations.

    The same key authenticates the MCP endpoint at `POST /mcp`.


    Every key reads. A key writes only through a scope ticked when the key is made. The one

    scope today is `watchlist:add`, which lets `POST /api/v1/competitors` add a competitor and

    nothing else. Existing keys have no scopes and stay read-only.


    Clients may name themselves in the `X-Debriefing-Source` header, a short lowercase slug

    such as `google-sheets-addon`. A competitor added through the API records it.


    Every request is scoped to the organization that owns the key. The free week that unlocks

    the dashboard does not unlock this API. A paid subscription is required.


    Blank fields are omitted from response objects. Empty summary domains are omitted from a

    competitor dossier.


    Every error is RFC 9457 problem details, sent as `application/problem+json`, with a

    machine-readable `code` and a `hint`. See the `Problem` schema and

    https://debriefing.io/developers#errors.


    This file is also served as JSON at `/openapi.json`.'
  contact:
    name: Debriefing
    url: https://debriefing.io
servers:
- url: https://debriefing.io
  description: Production
security:
- bearerAuth: []
- apiKeyHeader: []
tags:
- name: Digests
  description: Generated digests for this workspace.
paths:
  /api/v1/digests:
    get:
      tags:
      - Digests
      operationId: listDigests
      summary: List generated digests
      description: 'Returns digests with status `generated`, newest coverage period first. Default page

        size is 50. Maximum page size is 50.'
      parameters:
      - name: type
        in: query
        schema:
          type: string
        description: Limit to one debrief type, for example `daily_digest` or `weekly_tldr`.
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PerPage'
      responses:
        '200':
          description: A page of digests.
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                - page
                - per_page
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Digest'
                  page:
                    type: integer
                    minimum: 1
                  per_page:
                    type: integer
                    minimum: 1
                    maximum: 50
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
  /api/v1/digests/{id}:
    get:
      tags:
      - Digests
      operationId: getDigest
      summary: Get one digest
      description: Looks up a generated digest by slug first, then by id.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: Digest slug or numeric id.
      responses:
        '200':
          description: One digest.
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    $ref: '#/components/schemas/Digest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  responses:
    InternalError:
      description: An error occurred on the server. The body holds no internal detail.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://debriefing.io/developers#errors-internal_error
            title: Internal error
            status: 500
            detail: An error occurred on the server.
            code: internal_error
            hint: Send the request again later. If the error continues, email team@debriefing.io with the request_id.
            instance: /api/v1/signals
            request_id: 5f1c2b7e-9a41-4c1e-8d0e-2b1f3a6c7d80
            error: An error occurred on the server.
    NotFound:
      description: No matching record in this workspace.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://debriefing.io/developers#errors-not_found
            title: Not found
            status: 404
            detail: No such competitor.
            code: not_found
            hint: Check the path and the id. The list routes, such as /api/v1/competitors, give the ids that this key can read.
            instance: /api/v1/competitors/999
            request_id: 5f1c2b7e-9a41-4c1e-8d0e-2b1f3a6c7d80
            error: No such competitor.
    Unauthorized:
      description: Missing, wrong, or revoked API key.
      headers:
        WWW-Authenticate:
          schema:
            type: string
          example: Bearer realm="Debriefing API"
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://debriefing.io/developers#errors-invalid_api_key
            title: API key missing or not valid
            status: 401
            detail: A valid API key is required.
            code: invalid_api_key
            hint: 'Send a valid key as Authorization: Bearer dbk_… or as X-API-Key. A workspace admin creates keys in Organization settings, under Integrations.'
            instance: /api/v1/competitors
            request_id: 5f1c2b7e-9a41-4c1e-8d0e-2b1f3a6c7d80
            error: A valid API key is required.
    PaymentRequired:
      description: The key's organization does not have a paid subscription.
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://debriefing.io/developers#errors-paid_plan_required
            title: Paid plan required
            status: 402
            detail: Choose a paid plan to use this feature.
            code: paid_plan_required
            hint: Choose a paid plan for this workspace on /pricing. The free week does not include the API.
            instance: /api/v1/competitors
            request_id: 5f1c2b7e-9a41-4c1e-8d0e-2b1f3a6c7d80
            error: Choose a paid plan to use this feature.
    TooManyRequests:
      description: This address sent more than 600 requests in one minute.
      headers:
        Retry-After:
          description: Seconds to wait before the next request.
          schema:
            type: integer
          example: 60
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://debriefing.io/developers#errors-rate_limited
            title: Too many requests
            status: 429
            detail: This address sent more than 600 requests in one minute.
            code: rate_limited
            hint: Wait for the number of seconds in the Retry-After header. Then send the request again.
            instance: /api/v1/signals
            request_id: 5f1c2b7e-9a41-4c1e-8d0e-2b1f3a6c7d80
            error: This address sent more than 600 requests in one minute.
  schemas:
    Digest:
      type: object
      required:
      - id
      - type
      - status
      - url
      properties:
        id:
          type: integer
        slug:
          type: string
        type:
          type: string
          description: Debrief type, for example `daily_digest` or `weekly_tldr`.
        status:
          type: string
          example: generated
        title:
          type: string
        headline:
          type: string
        tldr:
          type: string
        what_to_watch:
          type: string
        coverage_period_start:
          type: string
          format: date-time
        coverage_period_end:
          type: string
          format: date-time
        generated_at:
          type: string
          format: date-time
        items:
          type: array
          items:
            type: object
            additionalProperties: true
        signal_ids:
          type: array
          items:
            type: integer
        markdown:
          type: string
        url:
          type: string
          format: uri
          description: Link to the digest page in the app.
    CompetitorSlots:
      type: object
      required:
      - limit
      - used
      - remaining
      properties:
        limit:
          type: integer
        used:
          type: integer
        remaining:
          type: integer
    Problem:
      type: object
      description: 'RFC 9457 problem details, sent as `application/problem+json`. Every 4xx and 5xx

        response of the read API has this shape. Branch on `code`, not on `detail` or `title`.

        The `type` URL points at the row for the code on /developers.

        '
      required:
      - type
      - title
      - status
      - detail
      - code
      - hint
      properties:
        type:
          type: string
          format: uri
          description: Documentation URL for this code, `https://debriefing.io/developers#errors-<code>`.
        title:
          type: string
          description: Short summary of the code. The same for every problem with this code.
        status:
          type: integer
          description: The HTTP status code.
        detail:
          type: string
          description: What went wrong with this request.
        code:
          type: string
          description: Machine-readable error code. Stable.
          enum:
          - invalid_request
          - invalid_api_key
          - paid_plan_required
          - plan_limit_reached
          - forbidden
          - insufficient_scope
          - not_found
          - unprocessable_content
          - rate_limited
          - internal_error
        hint:
          type: string
          description: What the client can do next.
        instance:
          type: string
          description: The request path.
        request_id:
          type: string
          description: The request id. Send it to support when you report an error.
        error:
          type: string
          deprecated: true
          description: The same text as `detail`. Kept for clients that read the old `{ "error" }` body.
        upgrade_url:
          type: string
          format: uri
          description: With `plan_limit_reached`. Where an admin chooses a larger plan.
        competitor_slots:
          $ref: '#/components/schemas/CompetitorSlots'
  parameters:
    Page:
      name: page
      in: query
      schema:
        type: integer
        minimum: 1
        default: 1
    PerPage:
      name: per_page
      in: query
      schema:
        type: integer
        minimum: 1
        maximum: 50
        default: 50
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: dbk_
      description: 'Send `Authorization: Bearer dbk_…`. The plain token is shown once when the key is

        created. Only a SHA-256 digest is stored.

        '
    apiKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
      description: Alternative to Bearer. Send the same `dbk_…` token.