oruk-ai Oruk Zero API

The OrukZero API from oruk-ai — 2 operation(s) for orukzero.

Operations 2

POST /v1/audio/synthetic-speech Detect human or AI speech with OrukZero #
GET /v1/models/orukzero/access Check OrukZero account access #

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-orukzero-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-orukzero-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: oruk Speech Oruk Zero 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: OrukZero
paths:
  /v1/audio/synthetic-speech:
    post:
      tags:
      - OrukZero
      summary: Detect human or AI speech with OrukZero
      description: English audio, 1–60 seconds, WAV/FLAC/OGG/MP3, at most 12 MiB. Uncalibrated scores with a fixed 0.5 threshold. A valid Oruk API key belonging to an active account is required; no paid subscription is needed; OrukZero is included at no extra charge and consumes no credits or plan minutes. Long-audio aggregation is experimental.
      operationId: detect_v1_audio_synthetic_speech_post
      requestBody:
        content:
          multipart/form-data:
            schema:
              properties:
                file:
                  type: string
                  format: binary
                model:
                  type: string
                  enum:
                  - orukzero
                  default: orukzero
              additionalProperties: false
              type: object
              required:
              - file
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SyntheticSpeechDetectionResponse'
        '400':
          description: Unsupported model
        '401':
          description: Invalid, revoked or expired API key, or unavailable account access
        '408':
          description: Audio upload timed out
        '413':
          description: Audio exceeds 12 MiB
        '415':
          description: Expected multipart/form-data
        '422':
          description: Invalid audio or multipart upload
        '429':
          description: Per-key rate limit or capacity limit; honor Retry-After
          headers:
            Retry-After:
              description: Seconds to wait before retrying
              schema:
                type: integer
                minimum: 1
        '503':
          description: Account verification or detector temporarily unavailable
      security:
      - bearerAuth: []
  /v1/models/orukzero/access:
    get:
      summary: Check OrukZero account access
      description: Read-only account access check. A valid API key on an active Oruk account is required. Free and trial accounts are eligible; no paid subscription is needed. No credits or plan minutes are consumed.
      tags:
      - OrukZero
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Active account; OrukZero is included at no extra charge
          content:
            application/json:
              schema:
                type: object
                required:
                - model
                - customer
                - entitlement
                - billed
                - consumes_credits
                - consumes_plan_minutes
                properties:
                  model:
                    const: orukzero
                  customer:
                    type: object
                    required:
                    - key_id
                    - organization_id
                    - plan
                    properties:
                      key_id:
                        type: string
                      organization_id:
                        type: string
                      plan:
                        type: string
                  entitlement:
                    const: included_with_account
                  billed:
                    const: false
                  consumes_credits:
                    const: false
                  consumes_plan_minutes:
                    const: false
        '401':
          description: Invalid, revoked or expired API key, or unavailable account access
        '503':
          description: Account service unavailable
      operationId: getV1ModelsOrukzeroAccess
      x-operation-id-source: derived
components:
  schemas:
    SyntheticSpeechDetectionResponse:
      properties:
        object:
          type: string
          const: synthetic_speech.result
          title: Object
        model:
          type: string
          const: orukzero
          title: Model
        model_revision:
          type: string
          const: 2026-10-05-adapt-216
          title: Model Revision
        duration:
          type: number
          maximum: 60
          minimum: 1
          title: Duration
        prediction:
          type: string
          enum:
          - human
          - synthetic
          title: Prediction
        synthetic_score:
          type: number
          maximum: 1
          minimum: 0
          title: Synthetic Score
        threshold:
          type: number
          const: 0.5
          title: Threshold
        score_type:
          type: string
          const: uncalibrated_sigmoid
          title: Score Type
        aggregation:
          type: string
          const: coverage_weighted_mean_logit
          title: Aggregation
        segments:
          items:
            $ref: '#/components/schemas/SyntheticSpeechSegment'
          type: array
          maxItems: 10
          minItems: 1
          title: Segments
        warnings:
          items:
            type: string
          type: array
          maxItems: 8
          title: Warnings
        id:
          type: string
          title: Id
        usage:
          additionalProperties: true
          type: object
          title: Usage
      additionalProperties: false
      type: object
      required:
      - object
      - model
      - model_revision
      - duration
      - prediction
      - synthetic_score
      - threshold
      - score_type
      - aggregation
      - segments
      - warnings
      - id
      - usage
      title: DetectionResponse
    SyntheticSpeechSegment:
      properties:
        start:
          type: number
          maximum: 60
          minimum: 0
          title: Start
        end:
          type: number
          maximum: 60
          exclusiveMinimum: 0
          title: End
        synthetic_score:
          type: number
          maximum: 1
          minimum: 0
          title: Synthetic Score
        prediction:
          type: string
          enum:
          - human
          - synthetic
          title: Prediction
      additionalProperties: false
      type: object
      required:
      - start
      - end
      - synthetic_score
      - prediction
      title: Segment
  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.