upapi-io Media API

The Media API from upapi-io — 4 operation(s) for media.

Operations 4

POST /audio-transcribe-result.get Get Transcription Result #
POST /audio-transcribe.post Transcribe Audio or Video #
POST /nasa-apod.get Get NASA Astronomy Picture of the Day #
POST /pokeapi-pokemon.get Get Pokemon #

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/upapi-io:upapi-io-media-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

upapi-io-media-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: up Media API
  description: 'Browser-powered API marketplace. 103 of 103 APIs included (capped at 449 for RapidAPI compatibility).


    Billing: a call spends WEIGHTED UNITS against your plan''s monthly quota — not a flat one call = one unit. A light HTTP relay costs 1 unit; heavy work costs more, up to 25 (search-engine result pages 25, headless-browser renders and page scrapes 20, residential-proxy social reads 15, LLM completions 10, datacenter social/media reads 4). Every operation declares its own price as `x-upapi-unit-weight`, so a workload can be costed before it is run. Quota state rides on every response in the `RateLimit` / `RateLimit-Policy` headers.'
  version: 1.0.0
servers:
- url: https://api.upapi.io
security:
- ApiKeyAuth: []
tags:
- name: Media
paths:
  /audio-transcribe-result.get:
    post:
      operationId: audio_transcribe_result_get
      summary: Get Transcription Result
      description: Fetch the result of a transcription started by audio-transcribe, using its jobId. Returns the finished transcript with time-coded segments, or the current progress while it is still running. Job ids are kept for 24 hours.
      tags:
      - Media
      x-upapi-unit-weight: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Input
              required:
              - jobId
              properties:
                jobId:
                  type: string
                  title: Jobid
                  maxLength: 200
                  minLength: 1
                  description: The jobId returned by audio-transcribe (e.g. upapi-3f9c1d2e4b5a…).
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                title: Transcript
                required:
                - status
                - jobId
                properties:
                  text:
                    title: Text
                    default: null
                    description: Full transcript; null until completed
                    type:
                    - string
                    - 'null'
                  jobId:
                    type: string
                    title: Jobid
                    description: Pass this to audio-transcribe-result.get to poll
                  status:
                    type: string
                    title: Status
                    description: completed once the transcript is ready; processing while it is still running
                  language:
                    title: Language
                    default: null
                    description: Detected (or forced) language code; null until completed
                    type:
                    - string
                    - 'null'
                  progress:
                    type: integer
                    title: Progress
                    default: 0
                    description: Progress percentage, 0-100
                  segments:
                    title: Segments
                    default: null
                    description: Time-coded segments; null until completed
                    type:
                    - array
                    - 'null'
                    items:
                      type: object
                      title: Segment
                      required:
                      - start
                      - end
                      - text
                      properties:
                        end:
                          type: number
                          title: End
                          description: Segment end, seconds from the beginning
                        text:
                          type: string
                          title: Text
                        start:
                          type: number
                          title: Start
                          description: Segment start, seconds from the beginning
                  durationSec:
                    title: Durationsec
                    default: null
                    description: Audio duration in seconds; null until completed
                    type:
                    - number
                    - 'null'
                  pollAfterSec:
                    title: Pollaftersec
                    default: null
                    description: Seconds to wait before polling again; null once completed
                    type:
                    - integer
                    - 'null'
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'FORBIDDEN — the key is valid but not allowed to make this call. Three causes: the key belongs to a different organization than the one in the path; the key was minted without the scope this endpoint requires (the message names the missing scope); or the operation is not included in the organization''s plan — a plan gate, which no retry clears. Upgrade the plan or mint a key with the right scope.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Unknown marketplace API
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Missing required field(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Two DIFFERENT conditions share this status, told apart by `error.code`. `RATE_LIMITED` — the per-minute burst window is full; it refills on its own, so back off and retry (`Retry-After` is seconds, typically 60) and nothing was spent. `QUOTA_EXCEEDED` — a BUDGET is gone: the monthly weighted-unit quota, a trial''s unit cap, or the plan''s hosted-function compute seconds. Retrying on a short backoff will never succeed; `Retry-After` points at the real refill (the next UTC month, or the end of the trial), and upgrading the plan is usually the intended fix.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: Upstream execution error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Data store temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: Request timed out
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /audio-transcribe.post:
    post:
      operationId: audio_transcribe_post
      summary: Transcribe Audio or Video
      description: Transcribe speech from an audio or video URL, with time-coded segments and automatic language detection. Short clips come back in the same call; longer ones return a jobId to poll with audio-transcribe-result. GPU Whisper, up to two hours per file.
      tags:
      - Media
      x-upapi-unit-weight: 10
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Input
              required:
              - url
              properties:
                url:
                  type: string
                  title: Url
                  format: uri
                  maxLength: 2048
                  minLength: 1
                  description: Public URL of the audio or video to transcribe (e.g. https://example.com/interview.mp3). Up to 2 hours long.
                  x-upapi-upload: true
                language:
                  title: Language
                  default: null
                  description: Spoken-language hint as an ISO code (e.g. en). Omit to auto-detect.
                  type:
                  - string
                  - 'null'
                  maxLength: 16
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                title: Transcript
                required:
                - status
                - jobId
                properties:
                  text:
                    title: Text
                    default: null
                    description: Full transcript; null until completed
                    type:
                    - string
                    - 'null'
                  jobId:
                    type: string
                    title: Jobid
                    description: Pass this to audio-transcribe-result.get to poll
                  status:
                    type: string
                    title: Status
                    description: completed once the transcript is ready; processing while it is still running
                  language:
                    title: Language
                    default: null
                    description: Detected (or forced) language code; null until completed
                    type:
                    - string
                    - 'null'
                  progress:
                    type: integer
                    title: Progress
                    default: 0
                    description: Progress percentage, 0-100
                  segments:
                    title: Segments
                    default: null
                    description: Time-coded segments; null until completed
                    type:
                    - array
                    - 'null'
                    items:
                      type: object
                      title: Segment
                      required:
                      - start
                      - end
                      - text
                      properties:
                        end:
                          type: number
                          title: End
                          description: Segment end, seconds from the beginning
                        text:
                          type: string
                          title: Text
                        start:
                          type: number
                          title: Start
                          description: Segment start, seconds from the beginning
                  durationSec:
                    title: Durationsec
                    default: null
                    description: Audio duration in seconds; null until completed
                    type:
                    - number
                    - 'null'
                  pollAfterSec:
                    title: Pollaftersec
                    default: null
                    description: Seconds to wait before polling again; null once completed
                    type:
                    - integer
                    - 'null'
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'FORBIDDEN — the key is valid but not allowed to make this call. Three causes: the key belongs to a different organization than the one in the path; the key was minted without the scope this endpoint requires (the message names the missing scope); or the operation is not included in the organization''s plan — a plan gate, which no retry clears. Upgrade the plan or mint a key with the right scope.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Unknown marketplace API
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Missing required field(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Two DIFFERENT conditions share this status, told apart by `error.code`. `RATE_LIMITED` — the per-minute burst window is full; it refills on its own, so back off and retry (`Retry-After` is seconds, typically 60) and nothing was spent. `QUOTA_EXCEEDED` — a BUDGET is gone: the monthly weighted-unit quota, a trial''s unit cap, or the plan''s hosted-function compute seconds. Retrying on a short backoff will never succeed; `Retry-After` points at the real refill (the next UTC month, or the end of the trial), and upgrading the plan is usually the intended fix.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: Upstream execution error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Data store temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: Request timed out
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /nasa-apod.get:
    post:
      operationId: nasa_apod_get
      summary: Get NASA Astronomy Picture of the Day
      description: Fetch NASA's Astronomy Picture of the Day (APOD). Today's by default, or any date from 1995-06-16 onwards. Returns title, explanation, media URL (+ HD variant), copyright. Uses DEMO_KEY by default; set NASA_API_KEY env for higher rate limits.
      tags:
      - Media
      x-upapi-unit-weight: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Input
              properties:
                hd:
                  type: boolean
                  title: Hd
                  default: true
                  description: Include high-resolution URL when available
                date:
                  title: Date
                  default: null
                  description: YYYY-MM-DD; omit for today. Must be on or after 1995-06-16.
                  type:
                  - string
                  - 'null'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                title: Output
                required:
                - date
                - title
                - explanation
                - mediaType
                - url
                - hdurl
                - copyright
                - fetchedAt
                properties:
                  url:
                    type: string
                    title: Url
                  date:
                    type: string
                    title: Date
                  hdurl:
                    title: Hdurl
                    type:
                    - string
                    - 'null'
                  title:
                    type: string
                    title: Title
                  copyright:
                    title: Copyright
                    type:
                    - string
                    - 'null'
                  fetchedAt:
                    type: string
                    title: Fetchedat
                  mediaType:
                    type: string
                    title: Mediatype
                  explanation:
                    type: string
                    title: Explanation
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'FORBIDDEN — the key is valid but not allowed to make this call. Three causes: the key belongs to a different organization than the one in the path; the key was minted without the scope this endpoint requires (the message names the missing scope); or the operation is not included in the organization''s plan — a plan gate, which no retry clears. Upgrade the plan or mint a key with the right scope.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Unknown marketplace API
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Missing required field(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Two DIFFERENT conditions share this status, told apart by `error.code`. `RATE_LIMITED` — the per-minute burst window is full; it refills on its own, so back off and retry (`Retry-After` is seconds, typically 60) and nothing was spent. `QUOTA_EXCEEDED` — a BUDGET is gone: the monthly weighted-unit quota, a trial''s unit cap, or the plan''s hosted-function compute seconds. Retrying on a short backoff will never succeed; `Retry-After` points at the real refill (the next UTC month, or the end of the trial), and upgrading the plan is usually the intended fix.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: Upstream execution error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Data store temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: Request timed out
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /pokeapi-pokemon.get:
    post:
      operationId: pokeapi_pokemon_get
      summary: Get Pokemon
      description: Look up a Pokemon by name or national dex id. Returns types, abilities, base stats (HP/attack/defense/sp.atk/sp.def/speed), height/weight, and artwork URLs.
      tags:
      - Media
      x-upapi-unit-weight: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Input
              required:
              - name
              properties:
                name:
                  type: string
                  title: Name
                  maxLength: 50
                  minLength: 1
                  description: Pokemon name (e.g. pikachu) or numeric dex id (as string)
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                title: Output
                required:
                - id
                - name
                - height
                - weight
                - types
                - abilities
                - stats
                - baseExperience
                - spriteFront
                - officialArtwork
                - fetchedAt
                properties:
                  id:
                    type: integer
                    title: Id
                  name:
                    type: string
                    title: Name
                  stats:
                    type: array
                    items:
                      type: object
                      title: Stat
                      required:
                      - name
                      - baseStat
                      properties:
                        name:
                          type: string
                          title: Name
                        baseStat:
                          type: integer
                          title: Basestat
                    title: Stats
                  types:
                    type: array
                    items:
                      type: string
                    title: Types
                  height:
                    type: integer
                    title: Height
                  weight:
                    type: integer
                    title: Weight
                  abilities:
                    type: array
                    items:
                      type: string
                    title: Abilities
                  fetchedAt:
                    type: string
                    title: Fetchedat
                  spriteFront:
                    title: Spritefront
                    type:
                    - string
                    - 'null'
                  baseExperience:
                    title: Baseexperience
                    type:
                    - integer
                    - 'null'
                  officialArtwork:
                    title: Officialartwork
                    type:
                    - string
                    - 'null'
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: 'FORBIDDEN — the key is valid but not allowed to make this call. Three causes: the key belongs to a different organization than the one in the path; the key was minted without the scope this endpoint requires (the message names the missing scope); or the operation is not included in the organization''s plan — a plan gate, which no retry clears. Upgrade the plan or mint a key with the right scope.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Unknown marketplace API
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Missing required field(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: 'Two DIFFERENT conditions share this status, told apart by `error.code`. `RATE_LIMITED` — the per-minute burst window is full; it refills on its own, so back off and retry (`Retry-After` is seconds, typically 60) and nothing was spent. `QUOTA_EXCEEDED` — a BUDGET is gone: the monthly weighted-unit quota, a trial''s unit cap, or the plan''s hosted-function compute seconds. Retrying on a short backoff will never succeed; `Retry-After` points at the real refill (the next UTC month, or the end of the trial), and upgrading the plan is usually the intended fix.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: Upstream execution error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Data store temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: Request timed out
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          properties:
            code:
              type: string
            message:
              type: string
            functionId:
              type: string
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key