Minds Team

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.
  • DELETE operations 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 action parameter.

Meta, identity, and credentials

MethodPathPurposeMCP equivalent
GET/api/v1/openapi.jsonReturn the public OpenAPI 3.1 document; authentication is not requiredMCP publishes protocol-native tools/list discovery
GET/api/v1/auth/meRead the authenticated account identity and plan contextIntentionally transport context, not an MCP research tool
GET/api/v1/api-keysList API-key metadata; secret values are never returned againIntentionally excluded from MCP
POST/api/v1/api-keysMint an API key and return its secret onceIntentionally excluded from MCP
DELETE/api/v1/api-keys/{keyId}Revoke an API keyIntentionally 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.

MethodPathPurposeMCP equivalent
GET/api/v1/mindsList owned Minds with pagination and filterslist_minds
POST/api/v1/mindsCreate and queue training for a Mindcreate_mind
DELETE/api/v1/mindsBatch-delete confirmed Minds through canonical cleanupmanage_mind with action: "delete_many" (1–100 IDs per tool call)
GET/api/v1/minds/libraryRead the first-party owned/shared library projectionlist_minds
GET/api/v1/minds/{mindId}Read one visible Mindmanage_mind with action: "get"
PUT/api/v1/minds/{mindId}Update editable Mind fields and sharing configurationmanage_mind with action: "update"
DELETE/api/v1/minds/{mindId}Delete one confirmed Mind and associated resourcesmanage_mind with action: "delete"
GET/api/v1/minds/{mindId}/trainingRead training status and progressget_mind_status or manage_mind with action: "get_training"
POST/api/v1/minds/{mindId}/retrainQueue retraining and rebuild the complete stored knowledge index before readymanage_mind with action: "retrain"
POST/api/v1/minds/{mindId}/regenerate-imageRegenerate the Mind profile imagemanage_mind with action: "regenerate_image"
POST/api/v1/minds/{mindId}/regenerate-promptRegenerate the system prompt from current knowledgemanage_mind with action: "regenerate_prompt"
POST/api/v1/minds/{mindId}/regenerate-embeddingsQueue a fresh vector rebuild for every stored knowledge itemmanage_mind with action: "regenerate_embeddings"
GET/api/v1/minds/{mindId}/patternsRead raw Mind patterns when access permitsmanage_mind with action: "get_patterns"
POST/api/v1/minds/{mindId}/completionRun a stateless completion with one Mindchat_with_mind
POST/api/v1/minds/{mindId}/exportStart or return a Mind profile exportexport_mind
GET/api/v1/minds/{mindId}/export-statusPoll an asynchronous Mind exportexport_mind returns status information
GET/api/v1/minds/{mindId}/export-downloadDownload a completed Mind exportexport_mind returns the artifact or link
GET/api/v1/user/shareable-sparksList Minds eligible for a sharing pickerlist_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

MethodPathPurposeMCP equivalent
GET/api/v1/minds/{mindId}/knowledgeList knowledge itemsmanage_mind_knowledge with action: "list"
POST/api/v1/minds/{mindId}/knowledgeAdd a link, keyword search, multipart file, or URL-referenced filemanage_mind_knowledge with action: "add"
PUT/api/v1/minds/{mindId}/knowledge/{itemId}Update description, watch state, or supported metadatamanage_mind_knowledge with action: "update"
DELETE/api/v1/minds/{mindId}/knowledge/{itemId}Delete a knowledge item and associated stored artifactmanage_mind_knowledge with action: "delete"
GET/api/v1/minds/{mindId}/knowledge/{itemId}/statusPoll knowledge processingmanage_mind_knowledge with action: "status"
POST/api/v1/minds/{mindId}/knowledge/enrichConvenience keyword-enrichment operationmanage_mind_knowledge with action: "enrich"
GET/api/v1/minds/{mindId}/knowledge/patternsRead knowledge patterns by frameworkmanage_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

