Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: Minds Public Uploads API
version: v1
description: 'OpenAPI 3.1.0 spec for the Minds public API (https://getminds.ai/api/v1 / https://api.getminds.ai/v1). Generate a typed TypeScript client by running an OpenAPI generator (e.g. `openapi-typescript`) against `/_openapi.json`. Auth: send `Authorization: Bearer minds_…_key`; create keys in Settings → API Keys.'
servers:
- url: https://api.getminds.ai
description: Production (api subdomain)
- url: https://getminds.ai
description: Production (apex)
security:
- ApiKeyAuth: []
tags:
- name: Uploads
paths:
/api/v1/uploads/import:
post:
responses:
'200':
description: Every file imported.
content:
application/json:
schema:
type: object
required:
- data
properties:
data:
type: object
required:
- files
properties:
files:
type: array
items:
type: object
required:
- name
- path
- url
- mimeType
properties:
id:
type: string
name:
type: string
mimeType:
type: string
path:
type: string
description: Storage path, chat/{userId}/...
url:
type: string
description: Durable /api/uploads/chat/... URL.
'400':
description: Invalid request, or a file could not be downloaded, returned a non-200 status, or is empty.
'401':
description: Authentication required.
'403':
description: A referenced Minds upload does not belong to the caller.
'413':
description: A file exceeds the 100 MB limit.
operationId: importUploads
summary: Import files by URL into durable account storage
description: 'Copies up to 20 files from public HTTP(S) URLs (for example the short-lived download link of a chat host) into the upload storage of the caller and returns durable Minds upload URLs to pass wherever a file URL is accepted (Audience briefs, Study drafts, validations, Mind knowledge, source imports). Downloads are SSRF-protected and limited to 100 MB per file; private-network URLs are refused. A file already in that storage is confirmed rather than copied. Imports are content-addressed, so retrying the same file returns the same path. All files are imported or none is reported: the first failing file is named by its one-based position ("Study asset N ...").'
tags:
- Uploads
security:
- ApiKeyAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- files
additionalProperties: false
properties:
files:
type: array
minItems: 1
maxItems: 20
items:
type: object
required:
- url
additionalProperties: false
properties:
url:
type: string
description: Public HTTP(S) URL, or a Minds upload URL/path the caller owns.
name:
type: string
description: File name to store; derived from the URL when omitted.
type:
type: string
description: MIME type when known; otherwise taken from the download.
id:
type: string
description: Caller identifier echoed back on the imported file.
parameters: []
components:
securitySchemes:
ApiKeyAuth:
type: http
scheme: bearer
bearerFormat: API Key
description: 'Personal API key. Format: `Bearer minds_…_key`. Create one at https://getminds.ai/settings/api-keys.'