{
"openapi": "3.1.2",
"info": {
"title": "Media2URL Developer Platform REST API",
"version": "1.0.0",
"description": "Official REST API for Media2URL external developers and authenticated automation clients. Provides direct Cloudflare R2 presigned file uploads with temporary-to-final object promotion, transactional quota reservations, asset management, version history, duplicate detection, and remote URL imports.",
"contact": {
"name": "Media2URL Developer Platform",
"url": "https://media2url.com/contact",
"email": "[email protected]"
},
"license": {
"name": "Proprietary",
"url": "https://media2url.com/terms"
}
},
"servers": [
{
"url": "https://api.media2url.com/v1",
"description": "Production API v1"
}
],
"security": [
{
"BearerAuth": []
}
],
"paths": {
"/usage": {
"get": {
"operationId": "getUsage",
"summary": "Retrieve Account & API Usage",
"description": "Returns authoritative usage metrics for storage, bandwidth, and monthly upload counts.",
"security": [
{
"BearerAuth": [
"usage:read"
]
}
],
"responses": {
"200": {
"description": "Authoritative usage metrics",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UsageResponse"
}
}
}
},
"401": {
"$ref": "#/components/responses/Unauthorized"
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"429": {
"$ref": "#/components/responses/RateLimited"
}
}
}
},
"/uploads/presign": {
"post": {
"operationId": "presignUpload",
"summary": "Request Direct R2 Upload URL",
"description": "Validates file metadata against account quotas, atomically reserves storage capacity, and generates a short-lived presigned PUT URL targeting a temporary R2 key.",
"security": [
{
"BearerAuth": [
"uploads:write"
]
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PresignUploadRequest"
}
}
}
},
"responses": {
"201": {
"description": "Temporary upload URL generated",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PresignUploadResponse"
}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"401": {
"$ref": "#/components/responses/Unauthorized"
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"429": {
"$ref": "#/components/responses/RateLimited"
}
}
}
},
"/uploads/finalize": {
"post": {
"operationId": "finalizeUpload",
"summary": "Finalize Upload & Promote Asset",
"description": "Atomically consumes the upload session, validates temporary R2 object size, content type, magic bytes, and blocked fingerprints, promotes the validated bytes into a non-presigned final key, commits quota, and returns the canonical asset links.",
"security": [
{
"BearerAuth": [
"uploads:write"
]
}
],
"parameters": [
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"schema": {
"type": "string",
"maxLength": 128
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/FinalizeUploadRequest"
}
}
}
},
"responses": {
"201": {
"description": "Asset created and promoted",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AssetResource"
}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"401": {
"$ref": "#/components/responses/Unauthorized"
},
"403": {
"$ref": "#/components/responses/Forbidden"
},
"404": {
"$ref": "#/components/responses/NotFound"
},
"409": {
"$ref": "#/components/responses/Conflict"
},
"410": {
"$ref": "#/components/responses/Gone"
},
"429": {
"$ref": "#/components/responses/RateLimited"
}
}
}
},
"/uploads/check-duplicate": {
"post": {
"operationId": "checkDuplicate",
"summary": "Check for Duplicate Asset",
"description": "Searches within the authenticated account's scope for an existing asset matching the given SHA-256 checksum and optional byte size.",
"security": [
{
"BearerAuth": [
"assets:read"
]
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CheckDuplicateRequest"
}
}
}
},
"responses": {
"200": {
"description": "Duplicate detection result",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CheckDuplicateResponse"
}
}
}
},
"400": {
"$ref": "#/components/responses/BadRequest"
},
"401": {
"$ref": "#/components/responses/Unauthorized"
}
}
}
},
"/assets": {
"get": {
"operationId": "listAssets",
"summary": "List Assets",
"description": "Returns a cursor-paginated list of assets owned by the authenticated account.",
"security": [
{
"BearerAuth": [
"assets:read"
]
}
],
"parameters": [
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"default": 20,
"maximum": 100
}
},
{
"name": "cursor"
}
]
}
}
},
"_note": "Response truncated for documentation purposes"
}
curl --location --request GET 'https://zylalabs.com/api/14137/media2url+cloud+media+ingestion+api/34981/check+api+and+edge+storage+health' --header 'Authorization: Bearer YOUR_API_KEY'
Después de registrarte, a cada desarrollador se le asigna una clave de acceso a la API personal, una combinación única de letras y dígitos proporcionada para acceder a nuestro endpoint de la API. Para autenticarte con el Media2URL Nube de Ingesta de Medios API simplemente incluye tu token de portador en el encabezado de Autorización.
| Encabezado | Descripción |
|---|---|
Autorización
|
Requerido
Debería ser Bearer access_key. Consulta "Tu Clave de Acceso a la API" arriba cuando estés suscrito.
|
Sin compromiso a largo plazo. Mejora, reduce o cancela en cualquier momento. La Prueba Gratuita incluye hasta 50 solicitudes.
Media2URL es una API REST de alta rendimiento para la ingesta de medios de desarrollador y generación de enlaces permanentes de CDN en el borde para imágenes, video, audio, PDF y archivos
Cada punto final devuelve datos JSON. Por ejemplo, el punto final "Comprobar estado de salud de la API y de Edge Storage" proporciona el estado operativo y las especificaciones de la API, mientras que el punto final "Listar activos multimedia alojados" devuelve una lista paginada de archivos multimedia, incluidos sus ID, nombres de archivo, tipos MIME, tamaños y URL públicas
Los campos clave incluyen "id" (identificador de archivo) "nombre de archivo" (nombre del archivo) "mimeType" (tipo de archivo) "sizeBytes" (tamaño del archivo en bytes) y "publicUrl" (enlace CDN permanente) Estos campos ayudan a identificar y acceder a los activos multimedia de manera efectiva
Los parámetros varían según el punto final. Por ejemplo, el punto final "List Hosted Media Assets" admite parámetros de paginación como "cursor" para navegar a través de los resultados. El punto final "Initialize Presigned R2 Media Upload" puede requerir metadatos del archivo como el tipo de archivo y el tamaño para generar URLs de carga
Los datos de respuesta están estructurados en formato JSON que típicamente contiene un campo de estado "ok" que indica éxito seguido de campos de datos relevantes Por ejemplo el punto final "Obtener metadatos de medios" devuelve metadatos sobre un archivo específico incluyendo su ID nombre de archivo tipo MIME y URL pública
Los datos provienen de las cargas de usuarios a la plataforma Media2URL Cada activo multimedia se procesa y almacena en Cloudflare R2 asegurando acceso y gestión fiables La API mantiene la precisión de los datos a través de verificaciones automatizadas durante los procesos de carga y recuperación
Los casos de uso típicos incluyen la gestión de activos multimedia para sitios web la generación de enlaces CDN para una entrega rápida de contenido y la integración de cargas multimedia en aplicaciones Los desarrolladores pueden automatizar el manejo de medios y garantizar un acceso eficiente a varios tipos de archivos
Los usuarios pueden utilizar los datos devueltos integrándolos en sus aplicaciones para mostrar contenido multimedia gestionar activos o crear enlaces para compartir Por ejemplo el campo "publicUrl" se puede utilizar para incrustar imágenes o videos directamente en páginas web o aplicaciones
Al manejar resultados parciales o vacíos, verifica el campo "nextCursor" en las respuestas paginadas. Si es nulo, no hay más resultados. Implementa lógica para gestionar respuestas vacías de manera elegantes, como mostrar un mensaje que indique que no hay activos multimedia disponibles