MethodPathPurposeMCP equivalent
GET/api/v1/audiences/limitsRead private account/team Audience size ceilings; unavailable entitlements return 503get_audience_limits
GET/api/v1/audiencesList visible Audienceslist_audiences
POST/api/v1/audiencesCreate an Audience from explicit Mind IDscreate_audience
GET/api/v1/audiences/libraryRead the first-party owned/followed/shared library projectionlist_audiences
GET/api/v1/audiences/{id}Read members, access, grounding, and Formationsget_audience or manage_audience with action: "get"
PUT/api/v1/audiences/{id}Update supported Audience fields and sharing configurationmanage_audience with action: "update"
DELETE/api/v1/audiences/{id}Delete a confirmed Audiencemanage_audience with action: "delete"
POST/api/v1/audiences/{id}/membersAdd one or more Minds to an Audiencemanage_audience with action: "add_member"
DELETE/api/v1/audiences/{id}/members/{mindId}Remove one Mind from an Audiencemanage_audience with action: "remove_member"
POST/api/v1/audiences/{id}/followFollow/save a visible public Audiencemanage_audience with action: "follow"
DELETE/api/v1/audiences/{id}/followUnfollow a saved Audiencemanage_audience with action: "unfollow"
GET/api/v1/audiences/{id}/progressRead settled creation progress, background research state, and grounding coveragemanage_audience with action: "get_progress"
GET/api/v1/audiences/active-progressRead active Audience/Mind build progress for the UIUse per-Audience or per-Mind MCP status tools
GET/api/v1/audiences/lifecycle/streamStream user-scoped invalidation hints; clients re-read durable state after each eventMCP uses durable status reads instead of a browser SSE subscription
POST/api/v1/audiences/{id}/recalibrateReplace stored grounding with refreshed authoritative research; deepen researches the dimensions still missing or assumed plus up to 8 topicsrecalibrate_audience
GET/api/v1/audiences/{id}/recalibrations/{operationId}status, result, errorget_audience (calibration.operation)
POST/api/v1/audiences/{id}/regenerate-imagesRegenerate Audience member images with optional limits/dry runmanage_audience with action: "regenerate_images"
POST/api/v1/audiences/source-importImport 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-briefReview a grounded Audience draft, then create only the accepted snapshotcreate_audience_from_brief; app-only submit_audience_review reuses this workflow
GET/api/v1/audiences/from-brief/jobs/{jobId}Read an asynchronous Audience operationResume create_audience_from_brief with the returned operation ID
GET/api/v1/audiences/from-brief/jobs/{jobId}/progressRead owned Audience review, creation and training progressget_audience_creation_progress / render_audience_review
POST/api/v1/audiences/from-brief/segmentation-previewReview respondent variables with a 256 KiB JSON request limit; private responses, safe failures and role-based defaultspreview_audience_dataset_segmentation
POST/api/v1/audiences/allocation-previewNon-mutating deterministic cohort-allocation previewcreate_audience_from_brief cohort-allocation workflow
POST/api/v1/audiences/{id}/exportStart or return a branded Audience brief exportexport_audience
GET/api/v1/audiences/{id}/export-statusPoll an asynchronous Audience exportexport_audience
GET/api/v1/audiences/{id}/export-downloadDownload a completed Audience exportexport_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.

MethodPathPurposeMCP equivalent
POST/api/v1/audiences/{id}/validationsStart 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 202validate_audience
GET/api/v1/audiences/{id}/validationsList validations newest first with overall validity, included validations, responses, and ready Mindsget_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 failureget_audience_validation with batchId
GET/api/v1/audiences/{id}/validations/{validationId}Read one survey's scoring with every KPI and questionSummarized per survey by get_audience_validation
POST/api/v1/audiences/{id}/validations/batches/{batchId}/cancelStop a validation while canCancel is truevalidate_audience with action: "cancel"
GET/api/v1/audiences/validation-benchmarks?audienceId={id}Preview the surveys that would be used and how they fitvalidate_audience finds fitting surveys itself

Audience Formations

A Formation is a persisted segmentation of one Audience into defined subgroups.

MethodPathPurposeMCP equivalent
GET/api/v1/audiences/{id}/formationsList visible shared/personal Formations with private, non-cacheable responses; unexpected lookup/seeding/storage failures return 500list_formations or manage_formation with action: "list"
POST/api/v1/audiences/{id}/formationsCreate and compute a Formationmanage_formation with action: "create"
POST/api/v1/audiences/{id}/formations/previewGenerate a non-persisted segmentation hypothesismanage_formation with action: "preview"
GET/api/v1/audiences/{id}/formations/{formationId}Read one Formationmanage_formation with action: "get"
DELETE/api/v1/audiences/{id}/formations/{formationId}Delete a confirmed Formationmanage_formation with action: "delete"
POST/api/v1/audiences/{id}/formations/{formationId}/recomputeRecompute member assignmentsmanage_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

MethodPathPurposeMCP equivalent
GET/api/v1/studiesList Studieslist_studies
POST/api/v1/studiesCreate a Study from existing Audiences or inline audienceConfigscreate_study
GET/api/v1/studies/{studyId}Read Study composition and historyget_study_status or manage_study with action: "get"
DELETE/api/v1/studies/{studyId}Delete a confirmed Studymanage_study with action: "delete"
POST/api/v1/studies/{studyId}/askSubmit one direct question; supports SSE and queued modesask_study
GET/api/v1/studies/{studyId}/analyticsCompute scale, categorical, and qualitative analyticsget_study_analytics
POST/api/v1/studies/{studyId}/invitationsInvite Study collaborators without exposing invitation tokensmanage_study with action: "invite"
POST/api/v1/studies/{studyId}/exportStart an export in a supported formatexport_study
GET/api/v1/studies/{studyId}/export-statusPoll export statusexport_study / get_study_status
GET/api/v1/studies/{studyId}/export-downloadDownload a completed exportexport_study returns an artifact or link
POST/api/v1/studies/{studyId}/heatmaps/{messageId}/exportStart or return a website-heatmap ZIP exportexport_heatmap
GET/api/v1/studies/{studyId}/heatmaps/{messageId}/export-statusPoll a website-heatmap ZIP exportexport_heatmap
GET/api/v1/studies/{studyId}/heatmaps/{messageId}/export-downloadDownload a completed website-heatmap ZIPexport_heatmap returns a signed URL
GET/api/v1/studies/{studyId}/summaryRead the persisted flexible semantic summaryget_study_summary
POST/api/v1/studies/{studyId}/summaryGenerate or refresh the semantic summaryget_study_summary with refresh: true
PUT/api/v1/studies/{studyId}/sharingEnable or disable the public Study linkmanage_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.

