Deliverd Reviews API

The Reviews API from Deliverd — 3 operation(s) for reviews.

Operations 4

POST /api/v1/reviews Ask people to read something and say whether it is right #
GET /api/v1/reviews List reviews #
GET /api/v1/reviews/{id} The review, with every verdict returned so far #
POST /api/v1/reviews/{id}/cancel Withdraw a pending review #

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/deliverd-dev:deliverd-dev-reviews-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

deliverd-dev-reviews-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Deliverd Dev Reviews API
  version: 1.0.0
  x-refined-note:
  - x-source differs across the merged source definitions and was not carried
  description: 'Operations tagged Reviews across 2 of this provider''s published API definitions: deliverd-dev-openapi.json, deliverd-dev-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://deliverd.dev
  description: 'Deliverd REST API (paths carry the /api/v1 prefix; https://deliverd.dev/llms.txt: "REST API: https://deliverd.dev/api/v1")'
tags:
- name: Reviews
paths:
  /api/v1/reviews:
    post:
      summary: Ask people to read something and say whether it is right
      description: 'Creates a review and returns its page. The verdict is a person''s: read it by polling GET /api/v1/reviews/{id}, by the organisation''s webhooks (review.approved, review.changes_requested), or by the MCP tool get_review. There is no endpoint that records a verdict — a key is not a person. Reviewers are named by email or id and must be active members or guests who can already open the report; anyone else is refused. The requester cannot review their own request.'
      security:
      - bearerAuth: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  minLength: 1
                  maxLength: 200
                  description: What is being reviewed, as a headline the reviewer sees first
                instructions:
                  type: string
                  maxLength: 4000
                  description: What to check. Without this a reviewer decides what 'review' means, and usually decides it means 'looks fine'
                reportId:
                  type: string
                  format: uuid
                  description: The published report under review; the reviewer reads it and comments on it
                versionId:
                  type: string
                  format: uuid
                  description: Pin a version, so publishing again mid-review does not move the ground under it
                reviewers:
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 320
                  minItems: 1
                  maxItems: 20
                  description: Emails or user ids. An active member, or a guest who can already open the report where the organisation lets guests review — anyone else is refused rather than emailed
                requiredApprovals:
                  type: integer
                  minimum: 1
                  maximum: 20
                  description: How many approvals settle it; one when omitted. A single 'changes requested' settles it regardless
                expiresAt:
                  type: string
                  format: date-time
                  description: After this the review expires unanswered
                externalId:
                  type: string
                  maxLength: 200
                  description: Your own reference, returned unchanged
                flowId:
                  type: string
                  format: uuid
                  description: The flow this belongs to — shown as a Project in the app — when it is one step of a larger piece of work. Must be an open flow in your organisation
                agent:
                  type: object
                  properties:
                    name:
                      type: string
                      minLength: 1
                      maxLength: 200
                      description: What the agent is called, as people know it — "Claims triage"
                    provider:
                      type: string
                      minLength: 1
                      maxLength: 100
                      description: 'Who makes or runs it: anthropic, openai, cursor, your own company'
                    externalId:
                      type: string
                      minLength: 1
                      maxLength: 200
                      description: Your own id for this agent, returned unchanged
                  description: Which agent is asking, in your words. Recorded and shown as declared by you; nothing is decided on it
                model:
                  type: string
                  minLength: 1
                  maxLength: 200
                  description: The model the agent is running on, such as claude-opus-5. Recorded and shown as declared by you
                metadata:
                  type: object
                  additionalProperties: {}
                callbackUrl:
                  type: string
                  maxLength: 2000
                  format: uri
                  description: Where to POST the outcome when a person answers, signed with the callbackSecret returned by this call. Saves polling.
              required:
              - title
              - reviewers
      responses:
        '201':
          description: The review, pending
          content:
            application/json:
              schema:
                type: object
                properties:
                  callbackSecret:
                    type: string
                  id:
                    type: string
                    format: uuid
                  status:
                    type: string
                    enum:
                    - pending
                    - approved
                    - changes_requested
                    - expired
                    - cancelled
                  url:
                    type: string
                  title:
                    type: string
                  instructions:
                    type:
                    - string
                    - 'null'
                  reportId:
                    type:
                    - string
                    - 'null'
                    format: uuid
                  versionId:
                    type:
                    - string
                    - 'null'
                    format: uuid
                  externalId:
                    type:
                    - string
                    - 'null'
                  metadata:
                    type: object
                    additionalProperties: {}
                  requestedBy:
                    type: string
                  requiredApprovals:
                    type: number
                  reviewers:
                    type: array
                    items:
                      type: object
                      properties:
                        kind:
                          type: string
                          enum:
                          - user
                          - guest
                        id:
                          type: string
                          format: uuid
                        label:
                          type: string
                      required:
                      - kind
                      - id
                      - label
                  verdicts:
                    type: array
                    items:
                      type: object
                      properties:
                        verdict:
                          type: string
                          enum:
                          - approved
                          - changes_requested
                        by:
                          type: string
                        note:
                          type:
                          - string
                          - 'null'
                        at:
                          type: string
                      required:
                      - verdict
                      - by
                      - note
                      - at
                  threadCount:
                    type: number
                  settledAt:
                    type:
                    - string
                    - 'null'
                  expiresAt:
                    type:
                    - string
                    - 'null'
                  agent:
                    type:
                    - object
                    - 'null'
                    properties:
                      name:
                        type:
                        - string
                        - 'null'
                      provider:
                        type:
                        - string
                        - 'null'
                      externalId:
                        type:
                        - string
                        - 'null'
                    required:
                    - name
                    - provider
                    - externalId
                  model:
                    type:
                    - string
                    - 'null'
                  createdAt:
                    type: string
                required:
                - id
                - status
                - url
                - title
                - instructions
                - reportId
                - versionId
                - externalId
                - metadata
                - requestedBy
                - requiredApprovals
                - reviewers
                - verdicts
                - threadCount
                - settledAt
                - expiresAt
                - agent
                - model
                - createdAt
        '400':
          description: A reviewer is not someone the organisation knows, or the requester named only themselves
      tags:
      - Reviews
      operationId: postApiV1Reviews
      x-operation-id-source: derived
    get:
      summary: List reviews
      security:
      - bearerAuth: []
      parameters:
      - schema:
          type: integer
        required: false
        name: limit
        in: query
      - schema:
          type: string
          description: nextCursor from a previous response. One we did not issue is refused.
        required: false
        description: nextCursor from a previous response. One we did not issue is refused.
        name: cursor
        in: query
      - schema:
          type: string
          enum:
          - pending
          - approved
          - changes_requested
          - expired
          - cancelled
        required: false
        name: status
        in: query
      - schema:
          type: string
        required: false
        name: externalId
        in: query
      - schema:
          type: string
          format: uuid
        required: false
        name: reportId
        in: query
      responses:
        '200':
          description: Newest first
          content:
            application/json:
              schema:
                type: object
                properties:
                  reviews:
                    type: array
                    items:
                      type: object
                      properties:
                        callbackSecret:
                          type: string
                        id:
                          type: string
                          format: uuid
                        status:
                          type: string
                          enum:
                          - pending
                          - approved
                          - changes_requested
                          - expired
                          - cancelled
                        url:
                          type: string
                        title:
                          type: string
                        instructions:
                          type:
                          - string
                          - 'null'
                        reportId:
                          type:
                          - string
                          - 'null'
                          format: uuid
                        versionId:
                          type:
                          - string
                          - 'null'
                          format: uuid
                        externalId:
                          type:
                          - string
                          - 'null'
                        metadata:
                          type: object
                          additionalProperties: {}
                        requestedBy:
                          type: string
                        requiredApprovals:
                          type: number
                        reviewers:
                          type: array
                          items:
                            type: object
                            properties:
                              kind:
                                type: string
                                enum:
                                - user
                                - guest
                              id:
                                type: string
                                format: uuid
                              label:
                                type: string
                            required:
                            - kind
                            - id
                            - label
                        verdicts:
                          type: array
                          items:
                            type: object
                            properties:
                              verdict:
                                type: string
                                enum:
                                - approved
                                - changes_requested
                              by:
                                type: string
                              note:
                                type:
                                - string
                                - 'null'
                              at:
                                type: string
                            required:
                            - verdict
                            - by
                            - note
                            - at
                        threadCount:
                          type: number
                        settledAt:
                          type:
                          - string
                          - 'null'
                        expiresAt:
                          type:
                          - string
                          - 'null'
                        agent:
                          type:
                          - object
                          - 'null'
                          properties:
                            name:
                              type:
                              - string
                              - 'null'
                            provider:
                              type:
                              - string
                              - 'null'
                            externalId:
                              type:
                              - string
                              - 'null'
                          required:
                          - name
                          - provider
                          - externalId
                        model:
                          type:
                          - string
                          - 'null'
                        createdAt:
                          type: string
                      required:
                      - id
                      - status
                      - url
                      - title
                      - instructions
                      - reportId
                      - versionId
                      - externalId
                      - metadata
                      - requestedBy
                      - requiredApprovals
                      - reviewers
                      - verdicts
                      - threadCount
                      - settledAt
                      - expiresAt
                      - agent
                      - model
                      - createdAt
                  nextCursor:
                    type:
                    - string
                    - 'null'
                    description: Pass back as ?cursor= for the next page. Null means this is the end.
                required:
                - reviews
                - nextCursor
      tags:
      - Reviews
      operationId: getApiV1Reviews
      x-operation-id-source: derived
  /api/v1/reviews/{id}:
    get:
      summary: The review, with every verdict returned so far
      security:
      - bearerAuth: []
      parameters:
      - schema:
          type: string
          format: uuid
        required: true
        name: id
        in: path
      responses:
        '200':
          description: The review
          content:
            application/json:
              schema:
                type: object
                properties:
                  callbackSecret:
                    type: string
                  id:
                    type: string
                    format: uuid
                  status:
                    type: string
                    enum:
                    - pending
                    - approved
                    - changes_requested
                    - expired
                    - cancelled
                  url:
                    type: string
                  title:
                    type: string
                  instructions:
                    type:
                    - string
                    - 'null'
                  reportId:
                    type:
                    - string
                    - 'null'
                    format: uuid
                  versionId:
                    type:
                    - string
                    - 'null'
                    format: uuid
                  externalId:
                    type:
                    - string
                    - 'null'
                  metadata:
                    type: object
                    additionalProperties: {}
                  requestedBy:
                    type: string
                  requiredApprovals:
                    type: number
                  reviewers:
                    type: array
                    items:
                      type: object
                      properties:
                        kind:
                          type: string
                          enum:
                          - user
                          - guest
                        id:
                          type: string
                          format: uuid
                        label:
                          type: string
                      required:
                      - kind
                      - id
                      - label
                  verdicts:
                    type: array
                    items:
                      type: object
                      properties:
                        verdict:
                          type: string
                          enum:
                          - approved
                          - changes_requested
                        by:
                          type: string
                        note:
                          type:
                          - string
                          - 'null'
                        at:
                          type: string
                      required:
                      - verdict
                      - by
                      - note
                      - at
                  threadCount:
                    type: number
                  settledAt:
                    type:
                    - string
                    - 'null'
                  expiresAt:
                    type:
                    - string
                    - 'null'
                  agent:
                    type:
                    - object
                    - 'null'
                    properties:
                      name:
                        type:
                        - string
                        - 'null'
                      provider:
                        type:
                        - string
                        - 'null'
                      externalId:
                        type:
                        - string
                        - 'null'
                    required:
                    - name
                    - provider
                    - externalId
                  model:
                    type:
                    - string
                    - 'null'
                  createdAt:
                    type: string
                required:
                - id
                - status
                - url
                - title
                - instructions
                - reportId
                - versionId
                - externalId
                - metadata
                - requestedBy
                - requiredApprovals
                - reviewers
                - verdicts
                - threadCount
                - settledAt
                - expiresAt
                - agent
                - model
                - createdAt
        '404':
          description: Not found
      tags:
      - Reviews
      operationId: getApiV1ReviewsById
      x-operation-id-source: derived
  /api/v1/reviews/{id}/cancel:
    post:
      summary: Withdraw a pending review
      security:
      - bearerAuth: []
      parameters:
      - schema:
          type: string
          format: uuid
        required: true
        name: id
        in: path
      responses:
        '200':
          description: The review, cancelled
          content:
            application/json:
              schema:
                type: object
                properties:
                  callbackSecret:
                    type: string
                  id:
                    type: string
                    format: uuid
                  status:
                    type: string
                    enum:
                    - pending
                    - approved
                    - changes_requested
                    - expired
                    - cancelled
                  url:
                    type: string
                  title:
                    type: string
                  instructions:
                    type:
                    - string
                    - 'null'
                  reportId:
                    type:
                    - string
                    - 'null'
                    format: uuid
                  versionId:
                    type:
                    - string
                    - 'null'
                    format: uuid
                  externalId:
                    type:
                    - string
                    - 'null'
                  metadata:
                    type: object
                    additionalProperties: {}
                  requestedBy:
                    type: string
                  requiredApprovals:
                    type: number
                  reviewers:
                    type: array
                    items:
                      type: object
                      properties:
                        kind:
                          type: string
                          enum:
                          - user
                          - guest
                        id:
                          type: string
                          format: uuid
                        label:
                          type: string
                      required:
                      - kind
                      - id
                      - label
                  verdicts:
                    type: array
                    items:
                      type: object
                      properties:
                        verdict:
                          type: string
                          enum:
                          - approved
                          - changes_requested
                        by:
                          type: string
                        note:
                          type:
                          - string
                          - 'null'
                        at:
                          type: string
                      required:
                      - verdict
                      - by
                      - note
                      - at
                  threadCount:
                    type: number
                  settledAt:
                    type:
                    - string
                    - 'null'
                  expiresAt:
                    type:
                    - string
                    - 'null'
                  agent:
                    type:
                    - object
                    - 'null'
                    properties:
                      name:
                        type:
                        - string
                        - 'null'
                      provider:
                        type:
                        - string
                        - 'null'
                      externalId:
                        type:
                        - string
                        - 'null'
                    required:
                    - name
                    - provider
                    - externalId
                  model:
                    type:
                    - string
                    - 'null'
                  createdAt:
                    type: string
                required:
                - id
                - status
                - url
                - title
                - instructions
                - reportId
                - versionId
                - externalId
                - metadata
                - requestedBy
                - requiredApprovals
                - reviewers
                - verdicts
                - threadCount
                - settledAt
                - expiresAt
                - agent
                - model
                - createdAt
        '403':
          description: Not the requester
        '409':
          description: Already settled
      tags:
      - Reviews
      operationId: postApiV1ReviewsByIdCancel
      x-operation-id-source: derived
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'API key (dlv_…) created in Settings → API tokens, or an OAuth access token (dlvo_…). Every route below can answer `401 auth_error` — the credential was not accepted — or `403 insufficient_scope`, which is a different thing: the credential is fine and was not issued with the scope this route needs. Reissue it with that scope rather than replacing it with another of the same ones. Older clients may still branch on `auth_error` for both.'
x-refined-from:
- deliverd-dev-openapi.json
- deliverd-dev-openapi.yml