Appwrite Advisor API

The Advisor service surfaces actionable reports about your project resources, with CTA descriptors for one-click remediation in the console. 5 operations across 4 paths in the Appwrite 2.0.0 OpenAPI.

Operations 5

GET /reports List reports #
GET /reports/{reportId} Get report #
DELETE /reports/{reportId} Delete report #
GET /reports/{reportId}/insights List insights #
GET /reports/{reportId}/insights/{insightId} Get insight #

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/appwrite-advisor-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

appwrite-advisor-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Appwrite Advisor API
  description: Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs)
  version: 2.0.0
  termsOfService: https://appwrite.io/policy/terms
  contact:
    name: Appwrite Team
    url: https://appwrite.io/support
    email: team@appwrite.io
  license:
    name: BSD-3-Clause
    url: https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE
servers:
- url: https://cloud.appwrite.io/v1
  description: Appwrite Cloud endpoint.
- url: https://{region}.cloud.appwrite.io/v1
  description: Appwrite Cloud regional endpoint. Replace `{region}` with your project region.
  variables:
    region:
      default: fra
      description: Appwrite Cloud region.
tags:
- name: advisor
  description: The Advisor service surfaces actionable reports about your project resources, with CTA descriptors for one-click remediation in the console.
paths:
  /reports:
    get:
      summary: List reports
      operationId: advisorListReports
      tags:
      - advisor
      description: 'Get a list of all the project''s analyzer reports. You can use the query params to filter your results.

        '
      responses:
        '200':
          description: Reports List
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/reportList'
      deprecated: false
      x-appwrite:
        group: reports
        demo: advisor/list-reports.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: reports.read
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: queries
        description: 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: appId, type, targetType, target, analyzedAt'
        required: false
        schema:
          type: array
          items:
            type: string
          default: []
        in: query
      - name: total
        description: When set to false, the total count returned will be 0 and will not be calculated.
        required: false
        schema:
          type: boolean
          example: false
          default: true
        in: query
  /reports/{reportId}:
    get:
      summary: Get report
      operationId: advisorGetReport
      tags:
      - advisor
      description: 'Get an analyzer report by its unique ID. The response includes the report''s metadata and the nested insights it produced.

        '
      responses:
        '200':
          description: Report
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/report'
      deprecated: false
      x-appwrite:
        group: reports
        demo: advisor/get-report.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: reports.read
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: reportId
        description: Report ID.
        required: true
        schema:
          type: string
          example: <REPORT_ID>
        in: path
    delete:
      summary: Delete report
      operationId: advisorDeleteReport
      tags:
      - advisor
      description: 'Delete an analyzer report by its unique ID. Nested insights and CTA metadata are removed asynchronously by the deletes worker.

        '
      responses:
        '204':
          description: No content
      deprecated: false
      x-appwrite:
        group: reports
        demo: advisor/delete-report.md
        rate-limit: 60
        rate-time: 60
        rate-key: projectId:{projectId},userId:{userId}
        scope: reports.write
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: reportId
        description: Report ID.
        required: true
        schema:
          type: string
          example: <REPORT_ID>
        in: path
  /reports/{reportId}/insights:
    get:
      summary: List insights
      operationId: advisorListInsights
      tags:
      - advisor
      description: 'List the insights produced under a single analyzer report. You can use the query params to filter your results further.

        '
      responses:
        '200':
          description: Insights List
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/insightList'
      deprecated: false
      x-appwrite:
        group: insights
        demo: advisor/list-insights.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: insights.read
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: reportId
        description: Parent report ID.
        required: true
        schema:
          type: string
          example: <REPORT_ID>
        in: path
      - name: queries
        description: 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: type, severity, status, resourceType, resourceId, parentResourceType, parentResourceId, analyzedAt, dismissedAt, dismissedBy'
        required: false
        schema:
          type: array
          items:
            type: string
          default: []
        in: query
      - name: total
        description: When set to false, the total count returned will be 0 and will not be calculated.
        required: false
        schema:
          type: boolean
          example: false
          default: true
        in: query
  /reports/{reportId}/insights/{insightId}:
    get:
      summary: Get insight
      operationId: advisorGetInsight
      tags:
      - advisor
      description: 'Get an insight by its unique ID, scoped to its parent report.

        '
      responses:
        '200':
          description: Insight
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/insight'
      deprecated: false
      x-appwrite:
        group: insights
        demo: advisor/get-insight.md
        rate-limit: 0
        rate-time: 3600
        rate-key: url:{url},ip:{ip}
        scope: insights.read
        platforms:
        - console
        - server
        packaging: false
        public: true
        auth:
          console:
            Project: []
          server:
            Project: []
            Key: []
      security:
      - Project: []
        Key: []
      parameters:
      - name: reportId
        description: Parent report ID.
        required: true
        schema:
          type: string
          example: <REPORT_ID>
        in: path
      - name: insightId
        description: Insight ID.
        required: true
        schema:
          type: string
          example: <INSIGHT_ID>
        in: path
