Cut.ProDocs

Errores

Formato del error, qué pide cada status HTTP de tu parte y el catálogo completo de códigos.

Todo error, en toda ruta y en todo status, tiene el mismo cuerpo:

{ "code": "INSUFFICIENT_CREDITS", "extra": { "credits_needed": 121, "current_balance": 40 } }
CampoTipoDescripción
codestringIdentificador estable, en mayúsculas, de un conjunto cerrado. Haz un switch sobre él.
extraobjectSolo aparece cuando hay algo sobre lo que actuar: qué faltó, qué campo falló, qué ids fueron rechazados.

No existe mensaje en texto. El servidor no conoce el idioma de tu usuario, y el texto no se trata en un switch: traduce el code en tu interfaz.

Status HTTP

StatusSignificaQué hacer
400El cuerpo de la solicitud está malCorrígelo. Repetirlo igual da el mismo error.
401Clave ausente, revocada o vencidaRevisa el header X-Api-Key.
402Créditos insuficientesLee extra.credits_needed y recarga.
403La fuente o la cuenta está fuera de alcanceNo hay nada que repetir.
404No existe en este workspaceRevisa el id y el workspace.
409Existe, pero su estado actual rechaza la operaciónEspera y vuelve a intentar.
410Existió y expiróEnvía de nuevo o renderiza de nuevo.
422Enlace válido, video inutilizableUsa otra fuente.
429Límite de solicitudesEspera los segundos de Retry-After.
5xxFalla nuestraReintenta con espera creciente.

Validación

Un cuerpo o query fuera del schema responde VALIDATION_ERROR, y extra.errors lista los campos que fallaron, con punto entre los niveles:

400 Bad Request
{ "code": "VALIDATION_ERROR", "extra": { "errors": ["video_id", "timeframe.end"] } }

Ruta inexistente

Una ruta que no existe responde 404 NOT_FOUND, con extra.openapi apuntando a la especificación y extra.docs al llms.txt de esta documentación. Así un agente que adivinó la ruta encuentra el camino correcto.

Tratando errores

const response = await fetch(`${API}/clips`, { method: "POST", headers, body });
if (!response.ok) {
	const { code, extra } = await response.json();
	switch (code) {
		case "INSUFFICIENT_CREDITS":
			return askForTopUp(extra.credits_needed);
		case "RATE_LIMIT_EXCEEDED":
		case "SERVICE_UNAVAILABLE":
			return retryAfter(Number(response.headers.get("Retry-After")));
		default:
			throw new Error(code);
	}
}

Error de job

Un job que falla después de ser aceptado no devuelve un status HTTP de error: la ruta de lectura responde 200 con status: "failed" y el motivo en error_code. En el clipping, por ejemplo, DOWNLOAD_PRIVATE_VIDEO indica que el video quedó privado después del análisis. Ve Clips.

Catálogo de códigos

Todos los códigos que devuelve la API, generados a partir de la especificación en cada publicación de esta documentación. Para el significado de un código en una ruta, abre la ruta en la referencia.

