oruk-ai Affect API

The Affect API from oruk-ai — 2 operation(s) for affect.

Operations 2

GET /v1/audio/resonance-2/health Check the Resonance emotion sidecar #
POST /v1/audio/resonance-2 Classify emotion and delivery with Resonance-2 #

Specifications

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/oruk-ai:oruk-ai-affect-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

oruk-ai-affect-api-openapi.yml Raw ↑
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.