curl -X GET "https://api.realoficial.com.br/api/v1/renders?limit=20&page=1" \
-H "Authorization: Bearer seu_token_aqui" \
-H "Content-Type: application/json"
{
"message": "Lista de renders obtida com sucesso.",
"data": {
"current_page": 1,
"data": [
{
"id": "01k6ij90yqtsyrzjb0hveqy9ef",
"short_id": "01k4ef56yqtsyrzjb0gveqy7cd",
"status": "done",
"download_url": "https://cdn-wasabi.realoficial.com.br/renders/01k6ij90yqtsyrzjb0hveqy9ef.mp4?v=20250124",
"render_hash": "a1b2c3d4e5f6...",
"storage_provider": "wasabi",
"created_at": "2025-01-24T11:00:00.000000Z",
"short": {
"id": "01k4ef56yqtsyrzjb0gveqy7cd",
"title": "Momento viral #1",
"start_time": 245.5,
"end_time": 305.2,
"thumbnail_url": "https://img.youtube.com/vi/abc123/maxresdefault.jpg",
"project": {
"id": "01k3ab12yqtsyrzjb0fveqy5zx",
"url": "https://www.youtube.com/watch?v=abc123"
},
"renders": [
{
"id": "01k6ij90yqtsyrzjb0hveqy9ef",
"created_at": "2025-01-24T11:00:00.000000Z"
}
]
},
"published_platforms": ["tiktok", "instagram"]
},
{
"id": "01k6ij91yqtsyrzjb0hveqy0gh",
"short_id": "01k4ef57yqtsyrzjb0gveqy8de",
"status": "processing",
"download_url": null,
"render_hash": "b2c3d4e5f6g7...",
"storage_provider": "wasabi",
"created_at": "2025-01-24T11:05:00.000000Z",
"short": {
"id": "01k4ef57yqtsyrzjb0gveqy8de",
"title": "Momento viral #2",
"start_time": 512.0,
"end_time": 571.5,
"thumbnail_url": "https://img.youtube.com/vi/abc123/maxresdefault.jpg",
"project": {
"id": "01k3ab12yqtsyrzjb0fveqy5zx",
"url": "https://www.youtube.com/watch?v=abc123"
}
},
"published_platforms": []
}
],
"first_page_url": "https://api.realoficial.com.br/api/v1/renders?page=1",
"from": 1,
"last_page": 5,
"per_page": 20,
"to": 20,
"total": 87
}
}
Renders
Listar Renders
Liste todas as renderizacoes do usuario
GET
/
renders
curl -X GET "https://api.realoficial.com.br/api/v1/renders?limit=20&page=1" \
-H "Authorization: Bearer seu_token_aqui" \
-H "Content-Type: application/json"
{
"message": "Lista de renders obtida com sucesso.",
"data": {
"current_page": 1,
"data": [
{
"id": "01k6ij90yqtsyrzjb0hveqy9ef",
"short_id": "01k4ef56yqtsyrzjb0gveqy7cd",
"status": "done",
"download_url": "https://cdn-wasabi.realoficial.com.br/renders/01k6ij90yqtsyrzjb0hveqy9ef.mp4?v=20250124",
"render_hash": "a1b2c3d4e5f6...",
"storage_provider": "wasabi",
"created_at": "2025-01-24T11:00:00.000000Z",
"short": {
"id": "01k4ef56yqtsyrzjb0gveqy7cd",
"title": "Momento viral #1",
"start_time": 245.5,
"end_time": 305.2,
"thumbnail_url": "https://img.youtube.com/vi/abc123/maxresdefault.jpg",
"project": {
"id": "01k3ab12yqtsyrzjb0fveqy5zx",
"url": "https://www.youtube.com/watch?v=abc123"
},
"renders": [
{
"id": "01k6ij90yqtsyrzjb0hveqy9ef",
"created_at": "2025-01-24T11:00:00.000000Z"
}
]
},
"published_platforms": ["tiktok", "instagram"]
},
{
"id": "01k6ij91yqtsyrzjb0hveqy0gh",
"short_id": "01k4ef57yqtsyrzjb0gveqy8de",
"status": "processing",
"download_url": null,
"render_hash": "b2c3d4e5f6g7...",
"storage_provider": "wasabi",
"created_at": "2025-01-24T11:05:00.000000Z",
"short": {
"id": "01k4ef57yqtsyrzjb0gveqy8de",
"title": "Momento viral #2",
"start_time": 512.0,
"end_time": 571.5,
"thumbnail_url": "https://img.youtube.com/vi/abc123/maxresdefault.jpg",
"project": {
"id": "01k3ab12yqtsyrzjb0fveqy5zx",
"url": "https://www.youtube.com/watch?v=abc123"
}
},
"published_platforms": []
}
],
"first_page_url": "https://api.realoficial.com.br/api/v1/renders?page=1",
"from": 1,
"last_page": 5,
"per_page": 20,
"to": 20,
"total": 87
}
}
Endpoint
GET https://api.realoficial.com.br/api/v1/renders
Este endpoint requer autenticacao via Bearer Token.
Query Parameters
Numero da pagina (padrao: 1)
Quantidade de itens por pagina (padrao: 20)
Filtrar por ID de projeto especifico
Otimiza resposta para listagem de videos prontos (apenas status
done)Resposta de Sucesso
Mensagem de confirmacao
Objeto paginado com os renders
Show Propriedades do render
Show Propriedades do render
ID unico da renderizacao (ULID)
ID do short renderizado
Status:
pending, processing, done, errorURL para download do video (quando status =
done)Hash unico da configuracao (para detectar alteracoes)
Provider de armazenamento:
r2 ou wasabiData de criacao (ISO 8601)
Plataformas onde o video ja foi publicado
curl -X GET "https://api.realoficial.com.br/api/v1/renders?limit=20&page=1" \
-H "Authorization: Bearer seu_token_aqui" \
-H "Content-Type: application/json"
{
"message": "Lista de renders obtida com sucesso.",
"data": {
"current_page": 1,
"data": [
{
"id": "01k6ij90yqtsyrzjb0hveqy9ef",
"short_id": "01k4ef56yqtsyrzjb0gveqy7cd",
"status": "done",
"download_url": "https://cdn-wasabi.realoficial.com.br/renders/01k6ij90yqtsyrzjb0hveqy9ef.mp4?v=20250124",
"render_hash": "a1b2c3d4e5f6...",
"storage_provider": "wasabi",
"created_at": "2025-01-24T11:00:00.000000Z",
"short": {
"id": "01k4ef56yqtsyrzjb0gveqy7cd",
"title": "Momento viral #1",
"start_time": 245.5,
"end_time": 305.2,
"thumbnail_url": "https://img.youtube.com/vi/abc123/maxresdefault.jpg",
"project": {
"id": "01k3ab12yqtsyrzjb0fveqy5zx",
"url": "https://www.youtube.com/watch?v=abc123"
},
"renders": [
{
"id": "01k6ij90yqtsyrzjb0hveqy9ef",
"created_at": "2025-01-24T11:00:00.000000Z"
}
]
},
"published_platforms": ["tiktok", "instagram"]
},
{
"id": "01k6ij91yqtsyrzjb0hveqy0gh",
"short_id": "01k4ef57yqtsyrzjb0gveqy8de",
"status": "processing",
"download_url": null,
"render_hash": "b2c3d4e5f6g7...",
"storage_provider": "wasabi",
"created_at": "2025-01-24T11:05:00.000000Z",
"short": {
"id": "01k4ef57yqtsyrzjb0gveqy8de",
"title": "Momento viral #2",
"start_time": 512.0,
"end_time": 571.5,
"thumbnail_url": "https://img.youtube.com/vi/abc123/maxresdefault.jpg",
"project": {
"id": "01k3ab12yqtsyrzjb0fveqy5zx",
"url": "https://www.youtube.com/watch?v=abc123"
}
},
"published_platforms": []
}
],
"first_page_url": "https://api.realoficial.com.br/api/v1/renders?page=1",
"from": 1,
"last_page": 5,
"per_page": 20,
"to": 20,
"total": 87
}
}
Filtrar por Projeto
Para listar renders de um projeto especifico:GET /renders?project_id=01k3ab12yqtsyrzjb0fveqy5zx
Download do Video
Quando o status edone, o campo download_url contem a URL direta para o arquivo MP4:
// Baixar video programaticamente
async function downloadVideo(render) {
if (render.status !== 'done') {
throw new Error('Render ainda nao concluido');
}
const response = await fetch(render.download_url);
const blob = await response.blob();
// Salvar localmente
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `${render.short.title}.mp4`;
a.click();
}
Status dos Renders
pending
Na fila de processamento. Aguardando worker disponivel.
processing
Sendo renderizado. Pode levar de 30s a 2 minutos.
done
Concluido! Campo
download_url disponivel.error
Erro durante renderizacao. Tente novamente.
CDN e Cache
Os videos sao armazenados em CDN global (Wasabi) e ficam disponiveis por tempo indeterminado. As URLs incluem um parametro de versao para cache busting.
Exemplo de Integracao Completa
// Fluxo completo: criar projeto -> aguardar cortes -> renderizar -> baixar
async function processVideo(youtubeUrl) {
const token = 'seu_token_aqui';
const headers = {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
};
// 1. Criar projeto
const createResponse = await fetch('https://api.realoficial.com.br/api/v1/createShorts', {
method: 'POST',
headers,
body: JSON.stringify({
url: youtubeUrl,
clipDuration: '60',
startTime: 0,
endTime: 1800,
aspect_ratio: 'vertical',
layout: 'single'
})
});
const project = await createResponse.json();
// 2. Aguardar processamento (polling)
let shorts = [];
while (shorts.length === 0) {
await new Promise(r => setTimeout(r, 30000)); // 30 segundos
const shortsResponse = await fetch(
`https://api.realoficial.com.br/api/v1/shorts/${project.data.id}?sort=score`,
{ headers }
);
const shortsData = await shortsResponse.json();
if (shortsData.project?.status === 'face_analysis_done') {
shorts = shortsData.data.data;
}
}
// 3. Renderizar os 3 melhores cortes
const topShorts = shorts.slice(0, 3);
for (const short of topShorts) {
await fetch(
`https://api.realoficial.com.br/api/v1/shorts/${project.data.id}/${short.id}/render`,
{ method: 'POST', headers }
);
}
// 4. Aguardar renders
await new Promise(r => setTimeout(r, 120000)); // 2 minutos
// 5. Obter URLs dos videos
const rendersResponse = await fetch(
`https://api.realoficial.com.br/api/v1/renders?project_id=${project.data.id}`,
{ headers }
);
const renders = await rendersResponse.json();
return renders.data.data
.filter(r => r.status === 'done')
.map(r => r.download_url);
}
⌘I