MethodPathPurposeMCP equivalent
POST/api/v1/studies/{studyId}/research-plans/previewCreate or revise a versioned research-plan draftplan_study_questions
POST/api/v1/studies/{studyId}/research-runsConfirm and run the exact reviewed plan revisionrun_study_questions
GET/api/v1/studies/{studyId}/research-runs/{runId}Poll Study progress, methods, artifacts, and calculationsget_study_run
POST/api/v1/studies/{studyId}/runsStart a durable direct Study runask_study for direct questions or run_study_questions for planned research
GET/api/v1/studies/{studyId}/runsList durable runs for a Studyget_study_status / get_study_run
GET/api/v1/runs/{runId}Read durable run statusget_study_status / get_study_run
GET/api/v1/runs/{runId}/eventsRead ordered run events using after and limit cursorsMCP status tools return durable progress
POST/api/v1/runs/{runId}/cancelCancel a running durable jobNo dedicated curated MCP tool
GET/api/v1/model-connectionsPage active team model connections and verified capability flags; pass pagination.nextCursor as cursorlist_model_connections
GET/api/v1/research-methodsList versioned methods, execution support, requirements, and fallbackslist_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.

MethodPathPurposeMCP equivalent
GET/api/v1/study-templatesList personal and team-shared templateslist_study_templates
GET/api/v1/study-templates/{id}Read a visible template and its revisionlist_study_templates
POST/api/v1/study-templatesSave a template; preserve requestId for retriesmanage_study_template (save)
PATCH/api/v1/study-templates/{id}Update an owned template using expectedRevisionmanage_study_template (update)
DELETE/api/v1/study-templates/{id}Delete an owned templatemanage_study_template (delete)
POST/api/v1/study-templates/{id}/useCreate an independent app-editable draft using expectedRevision and requestId; retries return the existing draftmanage_study_template (use)

Durable Study drafts

These endpoints persist the same resumable planner state used by the first-party Study sidebar.

MethodPathPurposeMCP equivalent
GET/api/v1/study-draftsList owned resumable draftslist_study_drafts
POST/api/v1/study-draftsCreate a durable draftsave_study_draft
GET/api/v1/study-drafts/{id}Read one complete draftlist_study_drafts with draftId
PATCH/api/v1/study-drafts/{id}Revise a draft using optimistic concurrencysave_study_draft with draftId and expectedRevision
DELETE/api/v1/study-drafts/{id}Delete a confirmed draftmanage_study_draft with action: "delete"
POST/api/v1/study-drafts/{id}/consumeMark a precise revision consumed and optionally attach it to a Studymanage_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):

FieldContract
checkpointBaseThe complete checkpoint the editor observed before its edit: { name, mode, currentStep, payload }. Keep this base unchanged on retries.
checkpointIdA 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

MethodPathPurposeMCP equivalent
POST/api/v1/chatsCreate a stateful single-Mind, multi-Mind, or Audience-backed chatmanage_chat with action: "create"
POST/api/v1/chats/{chatId}/messagesAppend a user/system message and receive the next responsemanage_chat with action: "send_message"
DELETE/api/v1/chats/{chatId}Delete a confirmed chat and its persisted historymanage_chat with action: "delete"

For a one-off Mind request without server-managed history, use the stateless completion endpoint instead.

Choosing the next reference

Stripe billing for agents

MethodPathAPI / MCP
GET/api/v1/billing/catalogRead current subscription prices, response-credit packs and eligibility; get_billing_catalog
POST/api/v1/billing/checkoutStart hosted checkout; buyer completes consent and payment; start_billing_checkout
POST/api/v1/billing/invoices/{invoiceId}/payNegotiate 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:

MethodResourceMeaning
POST/checkout_sessionsCreate 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}/completeRead confirmation state with {}
POST/checkout_sessions/{id}/cancelExpire 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.

FieldCustom purchase contract
priceIdCurrent responseCredits.customTopUp.priceId from the catalog
amountMinorPositive integer budget in cents; at least customTopUp.unitAmount
billingCountryCountry used to read the catalog for a new workspace
Idempotency-KeyOne 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.