{
  "opencollection": "1.0.0",
  "info": {
    "name": "Monid API",
    "version": "0.1.0"
  },
  "items": [
    {
      "info": {
        "name": "Auth",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "Get the authenticated user and workspace",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/auth/whoami",
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Returns the authenticated user and (when present) workspace from the auth context. Requires an authenticated user but NOT a workspace — `workspace` is omitted when the caller has none."
        },
        {
          "info": {
            "name": "List the caller's workspaces",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/auth/workspaces",
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "All workspaces (Clerk organizations) the authenticated user belongs to. Requires an authenticated user but NOT a selected workspace — use this to discover which workspace to select."
        }
      ]
    },
    {
      "info": {
        "name": "Discover",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "Search for data endpoints",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.monid.ai/v1/discover",
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Semantic search over the endpoint catalog: registry kNN retrieval, signal-based reranking, relevance floors, and per-result pricing."
        }
      ]
    },
    {
      "info": {
        "name": "Endpoints",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "Browse the endpoint catalog",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/endpoints",
            "params": [
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items per page (server-side cap applies)."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Cursor returned by the previous page."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Cursor-paginated, cross-provider browse of the whole endpoint catalog (verified-first). Card shape is shared with the public registry surface."
        }
      ]
    },
    {
      "info": {
        "name": "Inspect",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "Get full endpoint details",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.monid.ai/v1/inspect",
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Full endpoint details including input schema, pricing, and documentation. The provider's endpoint detail is the single source of truth."
        }
      ]
    },
    {
      "info": {
        "name": "Runs",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "Start an endpoint run",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.monid.ai/v1/run",
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Start an execution of an endpoint. For a sync COMPLETED run the HTTP status FAITHFULLY MIRRORS the provider's own status (2xx → 2xx, provider 4xx/5xx → 4xx/5xx, request-timeout → 504); the body always carries the full run. A control gate returns a 200 BLOCKED run, and a run that exceeds its time budget returns 408 (TIMED_OUT). Async endpoints return a 202 acceptance ack — poll GET /v1/runs/{runId} for the result."
        },
        {
          "info": {
            "name": "List runs",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/runs",
            "params": [
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items per page (server-side cap applies)."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Cursor returned by the previous page."
              },
              {
                "name": "status",
                "value": "",
                "type": "query",
                "description": "Filter runs by lifecycle status."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Cursor-paginated list of the workspace's runs, newest first. Optional `status` filter."
        },
        {
          "info": {
            "name": "Get a run",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/runs/:runId",
            "params": [
              {
                "name": "runId",
                "value": "",
                "type": "path",
                "description": "Run identifier (ULID)."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Poll run status and retrieve results. Terminal runs include the resolved provider `output`."
        },
        {
          "info": {
            "name": "List a run's control records",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/runs/:runId/controls",
            "params": [
              {
                "name": "runId",
                "value": "",
                "type": "path",
                "description": "Run identifier (ULID)."
              },
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items per page (server-side cap applies)."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Cursor returned by the previous page."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "All control junction records for a run — budget controls (HELD/SETTLED/RELEASED/BLOCKED) and run cap controls (BLOCKED)."
        },
        {
          "info": {
            "name": "Stop a run",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.monid.ai/v1/runs/:runId/stop",
            "params": [
              {
                "name": "runId",
                "value": "",
                "type": "path",
                "description": "Run identifier (ULID)."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Request the platform stop a non-terminal, stoppable run. The stop is asynchronous — poll GET /v1/runs/{runId} to observe the terminal STOPPED status."
        }
      ]
    },
    {
      "info": {
        "name": "Resources",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "List resources",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/resources",
            "params": [
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items per page (server-side cap applies)."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Cursor returned by the previous page."
              },
              {
                "name": "provider",
                "value": "",
                "type": "query",
                "description": "Filter by provider slug (e.g. 'saperly')."
              },
              {
                "name": "resourceType",
                "value": "",
                "type": "query",
                "description": "Filter by resource type — requires `provider` (store SK prefix is ordered)."
              },
              {
                "name": "state",
                "value": "",
                "type": "query",
                "description": "Filter by lifecycle state."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Cursor-paginated list of the workspace's provider resources (durable, workspace-owned provider assets, e.g. phone numbers), newest first. Optional `provider`/`resourceType`/`state` filters (`resourceType` requires `provider`)."
        },
        {
          "info": {
            "name": "Get a resource's live external detail",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/resources/:resourceId/external/:kind",
            "params": [
              {
                "name": "resourceId",
                "value": "",
                "type": "path",
                "description": "Resource identifier (ULID)."
              },
              {
                "name": "kind",
                "value": "",
                "type": "path",
                "description": "External kind (from `externalResources[].kind`)."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Live detail of one external kind (from the resource's `externalResources` summaries), fetched fresh from the provider and sanitized — never secrets or upstream ids. Nothing is persisted; the response is upstream truth at this moment."
        },
        {
          "info": {
            "name": "List a resource's lifecycle events",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/resources/:resourceId/events",
            "params": [
              {
                "name": "resourceId",
                "value": "",
                "type": "path",
                "description": "Resource identifier (ULID)."
              },
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items per page (server-side cap applies)."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Cursor returned by the previous page."
              },
              {
                "name": "provider",
                "value": "",
                "type": "query",
                "description": "Filter by provider slug (e.g. 'saperly')."
              },
              {
                "name": "resourceType",
                "value": "",
                "type": "query",
                "description": "Filter by resource type — requires `provider` (store SK prefix is ordered)."
              },
              {
                "name": "state",
                "value": "",
                "type": "query",
                "description": "Filter by lifecycle state."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Cursor-paginated lifecycle events for a resource, oldest first — the renew history IS these events."
        },
        {
          "info": {
            "name": "Release a resource",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.monid.ai/v1/resources/:resourceId/release",
            "params": [
              {
                "name": "resourceId",
                "value": "",
                "type": "path",
                "description": "Resource identifier (ULID)."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Request the release of a workspace-owned resource. Asynchronous and idempotent: a renewable resource stays usable until its paid-through date, then is released upstream; a non-renewable one is released immediately. Poll GET /v1/resources/{resourceId} for the authoritative state."
        },
        {
          "info": {
            "name": "Get a resource",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/resources/:resourceId",
            "params": [
              {
                "name": "resourceId",
                "value": "",
                "type": "path",
                "description": "Resource identifier (ULID)."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Get a single workspace-owned resource. External detail is a separate on-demand live fetch — see GET /v1/resources/{resourceId}/external/{kind}."
        }
      ]
    },
    {
      "info": {
        "name": "Wallet",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "Get the live wallet balance",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/wallet/balance",
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Fetches the live balance from the wallet provider, reconciles the wallet-balance control, and returns spendable `balance` (live − held; may be negative) plus `held` (reserved for in-flight runs). Never cached."
        },
        {
          "info": {
            "name": "Get top-up configuration",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/wallet/topup",
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Fees and limits for wallet top-ups, so the frontend does not hardcode values."
        }
      ]
    },
    {
      "info": {
        "name": "Controls",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "List workspace budget controls",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/controls/workspace/budgets",
            "params": [
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items per page (server-side cap applies)."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Cursor returned by the previous page."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Cursor-paginated list of the workspace's budget controls with live usage counters."
        },
        {
          "info": {
            "name": "Get a workspace budget control",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/controls/workspace/budgets/:budgetControlId",
            "params": [
              {
                "name": "budgetControlId",
                "value": "",
                "type": "path",
                "description": "Budget control ID (ULID)."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Get a workspace budget control"
        },
        {
          "info": {
            "name": "Update a workspace budget control",
            "type": "http"
          },
          "http": {
            "method": "PATCH",
            "url": "https://api.monid.ai/v1/controls/workspace/budgets/:budgetControlId",
            "params": [
              {
                "name": "budgetControlId",
                "value": "",
                "type": "path",
                "description": "Budget control ID (ULID)."
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Patch limitAmount and/or status. At least one field is required."
        },
        {
          "info": {
            "name": "List runs linked to a budget control",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/controls/workspace/budgets/:budgetControlId/runs",
            "params": [
              {
                "name": "budgetControlId",
                "value": "",
                "type": "path",
                "description": "Budget control ID (ULID)."
              },
              {
                "name": "windowStart",
                "value": "",
                "type": "query",
                "description": "ISO 8601 timestamp selecting a specific window. Defaults to the current window when omitted."
              },
              {
                "name": "status",
                "value": "",
                "type": "query",
                "description": "Filter runs by junction status."
              },
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items per page (server-side cap applies)."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Cursor returned by the previous page."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Cursor-paginated list of run junctions for a budget control. Defaults to the current time window when windowStart is omitted."
        },
        {
          "info": {
            "name": "List workspace run cap controls",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/controls/workspace/run-caps",
            "params": [
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items per page (server-side cap applies)."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Cursor returned by the previous page."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Cursor-paginated list of the workspace's per-execution spending caps."
        },
        {
          "info": {
            "name": "Get a workspace run cap control",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/controls/workspace/run-caps/:runCapControlId",
            "params": [
              {
                "name": "runCapControlId",
                "value": "",
                "type": "path",
                "description": "Run cap control ID (ULID)."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Get a workspace run cap control"
        },
        {
          "info": {
            "name": "Update a workspace run cap control",
            "type": "http"
          },
          "http": {
            "method": "PATCH",
            "url": "https://api.monid.ai/v1/controls/workspace/run-caps/:runCapControlId",
            "params": [
              {
                "name": "runCapControlId",
                "value": "",
                "type": "path",
                "description": "Run cap control ID (ULID)."
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Patch limitAmount and/or status. At least one field is required."
        },
        {
          "info": {
            "name": "List runs linked to a run cap control",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/controls/workspace/run-caps/:runCapControlId/runs",
            "params": [
              {
                "name": "runCapControlId",
                "value": "",
                "type": "path",
                "description": "Run cap control ID (ULID)."
              },
              {
                "name": "status",
                "value": "",
                "type": "query"
              },
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items per page (server-side cap applies)."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Cursor returned by the previous page."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Cursor-paginated list of run junctions for a run cap control."
        }
      ]
    },
    {
      "info": {
        "name": "API Keys",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "List API keys",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/v1/api-keys",
            "params": [
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items per page (server-side cap applies)."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Cursor returned by the previous page."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Cursor-paginated list of the workspace's API keys. Returns metadata only — the full key value is never retrievable."
        },
        {
          "info": {
            "name": "Update an API key",
            "type": "http"
          },
          "http": {
            "method": "PATCH",
            "url": "https://api.monid.ai/v1/api-keys/:label",
            "params": [
              {
                "name": "label",
                "value": "",
                "type": "path",
                "description": "Current label of the API key."
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Updates an API key's metadata (currently only the label)."
        },
        {
          "info": {
            "name": "Delete an API key",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "https://api.monid.ai/v1/api-keys/:label",
            "params": [
              {
                "name": "label",
                "value": "",
                "type": "path",
                "description": "Label of the API key to delete."
              }
            ],
            "auth": {
              "type": "bearer",
              "token": "{{bearerToken}}"
            }
          },
          "docs": "Permanently deletes an API key. Requests using the key stop authenticating immediately."
        }
      ]
    },
    {
      "info": {
        "name": "Public Registry",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "Catalog-wide aggregate counts",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/public/v1/stats"
          },
          "docs": "Number of enabled endpoints and providers in the public catalog."
        },
        {
          "info": {
            "name": "List providers",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/public/v1/providers",
            "params": [
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items per page (server-side cap applies)."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Cursor returned by the previous page."
              }
            ]
          },
          "docs": "Cursor-paginated list of providers with their enabled-endpoint counts."
        },
        {
          "info": {
            "name": "List a provider's endpoints",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/public/v1/providers/:provider/endpoints",
            "params": [
              {
                "name": "provider",
                "value": "",
                "type": "path",
                "description": "Provider slug."
              },
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max items per page (server-side cap applies)."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Cursor returned by the previous page."
              }
            ]
          },
          "docs": "Cursor-paginated list of a provider's enabled endpoints (display copy + price). 404 when the provider has no enabled endpoints."
        },
        {
          "info": {
            "name": "Keyword search over the catalog",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/public/v1/search",
            "params": [
              {
                "name": "q",
                "value": "",
                "type": "query",
                "description": "Free-text query. Required, 1..200 chars."
              },
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Max results to return. Server caps this at the configured public search max (currently 20)."
              },
              {
                "name": "cursor",
                "value": "",
                "type": "query",
                "description": "Opaque pagination token from a previous response. Pass it back unchanged to fetch the next page."
              }
            ]
          },
          "docs": "Anonymous BM25 keyword search over the endpoint catalog."
        },
        {
          "info": {
            "name": "Get one endpoint",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.monid.ai/public/v1/providers/:provider/endpoints/:endpoint",
            "params": [
              {
                "name": "provider",
                "value": "",
                "type": "path"
              },
              {
                "name": "endpoint",
                "value": "",
                "type": "path",
                "description": "Endpoint path; may contain slashes."
              }
            ]
          },
          "docs": "Fetch a single public endpoint card. `endpoint` is the endpoint path and may itself contain slashes (e.g. `apidojo/tweet-scraper`)."
        }
      ]
    }
  ],
  "bundled": true
}