{
  "openapi": "3.1.0",
  "info": {
    "title": "Scriben API",
    "version": "2026-08-01",
    "summary": "Read your meetings, action items and memory.",
    "description": "The Scriben API gives programmatic access to what Scriben recorded and understood: notes, summaries, action items, transcript passages and durable memory.\n\nEvery endpoint is read-only. Every response is scoped to the account that owns the API key — no endpoint accepts an account identifier as an argument.",
    "license": {
      "name": "Proprietary",
      "url": "https://scriben.ai/terms"
    },
    "contact": {
      "name": "Scriben",
      "url": "https://docs.scriben.ai"
    }
  },
  "servers": [
    {
      "url": "https://public-api.scriben.ai",
      "description": "Production"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "Send your key as `Authorization: Bearer scb_live_…`. Keys are never accepted in a query parameter: URLs end up in access logs, browser history and referrer headers."
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "unauthorized",
                  "forbidden",
                  "not_found",
                  "invalid_request",
                  "method_not_allowed",
                  "internal"
                ],
                "description": "Stable, machine-readable. Branch on this, not on the message."
              },
              "message": {
                "type": "string",
                "description": "Human-readable. May be reworded at any time."
              },
              "request_id": {
                "type": "string",
                "description": "Quote this in a support request."
              }
            },
            "required": [
              "code",
              "message",
              "request_id"
            ]
          }
        },
        "required": [
          "error"
        ]
      },
      "NoteSummary": {
        "type": "object",
        "properties": {
          "ref": {
            "type": "string",
            "description": "Opaque per-user note reference, e.g. n_a41f9c2b0e17.",
            "examples": [
              "n_a41f9c2b0e17"
            ]
          },
          "title": {
            "type": "string"
          },
          "date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "participants": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "ref",
          "title",
          "date",
          "participants"
        ]
      },
      "Note": {
        "type": "object",
        "properties": {
          "ref": {
            "type": "string",
            "description": "Opaque per-user note reference, e.g. n_a41f9c2b0e17.",
            "examples": [
              "n_a41f9c2b0e17"
            ]
          },
          "title": {
            "type": "string"
          },
          "date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "summary": {
            "type": [
              "string",
              "object"
            ],
            "description": "The text, or { withheld: true, reason } when flagged as a possible prompt injection.",
            "properties": {
              "withheld": {
                "type": "boolean"
              },
              "reason": {
                "type": "string"
              }
            }
          },
          "action_items": {
            "type": "array",
            "items": {
              "type": [
                "string",
                "object"
              ]
            }
          },
          "mentions": {
            "type": "object",
            "description": "Contact details extracted from the text so a client can render them safely.",
            "properties": {
              "urls": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "emails": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "phones": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "flagged": {
            "type": "boolean"
          }
        },
        "required": [
          "ref",
          "title",
          "date"
        ]
      },
      "ActionItem": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string"
          },
          "note_ref": {
            "type": "string",
            "description": "Opaque per-user note reference, e.g. n_a41f9c2b0e17.",
            "examples": [
              "n_a41f9c2b0e17"
            ]
          },
          "date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "text",
          "note_ref",
          "date"
        ]
      },
      "Memory": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string"
          },
          "subject": {
            "type": "string"
          },
          "visibility": {
            "type": "string",
            "description": "The account owner's own classification."
          }
        },
        "required": [
          "text",
          "subject",
          "visibility"
        ]
      },
      "Passage": {
        "type": "object",
        "properties": {
          "note_ref": {
            "type": "string",
            "description": "Opaque per-user note reference, e.g. n_a41f9c2b0e17.",
            "examples": [
              "n_a41f9c2b0e17"
            ]
          },
          "speaker": {
            "type": "string"
          },
          "at": {
            "type": [
              "number",
              "null"
            ],
            "description": "Seconds from the start of the recording."
          },
          "text": {
            "type": [
              "string",
              "object"
            ],
            "description": "The text, or { withheld: true, reason } when flagged as a possible prompt injection.",
            "properties": {
              "withheld": {
                "type": "boolean"
              },
              "reason": {
                "type": "string"
              }
            }
          }
        },
        "required": [
          "note_ref",
          "speaker",
          "at",
          "text"
        ]
      },
      "Person": {
        "description": "A resolved person, or an ambiguous-candidates payload when a name matches more than one. Branch on `status`.",
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "resolved",
              "ambiguous"
            ]
          }
        },
        "required": [
          "status"
        ]
      }
    }
  },
  "paths": {
    "/v1/me": {
      "get": {
        "operationId": "getMe",
        "summary": "Identify the current API key",
        "description": "Confirms a key works. The first call in every integration.",
        "responses": {
          "200": {
            "description": "The key is valid.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "key_id": {
                          "type": "string"
                        },
                        "environment": {
                          "type": "string",
                          "enum": [
                            "live",
                            "test"
                          ]
                        }
                      },
                      "required": [
                        "key_id",
                        "environment"
                      ]
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "The key is missing, malformed, revoked or expired. All four are reported identically.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/notes": {
      "get": {
        "operationId": "listNotes",
        "summary": "List notes",
        "description": "Newest first. Returns titles, dates and participants — never a transcript.",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "description": "Match against note titles.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor from a previous response's `next_cursor`. Do not construct or parse one.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (1–50, default 20).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A page of notes.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/NoteSummary"
                      }
                    },
                    "has_more": {
                      "type": "boolean",
                      "description": "True when another page exists."
                    },
                    "next_cursor": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Pass as `cursor` to fetch the next page."
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date-time"
                    }
                  },
                  "required": [
                    "data",
                    "has_more",
                    "next_cursor",
                    "as_of"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The cursor could not be decoded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "The key is missing, malformed, revoked or expired. All four are reported identically.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/notes/{ref}": {
      "get": {
        "operationId": "getNote",
        "summary": "Get one note",
        "parameters": [
          {
            "name": "ref",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Opaque per-user note reference, e.g. n_a41f9c2b0e17.",
              "examples": [
                "n_a41f9c2b0e17"
              ]
            },
            "description": "A note ref from /v1/notes. Refs are per-account: one issued to another account resolves to 404."
          }
        ],
        "responses": {
          "200": {
            "description": "The note.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Note"
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "source_notes": {
                      "type": "array",
                      "description": "The notes this answer was derived from.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "ref": {
                            "type": "string",
                            "description": "Opaque per-user note reference, e.g. n_a41f9c2b0e17.",
                            "examples": [
                              "n_a41f9c2b0e17"
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "date": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        },
                        "required": [
                          "ref",
                          "title",
                          "date"
                        ]
                      }
                    }
                  },
                  "required": [
                    "data",
                    "as_of"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "The key is missing, malformed, revoked or expired. All four are reported identically.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource for this account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/notes/{ref}/transcript": {
      "get": {
        "operationId": "searchTranscript",
        "summary": "Search a transcript",
        "description": "Returns matching passages with speaker and timestamp. A whole transcript is never returned — that is a deliberate limit, not a missing feature, so `query` is required.",
        "parameters": [
          {
            "name": "ref",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Opaque per-user note reference, e.g. n_a41f9c2b0e17.",
              "examples": [
                "n_a41f9c2b0e17"
              ]
            },
            "description": "A note ref from /v1/notes. Refs are per-account: one issued to another account resolves to 404."
          },
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Words or phrase to find.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching passages.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Passage"
                      }
                    },
                    "has_more": {
                      "type": "boolean"
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "source_notes": {
                      "type": "array",
                      "description": "The notes this answer was derived from.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "ref": {
                            "type": "string",
                            "description": "Opaque per-user note reference, e.g. n_a41f9c2b0e17.",
                            "examples": [
                              "n_a41f9c2b0e17"
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "date": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        },
                        "required": [
                          "ref",
                          "title",
                          "date"
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "`query` is required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "The key is missing, malformed, revoked or expired. All four are reported identically.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/action-items": {
      "get": {
        "operationId": "listActionItems",
        "summary": "List action items",
        "description": "Action items extracted across recent notes, each with the note it came from. Scriben does not track completion, so this returns every extracted item rather than only outstanding ones.",
        "parameters": [
          {
            "name": "person",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Only items involving this person — either the text names them, or they were in the meeting."
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque cursor from a previous response's `next_cursor`. Do not construct or parse one.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Items per page (1–50, default 20).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A page of action items.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ActionItem"
                      }
                    },
                    "has_more": {
                      "type": "boolean",
                      "description": "True when another page exists."
                    },
                    "next_cursor": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Pass as `cursor` to fetch the next page."
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date-time"
                    }
                  },
                  "required": [
                    "data",
                    "has_more",
                    "next_cursor",
                    "as_of"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The cursor could not be decoded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "The key is missing, malformed, revoked or expired. All four are reported identically.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/memories": {
      "get": {
        "operationId": "listMemories",
        "summary": "Search durable memories",
        "description": "Respects the account owner's own private/team visibility settings.",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching memories.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Memory"
                      }
                    },
                    "has_more": {
                      "type": "boolean"
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "`query` is required.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "The key is missing, malformed, revoked or expired. All four are reported identically.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/people": {
      "get": {
        "operationId": "getPerson",
        "summary": "What the account knows about a person",
        "description": "If a name matches more than one person, this returns candidates with `status: \"ambiguous\"` and a 200 — rather than guessing. Two people sharing a first name is normal; blending them is not.",
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Name or email address."
          },
          {
            "name": "ref",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Exact entity ref, to resolve a previous ambiguous result."
          }
        ],
        "responses": {
          "200": {
            "description": "A resolved person, or candidates.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Person"
                    },
                    "as_of": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "source_notes": {
                      "type": "array",
                      "description": "The notes this answer was derived from.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "ref": {
                            "type": "string",
                            "description": "Opaque per-user note reference, e.g. n_a41f9c2b0e17.",
                            "examples": [
                              "n_a41f9c2b0e17"
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "date": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        },
                        "required": [
                          "ref",
                          "title",
                          "date"
                        ]
                      }
                    }
                  },
                  "required": [
                    "data",
                    "as_of"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Provide `name` or `ref`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "The key is missing, malformed, revoked or expired. All four are reported identically.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No such resource for this account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "Read",
      "description": "Every endpoint in this API is read-only."
    }
  ]
}
