{
  "name": "Mite API",
  "version": "v1",
  "description": "In-app feedback, feature requests, and release notes for Expo and React Native apps.",
  "base_url": "https://intent-okapi-412.convex.site",
  "openapi_url": "https://usemite.com/openapi.json",
  "documentation_url": "https://usemite.com/docs",
  "llms_txt_url": "https://usemite.com/llms.txt",
  "llms_full_txt_url": "https://usemite.com/llms-full.txt",
  "agent_instructions_url": "https://usemite.com/agents.md",
  "api_catalog_url": "https://usemite.com/.well-known/api-catalog",
  "sitemap_url": "https://usemite.com/sitemap.xml",
  "website_url": "https://usemite.com",
  "sdk": {
    "name": "@usemite/mite-sdk",
    "platforms": [
      "react-native",
      "expo"
    ],
    "repository": "https://github.com/usemite/mite-sdk"
  },
  "authentication": {
    "type": "bearer",
    "header": "Authorization",
    "format": "Bearer mite_ak_<token>",
    "scopes": [
      "read",
      "write"
    ],
    "note": "Mite API keys are publishable SDK tokens that ship inside mobile binaries. They are not secrets.",
    "where_to_get": "https://usemite.com/apps"
  },
  "error_format": {
    "media_type": "application/json",
    "fields": {
      "error": "string",
      "code": "string",
      "hint": "string"
    },
    "note": "Branch on `code`, not on `error`."
  },
  "rate_limits": {
    "specification": "https://datatracker.ietf.org/doc/draft-ietf-httpapi-ratelimit-headers/",
    "headers": {
      "RateLimit": "Quota left for this client, as `\"<policy>\";r=<remaining>;t=<seconds until the quota is whole>`.",
      "RateLimit-Policy": "The quota in force, as `\"<policy>\";q=<requests>;w=<window seconds>`.",
      "RateLimit-Limit": "Superseded plain-integer form of the quota. Sent for older clients.",
      "RateLimit-Remaining": "Superseded plain-integer form of `r`.",
      "RateLimit-Reset": "Superseded plain-integer form of `t`.",
      "Retry-After": "Seconds to wait before retrying. Sent on 429 only, and authoritative over `RateLimit` when both are present."
    },
    "scope": "Limits are counted per API key, not per application.",
    "policies": [
      {
        "policy": "bug-reports",
        "method": "POST",
        "path": "/api/v1/bug-reports",
        "quota": 60,
        "window_seconds": 60
      },
      {
        "policy": "upload-url",
        "method": "POST",
        "path": "/api/v1/upload-url",
        "quota": 30,
        "window_seconds": 60
      },
      {
        "policy": "identify",
        "method": "POST",
        "path": "/api/v1/identify",
        "quota": 120,
        "window_seconds": 60
      },
      {
        "policy": "releases",
        "method": "GET",
        "path": "/api/v1/releases",
        "quota": 120,
        "window_seconds": 60
      },
      {
        "policy": "announcements",
        "method": "GET",
        "path": "/api/v1/announcements",
        "quota": 120,
        "window_seconds": 60
      },
      {
        "policy": "feature-requests-list",
        "method": "GET",
        "path": "/api/v1/feature-requests",
        "quota": 120,
        "window_seconds": 60
      },
      {
        "policy": "feature-requests-create",
        "method": "POST",
        "path": "/api/v1/feature-requests",
        "quota": 30,
        "window_seconds": 60
      },
      {
        "policy": "feature-requests-vote",
        "method": "POST",
        "path": "/api/v1/feature-requests/vote",
        "quota": 60,
        "window_seconds": 60
      },
      {
        "policy": "feature-requests-votes",
        "method": "GET",
        "path": "/api/v1/feature-requests/votes",
        "quota": 120,
        "window_seconds": 60
      },
      {
        "policy": "images",
        "method": "GET",
        "path": "/getImage",
        "quota": 300,
        "window_seconds": 60
      }
    ],
    "unmetered": [
      "/api/v1/health"
    ]
  },
  "endpoints": [
    {
      "method": "GET",
      "path": "/api/v1/health",
      "scope": "none",
      "summary": "Liveness probe."
    },
    {
      "method": "POST",
      "path": "/api/v1/bug-reports",
      "scope": "write",
      "summary": "Submit a bug report."
    },
    {
      "method": "POST",
      "path": "/api/v1/upload-url",
      "scope": "write",
      "summary": "Create a single-use attachment upload URL."
    },
    {
      "method": "POST",
      "path": "/api/v1/identify",
      "scope": "write",
      "summary": "Create or update an end-user profile."
    },
    {
      "method": "GET",
      "path": "/api/v1/releases",
      "scope": "read",
      "summary": "List published releases."
    },
    {
      "method": "GET",
      "path": "/api/v1/announcements",
      "scope": "read",
      "summary": "List active announcements."
    },
    {
      "method": "GET",
      "path": "/api/v1/feature-requests",
      "scope": "read",
      "summary": "List feature requests."
    },
    {
      "method": "POST",
      "path": "/api/v1/feature-requests",
      "scope": "write",
      "summary": "Submit a feature request."
    },
    {
      "method": "POST",
      "path": "/api/v1/feature-requests/vote",
      "scope": "write",
      "summary": "Toggle a vote on a feature request."
    },
    {
      "method": "GET",
      "path": "/api/v1/feature-requests/votes",
      "scope": "read",
      "summary": "List the feature requests one voter voted for."
    },
    {
      "method": "GET",
      "path": "/getImage",
      "scope": "read",
      "summary": "Fetch a stored attachment."
    }
  ]
}
