Wispr AI LLM API
The LLM API from Wispr AI — 20 operation(s) for llm.
The LLM API from Wispr AI — 20 operation(s) for llm.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/wispr-ai-llm-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Wispr Backend Analytics LLM API
description: Wispr Backend API
version: 0.5.2
servers:
- url: https://api.wisprflow.ai
description: Base URL declared by the provider in apis.yml (roadmap#122).
tags:
- name: LLM
paths:
/llm/api:
post:
tags:
- LLM
summary: Flow Api
operationId: flow_api
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Body_flow_api_llm_api_post'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/asr:
post:
tags:
- LLM
summary: Asr
operationId: asr
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Body_asr_llm_asr_post'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/formatting:
post:
tags:
- LLM
summary: Formatting
operationId: formatting
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FormattingRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/completion:
post:
tags:
- LLM
summary: Completion
operationId: completion
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CompletionRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/ocr:
post:
tags:
- LLM
summary: Ocr
operationId: ocr
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/OCRRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/extract_asr_words:
post:
tags:
- LLM
summary: Extract Asr Words
operationId: extract_asr_words
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ExtractASRWordsRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/format_non_english:
post:
tags:
- LLM
summary: Format Non English Endpoint
operationId: format_non_english_endpoint
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/NonEnglishFormattingRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/asr_audio_chunks:
post:
tags:
- LLM
summary: Asr Audio Chunks
operationId: asr_audio_chunks
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AsrAudioChunksRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/command_mode_route:
post:
tags:
- LLM
summary: Command Mode Route
operationId: command_mode_route
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CommandModeRouteRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/command_mode:
post:
tags:
- LLM
summary: Command Mode
operationId: command_mode
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CommandModeRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/instruct_mode:
post:
tags:
- LLM
summary: Instruct Mode
operationId: instruct_mode
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/InstructModeRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/InstructModeResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/polish_text:
post:
tags:
- LLM
summary: Polish Text
operationId: polish_text
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PolishTextRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/PolishTextResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/extract_edited_words:
post:
tags:
- LLM
summary: Extract Edited Words
description: 'Extract proper nouns, technical terms, or domain-specific terms that were edited
between the original pasted text and the edited text.'
operationId: extract_edited_words
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ExtractEditedWordsRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/ExtractEditedWordsResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/classify_intent:
post:
tags:
- LLM
summary: Classify Intent
description: 'Classify voice input into one of the provided routes.
Returns the matched route plus optional per-route structured data the classifier'
operationId: classify_intent
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ClassifyIntentRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/ClassifyIntentResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/detect_formality:
post:
tags:
- LLM
summary: Detect Formality
description: 'Classify text messages into one of three formality levels based on
capitalization, punctuation and other use of informal language.
Levels: very_casual, casual, formal'
operationId: detect_formality
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DetectFormalityRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/DetectFormalityResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/check_sensibility:
post:
tags:
- LLM
summary: Check Sensibility
description: 'Check if a transcribed message makes sense in context.
Returns a score from 0.0 (nonsensical) to 1.0 (makes perfect sense).
Used to warn users before they send potentially embarrassing messages.'
operationId: check_sensibility
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CheckSensibilityRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/CheckSensibilityResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/chat:
post:
tags:
- LLM
summary: Flow Response
operationId: flow_response
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/FlowResponseRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/flow_state_2025:
get:
tags:
- LLM
summary: Fetch Flow State 2025
operationId: fetch_flow_state_2025
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/FlowState2025Response'
security:
- ApiKeyHeaderPatched: []
post:
tags:
- LLM
summary: Create Flow State 2025
operationId: create_flow_state_2025
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/HistoryRowsRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/FlowState2025Response'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- ApiKeyHeaderPatched: []
/llm/voice_profile/latest:
get:
tags:
- LLM
summary: Fetch Latest Voice Profile
operationId: fetch_latest_voice_profile
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/VoiceProfileResponse'
security:
- ApiKeyHeaderPatched: []
/llm/voice_profile:
get:
tags:
- LLM
summary: Fetch Voice Profile
operationId: fetch_voice_profile
security:
- ApiKeyHeaderPatched: []
parameters:
- name: word_count_milestone
in: query
required: false
schema:
anyOf:
- enum:
- 2000
- 12000
- 37000
- 87000
- 162000
- 262000
- 362000
- 462000
- 562000
- 662000
type: integer
- type: 'null'
title: Word Count Milestone
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/VoiceProfileResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
post:
tags:
- LLM
summary: Create Voice Profile
operationId: create_voice_profile
security:
- ApiKeyHeaderPatched: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/VoiceProfileRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/VoiceProfileResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
components:
schemas:
HistoryRow:
properties:
formatted_text:
type: string
title: Formatted Text
timestamp:
type: string
format: date-time
title: Timestamp
app_name:
type: string
title: App Name
detected_language:
anyOf:
- type: string
- type: 'null'
title: Detected Language
type: object
required:
- formatted_text
- timestamp
- app_name
title: HistoryRow
Body_flow_api_llm_api_post:
properties:
audio:
type: string
title: Audio
description: Base64 encoded audio
language:
anyOf:
- items:
type: string
type: array
- type: string
- type: 'null'
title: Language
description: List of languages the user speaks
context:
anyOf:
- $ref: '#/components/schemas/Context'
- type: 'null'
description: Full context surrounding the dictation
properties:
anyOf:
- $ref: '#/components/schemas/APIProperties'
- type: 'null'
description: Additional properties
transcript_id:
type: string
title: Transcript Id
description: Transcript Entity UUID
type: object
required:
- audio
title: Body_flow_api_llm_api_post
CheckSensibilityRequest:
properties:
transcript:
type: string
title: Transcript
description: The transcribed and formatted text to check
before_text:
type: string
title: Before Text
description: Text before the cursor/insertion point
default: ''
after_text:
type: string
title: After Text
description: Text after the cursor/insertion point
default: ''
app_context:
anyOf:
- type: string
- type: 'null'
title: App Context
description: Optional app context (e.g., app name, URL)
type: object
required:
- transcript
title: CheckSensibilityRequest
FlowStateProcessingStatus:
type: string
enum:
- not_started
- processing
- complete
- failed
title: FlowStateProcessingStatus
WritingSample:
properties:
text:
type: string
title: Text
prompt_name:
anyOf:
- type: string
- type: 'null'
title: Prompt Name
type: object
required:
- text
title: WritingSample
description: A single writing sample provided by the user for voice/style matching.
OpenRouterProviderConfig:
properties:
kind:
type: string
enum:
- openrouter
title: Kind
default: openrouter
model:
type: string
title: Model
type: object
required:
- model
title: OpenRouterProviderConfig
description: Provider config for an OpenRouter-backed model.
RouteDefinition:
properties:
name:
type: string
maxLength: 64
title: Name
description: Route name, e.g. 'instruct', 'dictation'
route_prompt:
type: string
title: Route Prompt
description: Description of when this route applies
type: object
required:
- name
- route_prompt
title: RouteDefinition
FlowResponseRequest:
properties:
workflow:
$ref: '#/components/schemas/FlowWorkFlows'
messages:
items:
additionalProperties:
type: string
propertyNames:
enum:
- speaker
- message
type: object
type: array
title: Messages
type: object
required:
- workflow
- messages
title: FlowResponseRequest
PolishTextRequest:
properties:
selected_text:
type: string
title: Selected Text
instructions:
$ref: '#/components/schemas/PolishInstructions'
writing_samples:
anyOf:
- additionalProperties:
$ref: '#/components/schemas/WritingSample'
type: object
- type: 'null'
title: Writing Samples
custom_prompt:
anyOf:
- $ref: '#/components/schemas/PolishPrompt'
- type: 'null'
provider_config:
anyOf:
- $ref: '#/components/schemas/TransformProviderConfig'
- type: 'null'
user_voice_preference:
anyOf:
- type: string
- type: 'null'
title: User Voice Preference
type: object
required:
- selected_text
- instructions
title: PolishTextRequest
PolishStatus:
type: string
enum:
- succeeded
- long_text
- short_text
- timeout
- error
- cancelled
- no_changes
- not_editable
- no_text
- no_instructions
title: PolishStatus
description: Outcome of a Polish text-refinement request.
Context:
properties:
app:
anyOf:
- $ref: '#/components/schemas/App'
- type: 'null'
description: Information on the app the user is trying to paste in
ax_context:
items:
type: string
type: array
title: Ax Context
description: List of words from accessibility context
variable_names:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Variable Names
description: Variable names extracted from the app context. These get backticked
file_names:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: File Names
description: File names extracted from the app context, usually VS Code file names.
ocr_context:
items:
type: string
type: array
title: Ocr Context
description: List of names extracted from user screen content
dictionary_context:
items:
type: string
type: array
title: Dictionary Context
description: List of names in the user's dictionary
dictionary_replacements:
additionalProperties:
type: string
type: object
title: Dictionary Replacements
description: Mapping for replacing phrases/snippets in the user's dictionary
dictionary_snippets:
additionalProperties:
items:
type: string
type: array
type: object
title: Dictionary Snippets
description: Mapping of stripped snippet triggers to full triggers
user_identifier:
anyOf:
- type: string
- type: 'null'
title: User Identifier
description: Identifier of the user within the foreground app (e.g., X username, email, etc.)
user_first_name:
anyOf:
- type: string
- type: 'null'
title: User First Name
description: First name of the user making the request
user_last_name:
anyOf:
- type: string
- type: 'null'
title: User Last Name
description: Last name of the user making the request
textbox_contents:
anyOf:
- $ref: '#/components/schemas/TextboxContents'
- type: 'null'
description: Selected and surrounding text in the textbox that is being dictated into
screenshot:
anyOf:
- type: string
contentMediaType: application/octet-stream
- type: 'null'
title: Screenshot
description: Screenshot of the user's screen at time of dictation
content_text:
anyOf:
- type: string
- type: 'null'
title: Content Text
description: Text content of the foreground app at time of dictation
content_html:
anyOf:
- type: string
- type: 'null'
title: Content Html
description: HTML content of the foreground app at time of dictation
conversation:
anyOf:
- $ref: '#/components/schemas/Conversation'
- type: 'null'
description: Conversation history for a dictation
session_dictation_apps:
items:
type: string
type: array
title: Session Dictation Apps
description: List of all applications (names, bundle IDs, URLs) used for dictation in this session
type: object
title: Context
Conversation:
properties:
id:
type: string
title: Id
description: Identifier of the conversation
participants:
items:
type: string
type: array
title: Participants
description: List of participants in the conversation
messages:
items:
$ref: '#/components/schemas/ChatMessage'
type: array
title: Messages
description: List of messages in the conversation
type: object
required:
- id
title: Conversation
ChatRole:
type: string
enum:
- user
- human
- assistant
title: ChatRole
ClassifyIntentContext:
properties:
asr_text:
type: string
title: Asr Text
description: Raw ASR transcription text
app_name:
type: string
title: App Name
description: Name of the foreground app
default: ''
app_url:
type: string
title: App Url
description: URL within the foreground app
default: ''
before_text:
type: string
title: Before Text
description: Text before the cursor
default: ''
selected_text:
type: string
title: Selected Text
description: Currently selected text
default: ''
after_text:
type: string
title: After Text
description: Text after the cursor
default: ''
ax_context:
type: string
title: Ax Context
description: First 1000 chars of accessibility context
default: ''
session_history:
items:
$ref: '#/components/schemas/InstructSessionHistoryMessage'
type: array
maxItems: 40
title: Session History
description: Prior instruct-chat turns for multi-turn follow-ups (e.g. clarifications after a settings confirmation).
type: object
required:
- asr_text
title: ClassifyIntentContext
ClassifyIntentRouteData:
properties:
transform:
anyOf:
- $ref: '#/components/schemas/TransformRouteData'
- type: 'null'
description: Populated when `route == 'transform'`.
type: object
title: ClassifyIntentRouteData
description: 'Per-route structured outputs from the classifier.
Only the field for the chosen route is populated; all other fields stay null.
Adding a new route''s structured output = adding a new optional field here.'
FormattingRequest:
properties:
content:
type: string
title: Content
description: Text content to format
model_name:
type: string
title: Model Name
description: Name of the model to use for formatting
type: object
required:
- content
- model_name
title: FormattingRequest
FlowState2025Response:
properties:
user_id:
type: string
title: User Id
processing_status:
$ref: '#/components/schemas/FlowStateProcessingStatus'
total_words:
anyOf:
- type: integer
- type: 'null'
title: Total Words
total_words_percentile:
anyOf:
- type: number
- type: 'null'
title: Total Words Percentile
last_active:
anyOf:
- type: string
format: date-time
- type: 'null'
title: Last Active
total_dictations_desktop:
anyOf:
- type: integer
- type: 'null'
title: Total Dictations Desktop
total_dictations_mobile:
anyOf:
- type: integer
- type: 'null'
title: Total Dictations Mobile
wpm_desktop:
anyOf:
- type: number
- type: 'null'
title: Wpm Desktop
wpm_mobile:
anyOf:
- type: number
- type: 'null'
title: Wpm Mobile
longest_streak_days:
anyOf:
- type: integer
- type: 'null'
title: Longest Streak Days
top_app:
anyOf:
- type: string
- type: 'null'
title: Top App
top_app_day_of_week:
anyOf:
- type: string
- type: 'null'
title: Top App Day Of Week
top_app_hour_of_day:
anyOf:
- type: integer
- type: 'null'
title: Top App Hour Of Day
top_app_category:
anyOf:
- type: string
- type: 'null'
title: Top App Category
secondary_app_category:
anyOf:
- type: string
- type: 'null'
title: Secondary App Category
signature_phrase:
anyOf:
- type: string
- type: 'null'
title: Signature Phrase
signature_phrase_app:
anyOf:
- type: string
- type: 'null'
title: Signature Phrase App
most_used_phrase:
anyOf:
- type: string
- type: 'null'
title: Most Used Phrase
dictation_strength:
anyOf:
- type: string
- type: 'null'
title: Dictation Strength
alter_ego:
anyOf:
- type: string
- type: 'null'
title: Alter Ego
alter_ego_description:
anyOf:
- type: string
- type: 'null'
title: Alter Ego Description
avg_session_duration_desktop:
anyOf:
- type: number
- type: 'null'
title: Avg Session Duration Desktop
avg_session_duration_mobile:
anyOf:
- type: number
- type: 'null'
title: Avg Session Duration Mobile
goals:
anyOf:
- items:
type: string
type: array
- type: 'null'
title: Goals
type: object
required:
- user_id
- processing_status
title: FlowState2025Response
PolishInstructions:
properties:
default:
additionalProperties:
type: boolean
type: object
title: Default
default: {}
custom:
additionalProperties:
type: boolean
type: object
title: Custom
default: {}
type: object
title: PolishInstructions
description: Saved toggle rules for Polish transforms (built-in defaults + custom).
BasetenAudioPackets:
properties:
packets:
items:
type: string
type: array
title: Packets
description: List of base64 encoded audio packets
volumes:
items:
type: number
type: array
title: Volumes
description: List of volume levels for each packet
packet_duration:
type: number
title: Packet Duration
description: Duration of each packet in seconds
audio_encoding:
type: string
title: Audio Encoding
description: Audio encoding format (e.g. opus)
byte_encoding:
type: string
title: Byte Encoding
descrip
# --- truncated at 32 KB (62 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/wispr-ai/refs/heads/main/openapi/wispr-ai-llm-api-openapi.yml