components:
  schemas:
    insight:
      description: Insight
      type: object
      properties:
        $id:
          type: string
          description: Insight ID.
          example: 5e5ea5c16897e
        $createdAt:
          type: string
          description: Insight creation date in ISO 8601 format.
          example: '2020-10-15T06:38:00.000+00:00'
        $updatedAt:
          type: string
          description: Insight update date in ISO 8601 format.
          example: '2020-10-15T06:38:00.000+00:00'
        reportId:
          type: string
          description: Parent report ID. Insights always belong to a report.
          example: 5e5ea5c16897e
        type:
          type: string
          description: Insight type. One of databaseIndex (legacy), tablesDBIndex, documentsDBIndex, vectorsDBIndex, databasePerformance, sitePerformance, siteAccessibility, siteSeo, functionPerformance. The index types are engine-specific so each CTA can pair the right service+method (databases.createIndex, tablesDB.createIndex, documentsDB.createIndex, or vectorsDB.createIndex).
          example: tablesDBIndex
        severity:
          type: string
          description: Insight severity. One of info, warning, critical.
          example: warning
        status:
          type: string
          description: Insight status. One of active, dismissed.
          example: active
        resourceType:
          type: string
          description: Type of the resource the insight is about. Plural noun, e.g. databases, sites, functions.
          example: databases
        resourceId:
          type: string
          description: ID of the resource the insight is about.
          example: main
        parentResourceType:
          type: string
          description: Plural noun for the parent resource that contains the insight's resource, e.g. an insight about a column index on a table → resourceType=indexes, parentResourceType=tables. Empty when the resource has no parent.
          example: tables
        parentResourceId:
          type: string
          description: ID of the parent resource. Empty when the resource has no parent.
          example: orders
        title:
          type: string
          description: Insight title.
          example: Missing index on collection orders
        summary:
          type: string
          description: Short markdown summary describing the insight.
          example: Queries against `orders.status` are scanning the full collection.
        ctas:
          type: array
          description: List of call-to-action buttons attached to this insight.
          items:
            $ref: '#/components/schemas/insightCTA'
          example: []
        analyzedAt:
          type: string
          description: Time the insight was analyzed in ISO 8601 format.
          example: '2020-10-15T06:38:00.000+00:00'
          nullable: true
        dismissedAt:
          type: string
          description: Time the insight was dismissed in ISO 8601 format. Empty when not dismissed.
          example: '2020-10-15T06:38:00.000+00:00'
          nullable: true
        dismissedBy:
          type: string
          description: User ID that dismissed the insight. Empty when not dismissed.
          example: 5e5ea5c16897e
          nullable: true
      required:
      - $id
      - $createdAt
      - $updatedAt
      - reportId
      - type
      - severity
      - status
      - resourceType
      - resourceId
      - parentResourceType
      - parentResourceId
      - title
      - summary
      - ctas
      example:
        $id: 5e5ea5c16897e
        $createdAt: '2020-10-15T06:38:00.000+00:00'
        $updatedAt: '2020-10-15T06:38:00.000+00:00'
        reportId: 5e5ea5c16897e
        type: tablesDBIndex
        severity: warning
        status: active
        resourceType: databases
        resourceId: main
        parentResourceType: tables
        parentResourceId: orders
        title: Missing index on collection orders
        summary: Queries against `orders.status` are scanning the full collection.
        ctas: []
        analyzedAt: '2020-10-15T06:38:00.000+00:00'
        dismissedAt: '2020-10-15T06:38:00.000+00:00'
        dismissedBy: 5e5ea5c16897e
    insightCTA:
      description: InsightCTA
      type: object
      properties:
        label:
          type: string
          description: Human-readable label for the CTA, used in UI.
          example: Create missing index
        service:
          type: string
          description: 'Public API service (SDK namespace) the client should invoke. Must match the engine that owns the resource — for index suggestions: databases (legacy), tablesDB, documentsDB, or vectorsDB.'
          example: tablesDB
        method:
          type: string
          description: Public API method on the chosen service the client should invoke when this CTA is triggered.
          example: createIndex
        params:
          type: object
          additionalProperties: true
          description: Parameter map the client should pass to the service method when this CTA is triggered. Keys match the target API's parameter names (e.g. databaseId/tableId/columns for tablesDB, databaseId/collectionId/attributes for the legacy Databases API).
          example:
            databaseId: main
            tableId: orders
            key: _idx_status
            type: key
            columns:
            - status
      required:
      - label
      - service
      - method
      - params
      example:
        label: Create missing index
        service: tablesDB
        method: createIndex
        params:
          databaseId: main
          tableId: orders
          key: _idx_status
          type: key
          columns:
          - status
    insightList:
      description: Insights List
      type: object
      properties:
        total:
          type: integer
          description: Total number of insights that matched your query.
          format: int32
          example: 5
        insights:
          type: array
          description: List of insights.
          items:
            $ref: '#/components/schemas/insight'
          example: []
      required:
      - total
      - insights
      example:
        total: 5
        insights: ''
    report:
      description: Report
      type: object
      properties:
        $id:
          type: string
          description: Report ID.
          example: 5e5ea5c16897e
        $createdAt:
          type: string
          description: Report creation date in ISO 8601 format.
          example: '2020-10-15T06:38:00.000+00:00'
        $updatedAt:
          type: string
          description: Report update date in ISO 8601 format.
          example: '2020-10-15T06:38:00.000+00:00'
        appId:
          type: string
          description: ID of the third-party app that submitted the report.
          example: 5e5ea5c16897e
        type:
          type: string
          description: Analyzer that produced this report. e.g. lighthouse, audit, databaseAnalyzer.
          example: lighthouse
        title:
          type: string
          description: Short, human-readable title for the report.
          example: Lighthouse audit for https://appwrite.io/
        summary:
          type: string
          description: Markdown summary describing the report.
          example: Performance score 78. 4 opportunities found.
        targetType:
          type: string
          description: Plural noun describing what the report analyzes, e.g. databases, sites, urls.
          example: urls
        target:
          type: string
          description: Free-form target identifier (URL for lighthouse, resource ID for db).
          example: https://appwrite.io/
        categories:
          type: array
          description: Categories covered by the report, e.g. performance, accessibility.
          items:
            type: string
          example:
          - performance
          - accessibility
        insights:
          type: array
          description: Insights nested under this report.
          items:
            $ref: '#/components/schemas/insight'
          example: []
        analyzedAt:
          type: string
          description: Time the report was analyzed in ISO 8601 format.
          example: '2020-10-15T06:38:00.000+00:00'
          nullable: true
      required:
      - $id
      - $createdAt
      - $updatedAt
      - appId
      - type
      - title
      - summary
      - targetType
      - target
      - categories
      - insights
      example:
        $id: 5e5ea5c16897e
        $createdAt: '2020-10-15T06:38:00.000+00:00'
        $updatedAt: '2020-10-15T06:38:00.000+00:00'
        appId: 5e5ea5c16897e
        type: lighthouse
        title: Lighthouse audit for https://appwrite.io/
        summary: Performance score 78. 4 opportunities found.
        targetType: urls
        target: https://appwrite.io/
        categories:
        - performance
        - accessibility
        insights: []
        analyzedAt: '2020-10-15T06:38:00.000+00:00'
    reportList:
      description: Reports List
      type: object
      properties:
        total:
          type: integer
          description: Total number of reports that matched your query.
          format: int32
          example: 5
        reports:
          type: array
          description: List of reports.
          items:
            $ref: '#/components/schemas/report'
          example: []
      required:
      - total
      - reports
      example:
        total: 5
        reports: ''
  securitySchemes:
    Key:
      type: apiKey
      name: X-Appwrite-Key
      description: Your secret API key
      in: header
      x-appwrite:
        platforms:
        - server
        - console
        - manager
        demo: <YOUR_API_KEY>
    Project:
      type: apiKey
      name: X-Appwrite-Project
      description: Your project ID
      in: header
      x-appwrite:
        platforms:
        - client
        - server
        - console
        demo: <YOUR_PROJECT_ID>
externalDocs:
  description: Full API docs, specs and tutorials
  url: https://appwrite.io/docs