CodeStatusDevuelto por
CONNECTION_INVALID400DELETE /posts/{id}/items/{itemId}
DELETE_FAILED400DELETE /posts/{id}/items/{itemId}
DELETE_LIMIT_REACHED400DELETE /posts/{id}/items/{itemId}
DELETE_NOT_SUPPORTED400DELETE /posts/{id}/items/{itemId}
FILE_TOO_LARGE400POST /videos/uploadPOST /transcriptions/uploadPOST /personas/sources/upload
IMAGES_INVALID400POST /generations
INVALID_CHANNEL_URL400POST /monitorsPATCH /monitors/{id}POST /monitors/{id}/startPOST /monitors/{id}/stop
INVALID_CONNECTIONS400POST /postsPATCH /posts/{id}
INVALID_DURATION_RANGE400POST /monitorsPATCH /monitors/{id}POST /monitors/{id}/startPOST /monitors/{id}/stop
INVALID_FILE_TYPE400POST /videos/uploadPOST /transcriptions/uploadPOST /personas/sources/upload
INVALID_IMAGE400POST /personas/facesPOST /personas/{id}/shots/photosPOST /generations/images
INVALID_METADATA400POST /posts
INVALID_OBSERVING_TYPE400GET /monitors/{id}/broadcastsGET /monitors/{id}/broadcasts/{broadcastId}/clipsPOST /monitors/{id}/broadcasts/{broadcastId}/clips/apply_templatePOST /monitors/{id}/broadcasts/{broadcastId}/clips/{clipId}/render
INVALID_SCHEDULED_AT400POST /postsPATCH /posts/{id}
INVALID_STRATEGY_OPTIONS400POST /clipsPOST /clips/{videoId}/submissions/{submissionId}/retry
INVALID_TRANSLATE_LANGUAGE400POST /clipsPOST /clips/{videoId}/submissions/{submissionId}/retry
ITEM_NOT_EDITABLE400PATCH /posts/{id}
ITEM_NOT_FAILED400POST /posts/{id}/items/{itemId}/retry
ITEM_NOT_REMOVABLE400DELETE /posts/{id}/items/{itemId}
ITEMS_EMPTY400PATCH /posts/{id}
MEDIA_METADATA_REQUIRED400POST /transcriptions
MEDIA_TOO_LONG400POST /transcriptions
MISSING_WORKSPACE_ID400cualquier ruta
MODE_UNSUPPORTED400POST /generations
MODEL_UNAVAILABLE400POST /generationsPOST /generations/improve
NO_PENDING_ITEMS400POST /posts/{id}/publish
NO_RENDERS_SELECTED400POST /renders/bulk-download
NOTHING_TO_UPDATE400PATCH /posts/{id}
PERMISSION_MISSING400DELETE /posts/{id}/items/{itemId}
PLATFORM_UNAVAILABLE400POST /posts
PRODUCT_URL_INVALID400POST /personas/{id}/shots/product
PUBLISHED_ID_MISSING400DELETE /posts/{id}/items/{itemId}
RATIO_INVALID400POST /generations
RESOLUTION_INVALID400POST /generations
SCENE_ACTION_UNSUPPORTED400POST /personas/{id}/shots
SCHEDULE_LOCKED400PATCH /posts/{id}
SECONDS_INVALID400POST /generations
STYLE_REQUIRED400GET /personas/swap/quotePOST /personas/{id}/videos
STYLE_UNSUPPORTED400GET /personas/swap/quotePOST /personas/{id}/videos
TARGET_UNSUPPORTED400POST /personas/{id}/videos
TIMEFRAME_OUT_OF_BOUNDS400POST /clipsPOST /clips/{videoId}/submissions/{submissionId}/retry
TIMEFRAME_TOO_SHORT400POST /clipsPOST /clips/{videoId}/submissions/{submissionId}/retry
TOO_MANY_RENDERS400POST /renders/bulk-download
VALIDATION_ERROR400cualquier ruta
VIDEO_DURATION_OUT_OF_RANGE400GET /personas/swap/quotePOST /personas/{id}/videos
VIDEO_TOO_LONG400POST /videos/upload/completePOST /clipsPOST /clips/infoPOST /clips/{videoId}/submissions/{submissionId}/retry
VIDEO_TOO_SHORT400POST /videos/upload/complete
VIDEO_UNSUPPORTED400GET /personas/swap/quotePOST /personas/{id}/videos
VOICE_INVALID400POST /generations
WORKSPACE_NOT_AUTHORIZED400cualquier ruta
UNAUTHORIZED401cualquier ruta
CREDIT_CHARGE_FAILED402POST /clipsPOST /clips/{videoId}/submissions/{submissionId}/retry
INSUFFICIENT_CREDITS402POST /clipsPOST /clips/{videoId}/submissions/{submissionId}/retryPOST /monitorsPATCH /monitors/{id}POST /monitors/{id}/startPOST /monitors/{id}/stopPOST /transcriptionsPOST /personasPOST /personas/{id}/regeneratePOST /personas/{id}/videosPOST /personas/{id}/shotsPOST /generationsPOST /generations/improve
ACCESS_DENIED403POST /clips/info
ACCOUNT_BLOCKED403cualquier ruta
AGE_RESTRICTED403POST /clips/info
CLIP_FORBIDDEN403DELETE /clips/{videoId}
CLIP_RESULT_FORBIDDEN403DELETE /clips/{videoId}/submissions/{submissionId}/clips/{clipId}
DAILY_LIMIT_EXCEEDED403POST /posts
FORBIDDEN403cualquier ruta
LIVE_CLIPS_NOT_AVAILABLE403POST /monitorsPATCH /monitors/{id}POST /monitors/{id}/startPOST /monitors/{id}/stop
PLATFORM_NOT_SUPPORTED403POST /clipsPOST /clips/infoPOST /clips/{videoId}/submissions/{submissionId}/retryPOST /monitorsPATCH /monitors/{id}POST /monitors/{id}/startPOST /monitors/{id}/stop
POST_FORBIDDEN403DELETE /posts/{id}/items/{itemId}
PRIVATE_VIDEO403POST /clips/info
REGION_BLOCKED403POST /clips/info
RENDER_FORBIDDEN403DELETE /renders/{renderId}
SUBMISSION_FORBIDDEN403DELETE /clips/{videoId}/submissions/{submissionId}
WORKSPACE_FORBIDDEN403cualquier ruta
CLIP_NOT_FOUND404DELETE /clips/{videoId}GET /clips/{videoId}/submissionsDELETE /clips/{videoId}/submissions/{submissionId}DELETE /clips/{videoId}/submissions/{submissionId}/clips/{clipId}GET /clips/{videoId}/submissions/{submissionId}/clips/{clipId}/subtitlesPOST /monitors/{id}/broadcasts/{broadcastId}/clips/{clipId}/render
CLIP_RESULT_NOT_FOUND404DELETE /clips/{videoId}/submissions/{submissionId}/clips/{clipId}GET /clips/{videoId}/submissions/{submissionId}/clips/{clipId}/subtitlesPOST /clips/{videoId}/submissions/{submissionId}/clips/{clipId}/render
CONNECTION_NOT_FOUND404, 400GET /connections/{id}DELETE /posts/{id}/items/{itemId}
CREATOR_NOT_FOUND404POST /monitorsPATCH /monitors/{id}POST /monitors/{id}/startPOST /monitors/{id}/stop
EDIT_NOT_FOUND404POST /monitors/{id}/broadcasts/{broadcastId}/clips/{clipId}/renderPOST /renders
EDITS_NOT_FOUND404POST /postsPATCH /posts/{id}
FACE_NOT_FOUND404POST /personas
FILE_NOT_FOUND404POST /videos/upload/multipart/completePOST /videos/upload/multipart/abortPOST /videos/upload/completePOST /personas/sources/upload/complete
GENERATION_NOT_FOUND404GET /generations/{id}DELETE /generations/{id}POST /generations/{id}/editPOST /generations/{id}/feedbackPOST /generations/{id}/refundGET /generations/{id}/download
IMAGE_NOT_FOUND404POST /generations
ITEM_NOT_FOUND404POST /posts/{id}/items/{itemId}/retryDELETE /posts/{id}/items/{itemId}
JOB_NOT_FOUND404GET /renders/bulk-download/{jobId}
MEDIA_NOT_FOUND404POST /transcriptionsGET /personas/swap/quotePOST /personas/{id}/videos
METADATA_UNAVAILABLE404POST /clips/info
MONITORING_NOT_FOUND404POST /monitorsGET /monitors/{id}PATCH /monitors/{id}DELETE /monitors/{id}POST /monitors/{id}/startPOST /monitors/{id}/stopGET /monitors/{id}/broadcastsGET /monitors/{id}/broadcasts/{broadcastId}/clipsPOST /monitors/{id}/broadcasts/{broadcastId}/clips/apply_templatePOST /monitors/{id}/broadcasts/{broadcastId}/clips/{clipId}/render
NO_SUBTITLES404GET /clips/{videoId}/submissions/{submissionId}/clips/{clipId}/subtitles
NO_VALID_RENDERS404POST /renders/bulk-download
NO_VIDEO_INFO404POST /clipsPOST /clips/{videoId}/submissions/{submissionId}/retry
NOT_FOUND404cualquier ruta
PERSONA_NOT_FOUND404POST /personas/presets/{presetId}POST /personasGET /personas/{id}DELETE /personas/{id}POST /personas/{id}/regeneratePOST /personas/{id}/versions/{versionId}/restorePOST /personas/{id}/versions/{versionId}/feedbackPOST /personas/{id}/savePOST /personas/{id}/videosPOST /personas/{id}/shots/productPOST /personas/{id}/shots
PHOTO_NOT_FOUND404POST /personas/{id}/shots
POST_NOT_FOUND404GET /posts/{id}PATCH /posts/{id}POST /posts/{id}/publishPOST /posts/{id}/items/{itemId}/retryDELETE /posts/{id}/items/{itemId}
PRESET_NOT_FOUND404POST /personas/presets/{presetId}PUT /personas/presets/{presetId}/favorite
RENDER_NOT_FOUND404GET /renders/{renderId}DELETE /renders/{renderId}GET /renders/{renderId}/download
SHOT_NOT_FOUND404GET /personas/{id}/shots/{shotId}
STRATEGY_NOT_FOUND404POST /clipsPOST /clips/{videoId}/submissions/{submissionId}/retryPOST /monitorsPATCH /monitors/{id}POST /monitors/{id}/startPOST /monitors/{id}/stop
STREAM_NOT_FOUND404GET /monitors/{id}/broadcasts/{broadcastId}/clips
SUBMISSION_NOT_FOUND404GET /clips/{videoId}/submissions/{submissionId}DELETE /clips/{videoId}/submissions/{submissionId}POST /clips/{videoId}/submissions/{submissionId}/retryPOST /clips/{videoId}/submissions/{submissionId}/apply_templateGET /clips/{videoId}/submissions/{submissionId}/clipsDELETE /clips/{videoId}/submissions/{submissionId}/clips/{clipId}GET /clips/{videoId}/submissions/{submissionId}/clips/{clipId}/subtitles
TEMPLATE_NOT_FOUND404POST /clipsPOST /clips/{videoId}/submissions/{submissionId}/retryPOST /clips/{videoId}/submissions/{submissionId}/apply_templatePOST /monitorsPATCH /monitors/{id}POST /monitors/{id}/startPOST /monitors/{id}/stopPOST /monitors/{id}/broadcasts/{broadcastId}/clips/apply_template
TRANSCRIPTION_NOT_FOUND404GET /transcriptions/{transcriptionId}DELETE /transcriptions/{transcriptionId}GET /transcriptions/{transcriptionId}/transcriptGET /transcriptions/{transcriptionId}/download
UNAVAILABLE404POST /clips/info
VERSION_NOT_FOUND404POST /personas/{id}/versions/{versionId}/restorePOST /personas/{id}/versions/{versionId}/feedbackPOST /personas/{id}/videosPOST /personas/{id}/shots
VIDEO_ID_NOT_FOUND404POST /clips/info
VIDEO_NOT_FOUND404GET /clips/{videoId}/submissions/{submissionId}POST /personas/{id}/videos/{videoId}/feedbackGET /personas/{id}/videos/{videoId}
WORKSPACE_NOT_FOUND404GET /workspace
STORAGE_LIMIT_EXCEEDED406POST /transcriptions/uploadPOST /personas/sources/uploadPOST /generations/images
CARD_LOCKED409POST /personas/{id}/regeneratePOST /personas/{id}/versions/{versionId}/restore
CARD_NOT_READY409POST /personas/{id}/save
DUPLICATE_POST409POST /posts
MEDIA_REFUNDED409POST /postsPATCH /posts/{id}
PRICE_CHANGED409POST /personas/{id}/videosPOST /personas/{id}/shotsPOST /generations
REFUND_AFTER_DOWNLOAD409POST /generations/{id}/refund
REFUND_AFTER_POST409POST /generations/{id}/refund
REFUND_ALREADY_REQUESTED409POST /generations/{id}/refund
REFUND_NOT_ALLOWED409POST /generations/{id}/refund
RENDER_ALREADY_IN_PROGRESS409POST /clips/{videoId}/submissions/{submissionId}/clips/{clipId}/renderPOST /monitors/{id}/broadcasts/{broadcastId}/clips/{clipId}/renderPOST /renders
SUBMISSION_NOT_FAILED409POST /clips/{videoId}/submissions/{submissionId}/retry
TRANSCRIPTION_NOT_READY409GET /transcriptions/{transcriptionId}/transcriptGET /transcriptions/{transcriptionId}/download
VIDEO_ALREADY_PROCESSING409POST /clipsPOST /clips/{videoId}/submissions/{submissionId}/retry
VIDEO_IN_PROGRESS409POST /personas/{id}/videos
JOB_EXPIRED410GET /renders/bulk-download/{jobId}
RECORDING_EXPIRED410GET /monitors/{id}/broadcasts/{broadcastId}/clipsPOST /monitors/{id}/broadcasts/{broadcastId}/clips/{clipId}/renderPOST /posts
RENDER_FILE_EXPIRED410GET /renders/{renderId}/download
SUBMISSION_EXPIRED410GET /clips/{videoId}/submissions/{submissionId}GET /clips/{videoId}/submissions/{submissionId}/clips
AUDIO_ONLY422POST /clips/info
CHANNEL_URL422POST /clips/info
INVALID_DIMENSIONS422POST /clips/info
INVALID_DURATION422POST /clips/info
INVALID_URL422POST /clips/info
LIVE_STREAM422POST /clips/info
MEDIA_UNREADABLE422POST /transcriptionsPOST /personas/sources/upload/complete
PLAYLIST_URL422POST /clips/info
PREMIUM_ONLY422POST /clips/info
PRODUCT_NOT_READABLE422POST /personas/{id}/shots/product
SHORTS_NOT_SUPPORTED422POST /clips/info
BATCH_ALREADY_RUNNING429POST /clips/{videoId}/submissions/{submissionId}/apply_templatePOST /monitors/{id}/broadcasts/{broadcastId}/clips/apply_template
PRODUCT_RATE_LIMITED429POST /personas/{id}/shots/product
RATE_LIMIT_EXCEEDED429POST /clips/infoPOST /monitors
TOO_MANY_PENDING_CLIPS429POST /clipsPOST /clips/{videoId}/submissions/{submissionId}/retry
TOO_MANY_RUNNING429POST /generations
CANCEL_FAILED500DELETE /renders/{renderId}
CREDIT_CHARGE_ERROR500POST /clipsPOST /clips/{videoId}/submissions/{submissionId}/retry
FAILED_TO_GET_VIDEO500POST /clips/info
INTERNAL_ERROR500POST /videos/upload/completePOST /personas/sources/upload/complete
INTERNAL_SERVER_ERROR500cualquier ruta
PRESIGN_FAILED500POST /videos/uploadPOST /transcriptions/uploadPOST /personas/sources/upload
PROCESSING_ERROR500POST /clipsPOST /clips/{videoId}/submissions/{submissionId}/retry
RENDER_FAILED500POST /clips/{videoId}/submissions/{submissionId}/clips/{clipId}/renderPOST /monitors/{id}/broadcasts/{broadcastId}/clips/{clipId}/renderPOST /renders
RENDER_SETUP_FAILED500POST /clips/{videoId}/submissions/{submissionId}/clips/{clipId}/render
SIGNED_URL_FAILED500GET /renders/{renderId}/download
UNKNOWN_ERROR500POST /clips/infoPOST /posts
AI_UNAVAILABLE502POST /generations/improve
MEDIA_UNAVAILABLE502GET /personas/catalogPOST /personas/presets/{presetId}GET /personas/swap/quotePOST /personas/{id}/videosPOST /personas/{id}/shotsPOST /generations
SERVICE_UNAVAILABLE503POST /clips/info

En esta página