Minds v1 API Endpoint Catalog
Complete customer-facing catalog of Minds v1 REST endpoints, response modes, and corresponding MCP capabilities.
This catalog lists the complete customer-facing v1 route surface. Use it with the live OpenAPI 3.1 document for schemas and the agent integration guide for safe orchestration patterns.
Conventions
- Apex base URL:
https://getminds.ai/api/v1 - API-subdomain base URL:
https://api.getminds.ai/v1 - Authentication:
Authorization: Bearer minds_… - JSON requests:
Content-Type: application/json - Most JSON responses use
{ "data": ... }; validation and access failures use the shared error envelope documented under Errors & Limits. {id},{mindId},{studyId}, and similar tokens are path parameters, not literal strings.DELETEoperations are destructive. Confirm the exact resource identifiers before calling them.- MCP mappings identify the equivalent capability. An MCP tool may compose more than one v1 request or expose several routes through an
actionparameter.
Meta, identity, and credentials
| Method | Path | Purpose | MCP equivalent |
|---|---|---|---|
GET | /api/v1/openapi.json | Return the public OpenAPI 3.1 document; authentication is not required | MCP publishes protocol-native tools/list discovery |
GET | /api/v1/auth/me | Read the authenticated account identity and plan context | Intentionally transport context, not an MCP research tool |
GET | /api/v1/api-keys | List API-key metadata; secret values are never returned again | Intentionally excluded from MCP |
POST | /api/v1/api-keys | Mint an API key and return its secret once | Intentionally excluded from MCP |
DELETE | /api/v1/api-keys/{keyId} | Revoke an API key | Intentionally excluded from MCP |
MCP sessions cannot mint, rotate, or revoke their own bearer credentials. Manage credentials only through authenticated account settings or the REST endpoints above.
Minds
The historical API resource name for a Mind is spark.
| Method | Path | Purpose | MCP equivalent |
|---|---|---|---|
GET | /api/v1/minds | List owned Minds with pagination and filters | list_minds |
POST | /api/v1/minds | Create and queue training for a Mind | create_mind |
DELETE | /api/v1/minds | Batch-delete confirmed Minds through canonical cleanup | manage_mind with action: "delete_many" (1–100 IDs per tool call) |
GET | /api/v1/minds/library | Read the first-party owned/shared library projection | list_minds |
GET | /api/v1/minds/{mindId} | Read one visible Mind | manage_mind with action: "get" |
PUT | /api/v1/minds/{mindId} | Update editable Mind fields and sharing configuration | manage_mind with action: "update" |
DELETE | /api/v1/minds/{mindId} | Delete one confirmed Mind and associated resources | manage_mind with action: "delete" |
GET | /api/v1/minds/{mindId}/training | Read training status and progress | get_mind_status or manage_mind with action: "get_training" |
POST | /api/v1/minds/{mindId}/retrain | Queue retraining and rebuild the complete stored knowledge index before ready | manage_mind with action: "retrain" |
POST | /api/v1/minds/{mindId}/regenerate-image | Regenerate the Mind profile image | manage_mind with action: "regenerate_image" |
POST | /api/v1/minds/{mindId}/regenerate-prompt | Regenerate the system prompt from current knowledge | manage_mind with action: "regenerate_prompt" |
POST | /api/v1/minds/{mindId}/regenerate-embeddings | Queue a fresh vector rebuild for every stored knowledge item | manage_mind with action: "regenerate_embeddings" |
GET | /api/v1/minds/{mindId}/patterns | Read raw Mind patterns when access permits | manage_mind with action: "get_patterns" |
POST | /api/v1/minds/{mindId}/completion | Run a stateless completion with one Mind | chat_with_mind |
POST | /api/v1/minds/{mindId}/export | Start or return a Mind profile export | export_mind |
GET | /api/v1/minds/{mindId}/export-status | Poll an asynchronous Mind export | export_mind returns status information |
GET | /api/v1/minds/{mindId}/export-download | Download a completed Mind export | export_mind returns the artifact or link |
GET | /api/v1/user/shareable-sparks | List Minds eligible for a sharing picker | list_minds |
Batch deletion accepts:
{
"mindIds": [
"550e8400-e29b-41d4-a716-446655440000",
"550e8400-e29b-41d4-a716-446655440001"
]
}
The response reports deleted, notFound, and failed IDs independently so one cleanup failure does not conceal the rest of the batch.
Mind knowledge
| Method | Path | Purpose | MCP equivalent |
|---|---|---|---|
GET | /api/v1/minds/{mindId}/knowledge | List knowledge items | manage_mind_knowledge with action: "list" |
POST | /api/v1/minds/{mindId}/knowledge | Add a link, keyword search, multipart file, or URL-referenced file | manage_mind_knowledge with action: "add" |
PUT | /api/v1/minds/{mindId}/knowledge/{itemId} | Update description, watch state, or supported metadata | manage_mind_knowledge with action: "update" |
DELETE | /api/v1/minds/{mindId}/knowledge/{itemId} | Delete a knowledge item and associated stored artifact | manage_mind_knowledge with action: "delete" |
GET | /api/v1/minds/{mindId}/knowledge/{itemId}/status | Poll knowledge processing | manage_mind_knowledge with action: "status" |
POST | /api/v1/minds/{mindId}/knowledge/enrich | Convenience keyword-enrichment operation | manage_mind_knowledge with action: "enrich" |
GET | /api/v1/minds/{mindId}/knowledge/patterns | Read knowledge patterns by framework | manage_mind_knowledge with action: "patterns" |
For agent-originated files, pass a public, short-lived signed, or Minds workspace-upload URL rather than base64 content:
{
"file": {
"name": "research-brief.pdf",
"url": "https://signed.example/research-brief.pdf",
"type": "application/pdf"
},
"description": "Primary customer research brief",
"regeneratePrompt": true
}
Remote retrieval is SSRF-guarded, limited to 50 MB, and time-bounded. Multipart and URL-referenced files enter the same storage and processing queue.
Canonical product resources are Audiences and Studies. The former /api/v1/groups and /api/v1/panels paths remain callable during the compatibility window, but return Deprecation: true and a Link header pointing to the canonical successor. New integrations should not use the legacy paths or names.
Audiences and grounding
| Method | Path | Purpose | MCP equivalent |
|---|---|---|---|
GET | /api/v1/audiences/limits | Read private account/team Audience size ceilings; unavailable entitlements return 503 | get_audience_limits |
GET | /api/v1/audiences | List visible Audiences | list_audiences |
POST | /api/v1/audiences | Create an Audience from explicit Mind IDs | create_audience |
GET | /api/v1/audiences/library | Read the first-party owned/followed/shared library projection | list_audiences |
GET | /api/v1/audiences/{id} | Read members, access, grounding, and Formations | get_audience or manage_audience with action: "get" |
PUT | /api/v1/audiences/{id} | Update supported Audience fields and sharing configuration | manage_audience with action: "update" |
DELETE | /api/v1/audiences/{id} | Delete a confirmed Audience | manage_audience with action: "delete" |
POST | /api/v1/audiences/{id}/members | Add one or more Minds to an Audience | manage_audience with action: "add_member" |
DELETE | /api/v1/audiences/{id}/members/{mindId} | Remove one Mind from an Audience | manage_audience with action: "remove_member" |
POST | /api/v1/audiences/{id}/follow | Follow/save a visible public Audience | manage_audience with action: "follow" |
DELETE | /api/v1/audiences/{id}/follow | Unfollow a saved Audience | manage_audience with action: "unfollow" |
GET | /api/v1/audiences/{id}/progress | Read settled creation progress, background research state, and grounding coverage | manage_audience with action: "get_progress" |
GET | /api/v1/audiences/active-progress | Read active Audience/Mind build progress for the UI | Use per-Audience or per-Mind MCP status tools |
GET | /api/v1/audiences/lifecycle/stream | Stream user-scoped invalidation hints; clients re-read durable state after each event | MCP uses durable status reads instead of a browser SSE subscription |
POST | /api/v1/audiences/{id}/recalibrate | Replace stored grounding with refreshed authoritative research; deepen researches the dimensions still missing or assumed plus up to 8 topics | recalibrate_audience |
GET | /api/v1/audiences/{id}/recalibrations/{operationId} | status, result, error | get_audience (calibration.operation) |
POST | /api/v1/audiences/{id}/regenerate-images | Regenerate Audience member images with optional limits/dry run | manage_audience with action: "regenerate_images" |
POST | /api/v1/audiences/source-import | Import account-owned research files without creating an Audience; up to 20 files, 5 MiB each and 12 MiB supplied content, with a 24 MiB JSON body ceiling. Private responses; malformed input returns 400, oversized requests 413, storage failures 502. Identical uploads can be retried. | import_audience_sources |
POST | /api/v1/audiences/from-brief | Review a grounded Audience draft, then create only the accepted snapshot | create_audience_from_brief; app-only submit_audience_review reuses this workflow |
GET | /api/v1/audiences/from-brief/jobs/{jobId} | Read an asynchronous Audience operation | Resume create_audience_from_brief with the returned operation ID |
GET | /api/v1/audiences/from-brief/jobs/{jobId}/progress | Read owned Audience review, creation and training progress | get_audience_creation_progress / render_audience_review |
POST | /api/v1/audiences/from-brief/segmentation-preview | Review respondent variables with a 256 KiB JSON request limit; private responses, safe failures and role-based defaults | preview_audience_dataset_segmentation |
POST | /api/v1/audiences/allocation-preview | Non-mutating deterministic cohort-allocation preview | create_audience_from_brief cohort-allocation workflow |
POST | /api/v1/audiences/{id}/export | Start or return a branded Audience brief export | export_audience |
GET | /api/v1/audiences/{id}/export-status | Poll an asynchronous Audience export | export_audience |
GET | /api/v1/audiences/{id}/export-download | Download a completed Audience export | export_audience returns the artifact |
Audiences and Studies are private by default. Set isLinkSharingEnabled: true only when the user explicitly requests a public link; doing so can make persisted grounding and attached research context readable through the shared surface.
Audience member additions require a JSON object within 64 KiB, including ignored fields. A mindIds array accepts at most 1,000 entries before deduplication; split larger additions into separate requests. Invalid JSON or excess IDs returns 400; excess body bytes returns 413. Legacy Group URLs enforce the same limits. Audience member additions use mindId or mindIds (mindId takes precedence). UUID case variants count as one ID; data.added includes IDs that were already members. The owner-only write rechecks ownership, Mind access, and remaining capacity in one transaction. Concurrent additions cannot both consume the last slot; a rejected batch adds nothing. Responses are private and non-cacheable, with generic 500 errors for unexpected storage or plan-resolution failures.
Member removal is owner-only and atomically deletes the Audience membership plus that Mind’s subgroup assignments on the same Audience. It preserves the Mind itself and other Audiences. Ownership is rechecked within the write; transaction failure preserves both membership and assignments. Success is an empty 204, even when membership was already absent. Missing/unowned Audiences return 404, unexpected storage failures a generic 500; responses are private and non-cacheable.
Audience validation
Audience Validation checks an Audience against real, published surveys and scores how close its Minds' answers are to the published answers. See Validate an Audience against real surveys for request options, results, costs, and failure codes.
| Method | Path | Purpose | MCP equivalent |
|---|---|---|---|
POST | /api/v1/audiences/{id}/validations | Start a validation against found surveys, 1–5 listed surveys, uploaded survey files, a dataset, or an existing Study run; optional requestKey or Idempotency-Key; returns 202 | validate_audience |
GET | /api/v1/audiences/{id}/validations | List validations newest first with overall validity, included validations, responses, and ready Minds | get_audience_validation without batchId |
GET | /api/v1/audiences/{id}/validations/batches/{batchId} | Read one validation: status, progress, survey scores and ranges, combined score, question selection, and failure | get_audience_validation with batchId |
GET | /api/v1/audiences/{id}/validations/{validationId} | Read one survey's scoring with every KPI and question | Summarized per survey by get_audience_validation |
POST | /api/v1/audiences/{id}/validations/batches/{batchId}/cancel | Stop a validation while canCancel is true | validate_audience with action: "cancel" |
GET | /api/v1/audiences/validation-benchmarks?audienceId={id} | Preview the surveys that would be used and how they fit | validate_audience finds fitting surveys itself |
Audience Formations
A Formation is a persisted segmentation of one Audience into defined subgroups.
| Method | Path | Purpose | MCP equivalent |
|---|---|---|---|
GET | /api/v1/audiences/{id}/formations | List visible shared/personal Formations with private, non-cacheable responses; unexpected lookup/seeding/storage failures return 500 | list_formations or manage_formation with action: "list" |
POST | /api/v1/audiences/{id}/formations | Create and compute a Formation | manage_formation with action: "create" |
POST | /api/v1/audiences/{id}/formations/preview | Generate a non-persisted segmentation hypothesis | manage_formation with action: "preview" |
GET | /api/v1/audiences/{id}/formations/{formationId} | Read one Formation | manage_formation with action: "get" |
DELETE | /api/v1/audiences/{id}/formations/{formationId} | Delete a confirmed Formation | manage_formation with action: "delete" |
POST | /api/v1/audiences/{id}/formations/{formationId}/recompute | Recompute member assignments | manage_formation with action: "recompute" |
Formation listing is paginated: limit defaults to 100 (maximum 100), offset defaults to 0, and pagination returns total, limit, offset, hasMore and nextOffset. Select auto-dimension winners before counting or paging; timestamp ties use descending IDs. Follow nextOffset until hasMore is false. Each page is internally consistent, while concurrent changes can shift later offsets. Only offset 0 seeds defaults and checks stalled builds. Recovery checks at most 100 pending builds, oldest first; a failed attempt does not stop other selected attempts or prevent the list response. Reopen offset 0 to retry pending work. Both list_formations and manage_formation (action: "list") expose the same page controls.
Successful build completion checks for both missing and newly added Audience members. If the classified snapshot no longer matches, the worker requests a retry without replacing the saved buckets. A short database lock closes the gap between that check and committing the ready state. Empty or degenerate failure decisions also require an unchanged population; a cap failure requires the current member count to remain above the limit. Queued execution errors preserve building until the last configured attempt; exhaustion records a sanitized failure. The synchronous no-Redis path has one attempt and settles as failed on execution errors.
Incremental classification commits a replacement assignment set for one Mind and one Formation; it does not accumulate the results of earlier classifications. Provider outages leave the saved set untouched. Numeric-balanced dimensions accept additional members only through explicit recomputation.
Formation detail responses are private and non-cacheable. Only documented fields are exposed, and failure reasons are sanitized. Invalid legacy proposals become {}, malformed building progress becomes null, and ready builds always return progress: null. Invalid persisted detail metadata and unexpected storage errors return a generic 500. Recompute can retain the previous completed subgroups until replacement succeeds, so check status before treating assignments as final.
Formation creation accepts at most 64 KiB of JSON and returns private, non-cacheable responses. Its hypothesis must have non-empty text and 2–15 subgroups with unique trimmed IDs and labels; unanswered, __unanswered, and __other are reserved IDs. Invalid input returns 400, oversized requests 413, and unexpected storage errors a generic 500. name is optional but must be a string. A user-created split requires two populated primary buckets to become ready. Deletion before acknowledgement returns 404.
Formation delete and recompute responses are private (Cache-Control: private, no-store), including refusals. Unexpected database or queue failures return a generic 500; a missing or non-mutable Formation remains 404. After an uncertain recompute response, inspect the Formation’s status before retrying.
Preview request contract: body ≤64 KiB; optional userInput ≤2000 trimmed characters; optional priorHypothesis matching the creation schema (null also means no prior proposal). Empty requests use the default prompt. Input refusals are 400 or 413; storage errors fail before streaming with a generic 500. Responses prohibit caching. Generated output is validated and stripped to creation fields, including its serialized size. Generation errors use HTTP 500 for JSON and error → done events for an established NDJSON stream. Client disconnects and stream cancellation propagate an abort signal to the model executor.
The preview endpoint content-negotiates. Use Accept: application/x-ndjson for incremental browser progress or Accept: application/json for a single agent-friendly hypothesis. Both representations use the same generator. Negotiation honors q weights, specific ranges, wildcards and UTF-8 media parameters; explicit rejection cannot be overridden by a less-specific wildcard. No header selects NDJSON. A request that accepts neither available representation receives a private 406 before the model is called.
Studies, analytics, and exports
| Method | Path | Purpose | MCP equivalent |
|---|---|---|---|
GET | /api/v1/studies | List Studies | list_studies |
POST | /api/v1/studies | Create a Study from existing Audiences or inline audienceConfigs | create_study |
GET | /api/v1/studies/{studyId} | Read Study composition and history | get_study_status or manage_study with action: "get" |
DELETE | /api/v1/studies/{studyId} | Delete a confirmed Study | manage_study with action: "delete" |
POST | /api/v1/studies/{studyId}/ask | Submit one direct question; supports SSE and queued modes | ask_study |
GET | /api/v1/studies/{studyId}/analytics | Compute scale, categorical, and qualitative analytics | get_study_analytics |
POST | /api/v1/studies/{studyId}/invitations | Invite Study collaborators without exposing invitation tokens | manage_study with action: "invite" |
POST | /api/v1/studies/{studyId}/export | Start an export in a supported format | export_study |
GET | /api/v1/studies/{studyId}/export-status | Poll export status | export_study / get_study_status |
GET | /api/v1/studies/{studyId}/export-download | Download a completed export | export_study returns an artifact or link |
POST | /api/v1/studies/{studyId}/heatmaps/{messageId}/export | Start or return a website-heatmap ZIP export | export_heatmap |
GET | /api/v1/studies/{studyId}/heatmaps/{messageId}/export-status | Poll a website-heatmap ZIP export | export_heatmap |
GET | /api/v1/studies/{studyId}/heatmaps/{messageId}/export-download | Download a completed website-heatmap ZIP | export_heatmap returns a signed URL |
GET | /api/v1/studies/{studyId}/summary | Read the persisted flexible semantic summary | get_study_summary |
POST | /api/v1/studies/{studyId}/summary | Generate or refresh the semantic summary | get_study_summary with refresh: true |
PUT | /api/v1/studies/{studyId}/sharing | Enable or disable the public Study link | manage_study with action: "set_link_sharing" |
Composite creation through audienceConfigs is atomic: if any inline Audience fails, the operation rolls back the Study and Audiences created by that request. The legacy groupIds and groupConfigs request fields remain accepted on deprecated routes; canonical Study routes use audienceIds and audienceConfigs and return studyMode: "study" with an audiences collection.
Guided Studies and durable runs
For any broader objective or more than one question, plan and execute one cohesive multi-question block. Related questions should be organized into named modules or sections and run together; reserve the direct ask endpoint for a genuinely standalone question.
| Method | Path | Purpose | MCP equivalent |
|---|---|---|---|
POST | /api/v1/studies/{studyId}/research-plans/preview | Create or revise a versioned research-plan draft | plan_study_questions |
POST | /api/v1/studies/{studyId}/research-runs | Confirm and run the exact reviewed plan revision | run_study_questions |
GET | /api/v1/studies/{studyId}/research-runs/{runId} | Poll Study progress, methods, artifacts, and calculations | get_study_run |
POST | /api/v1/studies/{studyId}/runs | Start a durable direct Study run | ask_study for direct questions or run_study_questions for planned research |
GET | /api/v1/studies/{studyId}/runs | List durable runs for a Study | get_study_status / get_study_run |
GET | /api/v1/runs/{runId} | Read durable run status | get_study_status / get_study_run |
GET | /api/v1/runs/{runId}/events | Read ordered run events using after and limit cursors | MCP status tools return durable progress |
POST | /api/v1/runs/{runId}/cancel | Cancel a running durable job | No dedicated curated MCP tool |
GET | /api/v1/model-connections | Page active team model connections and verified capability flags; pass pagination.nextCursor as cursor | list_model_connections |
GET | /api/v1/research-methods | List versioned methods, execution support, requirements, and fallbacks | list_research_methods |
Creating a plan does not start research. Start only after the user explicitly confirms the exact returned revision. executable: false means a represented method is informational or planned, not runnable.
MCP presentation tools read the same owned state without starting new research. render_audience_review reads operation progress for one Audience or a batch. render_study_plan reads the saved draft through the research-plan service and rejects a stale revision. render_study_results requires one completed question or run with complete response coverage; queued, running, partial and failed results are refused. Poll the existing operation or run first, then show one final widget. Routed not_asked items are settled without fabricated responses, preserving the original questionnaire count and wording. See the MCP tool schemas and review flow.
Study templates
Template responses are private and non-cacheable. Save and update accept JSON bodies up to 1 MiB; use accepts up to 4 KiB. Oversized requests return 413, while malformed JSON or invalid configuration returns 400. The configuration itself is limited to 512 KiB. Expected ownership, revision and file refusals retain their documented statuses; unexpected storage/provider failures return a generic 500.
| Method | Path | Purpose | MCP equivalent |
|---|---|---|---|
GET | /api/v1/study-templates | List personal and team-shared templates | list_study_templates |
GET | /api/v1/study-templates/{id} | Read a visible template and its revision | list_study_templates |
POST | /api/v1/study-templates | Save a template; preserve requestId for retries | manage_study_template (save) |
PATCH | /api/v1/study-templates/{id} | Update an owned template using expectedRevision | manage_study_template (update) |
DELETE | /api/v1/study-templates/{id} | Delete an owned template | manage_study_template (delete) |
POST | /api/v1/study-templates/{id}/use | Create an independent app-editable draft using expectedRevision and requestId; retries return the existing draft | manage_study_template (use) |
Durable Study drafts
These endpoints persist the same resumable planner state used by the first-party Study sidebar.
| Method | Path | Purpose | MCP equivalent |
|---|---|---|---|
GET | /api/v1/study-drafts | List owned resumable drafts | list_study_drafts |
POST | /api/v1/study-drafts | Create a durable draft | save_study_draft |
GET | /api/v1/study-drafts/{id} | Read one complete draft | list_study_drafts with draftId |
PATCH | /api/v1/study-drafts/{id} | Revise a draft using optimistic concurrency | save_study_draft with draftId and expectedRevision |
DELETE | /api/v1/study-drafts/{id} | Delete a confirmed draft | manage_study_draft with action: "delete" |
POST | /api/v1/study-drafts/{id}/consume | Mark a precise revision consumed and optionally attach it to a Study | manage_study_draft with action: "consume" |
Draft responses use Cache-Control: private, no-store. Creation accepts JSON requests up to 1 MiB; update accepts up to 2 MiB so it can carry both an edited checkpoint and its base. Each versioned payload, including checkpointBase.payload, has a separate 512 KiB limit. Consume requests are limited to 4 KiB. Malformed JSON or invalid fields return 400, oversized input returns 413, and unexpected storage failures return a generic 500. A changed snapshot increments the revision and returns the snapshot written by that update, even if another writer immediately saves a newer revision. An identical save, including acknowledgement of a new checkpointId, preserves its revision and updatedAt.
POST /api/v1/study-drafts accepts idempotencyKey: an optional string whose trimmed length is 1–200 characters. A matching key resolves to that caller’s previously saved draft, so a retry does not apply a replacement payload. Clients that omit this field have no key-based protection against duplicate creation. To edit an existing draft, send PATCH /api/v1/study-drafts/{id} with its latest expectedRevision in the JSON body; identify the draft in the URL rather than sending the MCP-only draftId argument.
For strict optimistic concurrency, send the exact expectedRevision returned by the last read and omit checkpointBase. A stale changed snapshot returns 409; replaying a snapshot that already matches the saved state succeeds.
For concurrent editors or an offline checkpoint queue, send these optional fields on the same PATCH request (or save_study_draft call):
| Field | Contract |
|---|---|
checkpointBase | The complete checkpoint the editor observed before its edit: { name, mode, currentStep, payload }. Keep this base unchanged on retries. |
checkpointId | A UUID identifying this exact save operation. Generate it once and reuse it after a lost response or reconnect. Use a new UUID for a new authored edit. |
With checkpointBase, the server reconciles changes to independent object fields against the latest saved state. Arrays and strings are whole values. Competing changes to the same field follow commit order; displaced alternatives are retained privately and are not included in draft responses. A repeated checkpointId acknowledges the existing operation and cannot reapply its old snapshot over later edits. Preserve authored save order when replaying a client queue; a network retry does not authorize replacing the original base with a newer read. Use the returned revision for the next new edit.
Consuming an already consumed draft returns its existing tombstone unchanged, including its linked Study. A late base-aware checkpoint is retained privately and acknowledges the consumed draft without reopening it or changing the accepted Study. Consume closes planning state; it does not start or verify research.
Stateful chats
| Method | Path | Purpose | MCP equivalent |
|---|---|---|---|
POST | /api/v1/chats | Create a stateful single-Mind, multi-Mind, or Audience-backed chat | manage_chat with action: "create" |
POST | /api/v1/chats/{chatId}/messages | Append a user/system message and receive the next response | manage_chat with action: "send_message" |
DELETE | /api/v1/chats/{chatId} | Delete a confirmed chat and its persisted history | manage_chat with action: "delete" |
For a one-off Mind request without server-managed history, use the stateless completion endpoint instead.
Choosing the next reference
- Request and response examples: Minds, Audiences, Studies, Knowledge, and Chat
- Authentication and key rotation: Authentication
- Errors, plan limits, and retry policy: Errors & Limits
- Autonomous integrations: API guide for agents
- Tool-native integrations: MCP tools reference
Stripe billing for agents
| Method | Path | API / MCP |
|---|---|---|
GET | /api/v1/billing/catalog | Read current subscription prices, response-credit packs and eligibility; get_billing_catalog |
POST | /api/v1/billing/checkout | Start hosted checkout; buyer completes consent and payment; start_billing_checkout |
POST | /api/v1/billing/invoices/{invoiceId}/pay | Negotiate an eligible invoice payment over HTTP; MPP / x402 |
ACP REST resources use the discovery document's api_base_url and API version 2026-04-17:
| Method | Resource | Meaning |
|---|---|---|
| POST | /checkout_sessions | Create one hosted subscription or credit-pack session |
| GET | /checkout_sessions/{id} | Read an owned session |
| POST | /checkout_sessions/{id} | Refresh an immutable session with {} |
| POST | /checkout_sessions/{id}/complete | Read confirmation state with {} |
| POST | /checkout_sessions/{id}/cancel | Expire an open session |
Creation requires line_items: [{ id: "price_…" }], currency and capabilities: {}. Optional metadata holds billingCountry, Team quantity and subscription legalAcceptance. The API-Version header may be omitted; if supplied it must match. All POST actions require Idempotency-Key. Buyer interaction happens at the returned continue_url; the adapter reports Stripe's state rather than collecting card details.
The OpenAPI payment offers describe dynamic invoice pricing with amount: null. The runtime challenge supplies the quote. Consult the agent integration guide for authentication headers and uncertain-payment handling.
Custom credit checkout fields
The credit branch of /api/v1/billing/checkout accepts an optional amountMinor budget. When omitted, priceId identifies an unchanged preset or a reusable purchased pack.
| Field | Custom purchase contract |
|---|---|
priceId | Current responseCredits.customTopUp.priceId from the catalog |
amountMinor | Positive integer budget in cents; at least customTopUp.unitAmount |
billingCountry | Country used to read the catalog for a new workspace |
Idempotency-Key | One purchase identifier; changing the amount under this key returns a conflict |
The server determines response units and the Stripe Price; callers cannot provide their own unit rate or granted balance. Checkout creation returns the usual hosted URL and session ID without granting access.


