upapi-io Media API
The Media API from upapi-io — 4 operation(s) for media.
The Media API from upapi-io — 4 operation(s) for media.
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/upapi-io:upapi-io-media-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: 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