oruk-ai Affect API
The Affect API from oruk-ai — 2 operation(s) for affect.
The Affect API from oruk-ai — 2 operation(s) for affect.
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/oruk-ai:oruk-ai-affect-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: oruk Speech Affect API
version: 1.0.0
description: HTTP file API for English transcription, emotion detection, speaking style, speech analysis, and speaking-proficiency scoring. Realtime is a separate multilingual WebSocket preview. Subscription models use plan minutes. Orukeet is an English preview included in every subscription at $0.00045 per audio minute ($0.027 per audio hour); optional tasks add their published rates. Orukeet usage.cost_microusd is usage valued at task rates, not an additional charge when covered by the monthly allowance. Only excess usage is billed. Existing credit-only accounts retain their credit balance. See https://oruk.ai/docs#orukeet and https://oruk.ai/pricing. Spectra-2 (oruk-spectra-2) adds 25-language transcription and 31 clip-level emotion/style scores through the main analysis and transcription routes. Uses shared speech understanding plan minutes. See https://oruk.ai/docs#spectra-2.
servers:
- url: https://speech-api.oruk.ai
description: Production
security:
- bearerAuth: []
tags:
- name: Affect
paths:
/v1/audio/resonance-2/health:
get:
tags:
- Affect
summary: Check the Resonance emotion sidecar
operationId: health_v1_audio_resonance_2_health_get
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
security: []
/v1/audio/resonance-2:
post:
tags:
- Affect
summary: Classify emotion and delivery with Resonance-2
description: 'Returns six signed opposite axes, 19 unipolar scores, all 31 category scores, and calibrated selected labels. Opposite labels cannot both be selected. Send 0.1–120 seconds of audio, at most 30 MiB. Longer files use nonoverlapping 20-second windows and average logits before calibration. Digital silence abstains with zero scores; there is no forced top label. Use regime=f1 (default) or regime=precision as a query parameter. Same shared plan minutes and affect tariff as Resonance 1: $0.0100 per audio minute for legacy metered accounts, one-second minimum. Requires approved organization access; existing accounts retain access. Request at /v1/models/oruk-resonance-2/access.'
operationId: classify_v1_audio_resonance_2_post
security:
- HTTPBearer: []
parameters:
- name: regime
in: query
required: false
schema:
enum:
- f1
- precision
type: string
default: f1
title: Regime
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/Resonance2SidecarResponse'
'403':
description: 'model_access_required: organization approval required. No inference or billing occurs.'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
required:
- file
additionalProperties: false
properties:
file:
type: string
format: binary
model:
type: string
enum:
- oruk-resonance-2
- resonance-2
components:
schemas:
SelectedLabel:
properties:
label:
type: string
title: Label
score:
type: number
maximum: 1
minimum: 0
title: Score
additionalProperties: false
type: object
required:
- label
- score
title: SelectedLabel
Resonance2SidecarUsage:
properties:
audio_seconds:
type: number
title: Audio Seconds
description: Measured audio duration
billable_seconds:
type: number
title: Billable Seconds
description: Duration used for billing; one-second minimum
rate_per_minute_usd:
type: string
title: Rate Per Minute Usd
estimated_cost_usd:
type: string
title: Estimated Cost Usd
pricing_version:
type: string
title: Pricing Version
billing_unit:
type: string
enum:
- audio_second
- request
title: Billing Unit
default: audio_second
rate_per_request_usd:
anyOf:
- type: string
- type: 'null'
title: Rate Per Request Usd
description: Flat price per billable check
rate_per_hour_usd:
anyOf:
- type: string
- type: 'null'
title: Rate Per Hour Usd
type: object
required:
- audio_seconds
- billable_seconds
- rate_per_minute_usd
- estimated_cost_usd
- pricing_version
title: Resonance2SidecarUsage
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
input:
title: Input
ctx:
type: object
title: Context
type: object
required:
- loc
- msg
- type
title: ValidationError
Resonance2SidecarResponse:
properties:
model:
type: string
const: oruk-resonance-2
title: Model
default: oruk-resonance-2
model_revision:
type: string
title: Model Revision
default: bca79fa889fbf0d8a5b23d41c1dc6303bab43576dcdbc2036980fbfd9b6af9b2
enum:
- b34570175184c22066f9d3b595d52ef62281adb9a1d51c332d3874b8ff66832b
- bca79fa889fbf0d8a5b23d41c1dc6303bab43576dcdbc2036980fbfd9b6af9b2
calibration_revision:
type: string
const: ccd5948dc3a3cbfd628b158ccf9f95ac582da38c2e8f242128c1e465615e1c07
title: Calibration Revision
default: ccd5948dc3a3cbfd628b158ccf9f95ac582da38c2e8f242128c1e465615e1c07
duration:
type: number
maximum: 120
minimum: 0.1
title: Duration
window_count:
type: integer
maximum: 6
minimum: 1
title: Window Count
aggregation:
type: string
const: mean_window_logits
title: Aggregation
default: mean_window_logits
scores:
additionalProperties:
type: number
maximum: 1
minimum: 0
type: object
title: Scores
axes:
additionalProperties:
type: number
maximum: 1
minimum: -1
type: object
title: Axes
unipolar:
additionalProperties:
type: number
maximum: 1
minimum: 0
type: object
title: Unipolar
labels:
items:
$ref: '#/components/schemas/SelectedLabel'
type: array
maxItems: 31
title: Labels
regime:
type: string
enum:
- f1
- precision
title: Regime
calibrated:
type: boolean
const: true
title: Calibrated
abstained:
type: boolean
title: Abstained
abstention_reason:
anyOf:
- type: string
const: digital_silence
- type: 'null'
title: Abstention Reason
inference_ms:
type: number
minimum: 0
title: Inference Ms
id:
type: string
title: Id
object:
type: string
const: speech.affect.result
title: Object
default: speech.affect.result
task:
type: string
const: affect
title: Task
default: affect
usage:
$ref: '#/components/schemas/Resonance2SidecarUsage'
additionalProperties: false
type: object
required:
- duration
- window_count
- scores
- axes
- unipolar
- labels
- regime
- calibrated
- abstained
- abstention_reason
- inference_ms
- id
- usage
title: Resonance2SidecarResponse
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: oruk API key
HTTPBearer:
type: http
scheme: bearer
x-orukeet:
model: oruk-orukeet
billing_basis: subscription
usd_per_audio_minute: '0.00045'
optional_tasks:
emotion_detection: '0.0080'
diarize: '0.0040'
max_audio_seconds: 60
max_multipart_bytes: 4194304
websocket_url: wss://orukeet-direct.oruk.ai/v1/audio/transcriptions/stream
docs: https://oruk.ai/docs#orukeet
x-resonance-2:
id: oruk-resonance-2
availability: preview
endpoint: /v1/audio/resonance-2
documentation: https://oruk.ai/docs#resonance-2
schema: https://oruk.ai/resonance-2.openapi.json
pricing: Same shared plan minutes and legacy affect rate as Resonance 1.
x-spectra-2:
model: oruk-spectra-2
docs: https://oruk.ai/docs#spectra-2
lifecycle: Stable
supported_tasks:
- transcription
- analysis
transcription_languages:
- bg
- hr
- cs
- da
- nl
- en
- et
- fi
- fr
- de
- el
- hu
- it
- lv
- lt
- mt
- pl
- pt
- ro
- ru
- sk
- sl
- es
- sv
- uk
language_details:
- code: bg
name: Bulgarian
- code: hr
name: Croatian
- code: cs
name: Czech
- code: da
name: Danish
- code: nl
name: Dutch
- code: en
name: English
- code: et
name: Estonian
- code: fi
name: Finnish
- code: fr
name: French
- code: de
name: German
- code: el
name: Greek
- code: hu
name: Hungarian
- code: it
name: Italian
- code: lv
name: Latvian
- code: lt
name: Lithuanian
- code: mt
name: Maltese
- code: pl
name: Polish
- code: pt
name: Portuguese
- code: ro
name: Romanian
- code: ru
name: Russian
- code: sk
name: Slovak
- code: sl
name: Slovenian
- code: es
name: Spanish
- code: sv
name: Swedish
- code: uk
name: Ukrainian
language_detection: automatic
min_audio_seconds: 0.045
max_audio_seconds: 60
max_file_bytes: 4194304
max_multipart_bytes: 4210688
sample_rate: 16000
channels: 1
formats:
- wav
- flac
- pcm16
- float32le
score_scope: clip
emotion_labels:
- happy
- excited
- hopeful
- sad
- worried
- angry
- frustrated
- disappointed
- scared
- disgusted
- surprised
- embarrassed
- proud
- relieved
- neutral
style_labels:
- energetic
- passionate
- irritated
- warm
- playful
- sarcastic
- deadpan
- hesitant
- confident
- sincere
- skeptical
- tired
- formal
- casual
- impatient
- distracted
subscription_allowance: shared_audio_minutes
minimum_billable_seconds: 1
reference_usd_per_audio_minute:
transcription: '0.0080'
analysis: '0.0120'
streaming:
url: wss://speech-api.oruk.ai/v1/audio/spectra-2/stream
authentication: Authorization bearer header from server clients
input: mono 16 kHz PCM16 little-endian binary frames
max_frame_bytes: 32768
max_audio_seconds: 60
finalization: explicit finish message
output: one final Spectra2Result after finish
provisional_results: false
prepared_connection:
session_endpoint: /v1/audio/sessions
connection_endpoint: /v1/audio/stream-sessions
lifetime_seconds: 30
server_only: true
recording_limit: Use max_audio_seconds from ready and finish before expires_at_ms.