spicyapiDocumentação
Conta e cobrança
Conteúdo principal

Retenção e destruição

Limites de retenção, prazos que você pode reduzir, efeitos sobre conteúdo existente, destruição de conteúdo de tarefas e limites dessas garantias.

A retenção tem duas camadas. O limite da plataforma é um compromisso público, não um ajuste interno. Dentro dele, você pode definir prazos próprios mais curtos e destruir o conteúdo de uma tarefa quando quiser.

A relação entre as camadas cabe em uma frase: você só pode reduzir o prazo; nenhuma configuração sua aumenta o limite.

Por quanto tempo guardamos os dados: limites da plataforma

DadosLimite da plataformaAo expirar
Arquivos gerados (imagem / vídeo / áudio)Cerca de 14 diasExcluídos do armazenamento de objetos
Mídia de curtas (imagens de cenas, vídeos e vozes criados em um projeto de curta do Spicy Studio e filmes exportados desse projeto)Cerca de 60 diasExcluída do armazenamento de objetos
Imagens de referência enviadas por você1 diaO URI spicy:// expira em expiresAt da resposta de confirmação; o objeto é excluído depois
Conteúdo da tarefa (prompts e parâmetros em input, referências de arquivos gerados em output)30 diasOs dois campos são limpos; o registro da tarefa é mantido
Biblioteca de ativos (arquivos que você salva de propósito)Até você excluirExcluídos quando você exclui o ativo ou o proprietário encerra a conta; uma biblioteca de equipe é excluída junto com a equipe. Veja Mídia
Registros de tarefas (ID, modelo, estado, valor e horários, sem conteúdo de qualquer tipo)Mantidos por prazo indeterminadoNão são excluídos. São a evidência em uma disputa de faturamento
Logs e eventos de tarefas (mudanças de estado, registros de entrega de webhooks)Pelo menos 60 dias, com partições mensais, na prática de 2 a 3 mesesExcluídos
Registros de saldo e histórico financeiro10 anosMantidos para histórico da conta, conciliação e disputas; veja abaixo
Registros de auditoria2 anosRemovidos conforme a política após verificação de integridade
IP / UA em texto puro nos registros de segurança90 diasSubstituídos por pseudônimos HMAC versionados; isso não é anonimização
Backups do banco de dados35 diasSubstituídos em ciclos; a exclusão no aplicativo não apaga backups imediatamente

Você pode reduzir os prazos das primeiras quatro linhas com os quatro controles abaixo: resultados gerados, incluindo mídia e dados de resultado, mídia de curtas, texto do prompt e arquivos enviados.

A mídia de curtas tem prazo maior porque um filme no Spicy Studio é construído ao longo de dias ou semanas, e uma cena criada na primeira semana ainda precisa existir quando o filme inteiro for exportado. Isso só vale para tarefas iniciadas em um projeto de curta no Studio; o mesmo modelo chamado pela API, por um SDK ou pelo Playground mantém o limite de 14 dias, e o texto do prompt mantém o limite de 30 dias em ambos os casos. Os demais prazos são obrigações da plataforma ou legais e não mudam com suas configurações.

Esses números são configurações do servidor, não constantes fixas no código

A tabela apresenta os limites atualmente vigentes, que também são os valores padrão: sem configurar nada, o comportamento permanece como antes. A operação pode alterá-los, pois as exigências de cada jurisdição mudam, mas qualquer alteração é tratada como mudança de conformidade: esta página e o comportamento real de exclusão precisam permanecer alinhados.

Se você precisa de outro prazo de retenção em contrato, trate disso antes de assinar, em vez de presumir com base nesta página.

A validade do URI de upload não é o prazo de conclusão da exclusão do objeto

O URI spicy:// retornado pela confirmação do upload só pode ser usado até o expiresAt da resposta, cujo padrão é 1 dia após a confirmação bem-sucedida. Nesse momento, o URI se torna imediatamente inválido para novas tarefas. O objeto correspondente é removido na limpeza, e a proteção final de exclusão pode levar até mais 24 horas; esse atraso não estende a validade do URI.

Por que “cerca de 14 dias”, e não “exatamente 14 dias”

A última camada de expiração é uma regra de ciclo de vida do armazenamento de objetos, cujo comportamento oficial é remover os objetos em até 24 horas após a expiração. Prometer um número inteiro e, na prática, excluir após 14 dias mais até um dia adicional seria falso; por isso, usamos “cerca de”.

O mesmo vale para os prazos curtos definidos por você. Configure uma hora, e a limpeza normalmente termina em minutos; ainda assim, usamos “cerca de uma hora” ou “no máximo”, nunca um prazo exato.

Baixe tudo que precisa guardar. Depois do prazo, nenhum link de download pode ser emitido, embora o registro da tarefa continue consultável e as movimentações permaneçam visíveis no histórico financeiro.

Quatro prazos, configurados separadamente

Eles respondem a quatro perguntas diferentes, não à mesma pergunta com quatro ajustes. Os nomes abaixo são os exibidos no console:

ControleAbrangênciaPadrão, igual ao limite da plataformaOpções
Resultados geradosImagens / vídeo / áudio gerados e dados do resultadoCerca de 14 dias1 hora / 6 horas / 24 horas / 7 dias / 14 dias
Mídia de curtasMídia criada em um projeto de curta do Spicy Studio e filmes exportados deleCerca de 60 dias1 hora / 24 horas / 7 dias / 14 dias / 30 dias / 60 dias
Texto do promptTexto da solicitação: prompt e campos de texto de input30 diasIgual aos resultados / 1 hora / 24 horas / 7 dias / 30 dias
Arquivos enviadosArquivos enviados por você como referências1 diaExcluir ao concluir a tarefa / 1 hora / 24 horas

Configure-os em Retenção, na página Proteção de dados do console. Quando uma tarefa é aceita, recebe prazos próprios de expiração de resultado e prompt conforme essas configurações e o cabeçalho abaixo; você pode consultá-los em retention de recordInfo.

“Excluir ao concluir a tarefa” significa que um arquivo enviado é excluído quando todas as tarefas que o usam chegam a um estado final (succeeded / failed / canceled / expired), normalmente em até um minuto; não na criação da tarefa, pois uma nova tentativa precisa dele. Entenda a consequência antes: executar novamente a mesma imagem exige outro upload, e uma nova tentativa falhará.

Efeito de uma alteração sobre conteúdo existente

Alterar um prazo não é simplesmente mudar o comportamento “daqui em diante”. Algumas mudanças afetam tarefas que você já executou; outras não. Hoje funciona assim:

AlteraçãoEfeito sobre tarefas e arquivos existentes
Texto do prompt para 1 hora ou 24 horasNa próxima limpeza, geralmente em minutos, todas as tarefas concluídas há mais de um dia perdem o texto do prompt e seus resultados e arquivos gerados, mesmo que Resultados gerados ainda esteja em 14 dias. Depois, o mesmo ocorre com cada tarefa ao completar um dia desde a conclusão, salvo remoção anterior por outro motivo.
Texto do prompt para 7 diasO mesmo, com 7 dias em vez de um.
Resultados gerados para um prazo menor, com Texto do prompt em Igual aos resultadosO mesmo que definir Texto do prompt nesse prazo: 7 dias alcança tarefas de 7 dias atrás; 1 hora, 6 horas ou 24 horas alcança tarefas de um dia atrás.
Resultados gerados para um prazo menor, com Texto do prompt em um valor próprioNada muda nas tarefas já executadas: cada uma mantém a expiração do resultado recebida na aceitação. Novas tarefas usam o prazo menor.
Arquivos enviados para Excluir ao concluir a tarefaAplica-se aos arquivos existentes quando você salva. Arquivos usados apenas por tarefas já encerradas são excluídos em cerca de um minuto; os demais, quando as tarefas que os usam terminarem. Arquivos enviados depois de salvar atualmente mantêm a expiração padrão indicada na resposta de confirmação.
Arquivos enviados para 1 hora ou 24 horasAtualmente não altera nada: cada arquivo enviado permanece utilizável até o expiresAt da sua resposta de confirmação.
Qualquer prazo para um valor maiorNada já excluído é recuperado, e tarefas existentes mantêm a expiração recebida.

Algumas mudanças alcançam o passado porque, embora os prazos de cada tarefa sejam fixados na aceitação, uma segunda limpeza trabalha com dias inteiros. Ela usa a configuração de Texto do prompt, arredonda para cima para 1, 7 ou 30 dias e a aplica a todas as tarefas encerradas da conta. Ao limpar uma tarefa, limpa o texto do prompt e os resultados juntos.

A mesma página tem um segundo cartão, Retenção de conteúdo de tarefas, que controla diretamente essa limpeza por dias:

  • Escolher 1 dia ou 7 dias limpa texto do prompt, resultados e arquivos gerados de todas as tarefas concluídas há mais tempo que o escolhido, e continua fazendo isso à medida que cada tarefa atinge essa idade.
  • Ativar Limpar conteúdo logo após a conclusão limpa esses dados de todas as tarefas encerradas, incluindo as executadas antes da ativação, cerca de uma hora após a conclusão de cada uma.
  • Os dois cartões compartilham configurações: salvar em um altera o valor exibido no outro.

Baixe o que quer guardar antes de reduzir qualquer prazo

Uma configuração menor pode excluir resultados e prompts de tarefas que você já executou, e conteúdo excluído não pode ser restaurado. Antes de salvar, o console mostra quantos itens espera afetar; trate o número como aviso, não como lista exata do que será removido.

Baixe primeiro todos os resultados que quiser guardar e só depois reduza o prazo. Aumentá-lo não exige esse cuidado: afeta apenas o futuro, e nada já excluído volta.

Ajuste por solicitação: X-Spicy-Retention

Quando você não quer alterar a configuração da conta, mas deseja que apenas esta geração seja removida mais cedo, envie o cabeçalho na criação da tarefa. O valor é um inteiro em segundos e se aplica aos arquivos e ao prompt desta tarefa:

curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -H "X-Spicy-Retention: 3600" \
  --data "$TASK_PAYLOAD"
  • Só pode reduzir. O valor efetivo é min(header, account setting, platform cap). Depois que um administrador define a conta em uma hora, uma solicitação não pode recuperar 14 dias; caso contrário, a configuração seria apenas uma sugestão.
  • 0 é válido e significa “excluir os arquivos assim que a tarefa atingir um estado final”.
  • Um valor inválido não faz a solicitação falhar. Um número negativo é ajustado para 0; um valor acima do limite é reduzido ao limite; um valor que não seja um inteiro decimal é ignorado, aplicando-se a configuração da conta. O valor efetivamente aplicado sempre é informado em retention de recordInfo. Um cabeçalho que só pede mais cautela nunca deve impedir uma geração.
  • Endpoints que o leem. jobs/createTask e jobs/stream o leem. jobs/retry herda o valor efetivo da tarefa original e ignora o cabeçalho: uma nova tentativa repete o mesmo trabalho, e escolher outro prazo daria duas expirações a uma mesma família de tarefas. jobs/quote não o lê porque não cria tarefa.

recordInfo retorna retention para cada tarefa; a própria resposta de createTask não o inclui, portanto consulte depois que a tarefa existir:

{
  "retention": {
    "outputsExpireAt": "2026-09-13T12:00:00Z",
    "promptsExpireAt": "2026-09-13T12:00:00Z",
    "source": "header"
  }
}

source indica a camada determinante: header, esta solicitação; account, a configuração da conta; ou platform, o limite. Enviar o cabeçalho e ainda receber account significa que a configuração da conta já era menor que o prazo pedido.

Antes do término, outputsExpireAt é medido a partir da aceitação; quando a tarefa chega a um estado final, a referência passa para a conclusão, usando o mesmo intervalo. Portanto, o horário só se move para mais tarde, nunca para antes. Confie nos horários da resposta, em vez de recalculá-los: o resultado dos três limites nem sempre é o esperado. Além da destruição solicitada por você, só uma configuração da conta que alcance tarefas anteriores pode remover conteúdo antes desses horários, conforme explicado acima.

Destruir conteúdo sob demanda: POST /jobs/purge

Quando você não quer esperar a expiração:

  • No console, abra a tarefa em Logs e escolha Destruir saídas, a mesma ação do endpoint abaixo.
  • Remover do histórico, na mesma tarefa, também limpa prompt e resultado, agenda a exclusão da mídia e, além disso, oculta a tarefa dos seus logs. A ação fica disponível depois do encerramento da tarefa e da liquidação do faturamento.

Nenhuma das ações muda a cobrança nem cancela uma tarefa. Por código:

curl -X POST https://api.spicyapi.ai/api/v1/jobs/purge \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{"taskId": "job_01k..."}'
RemovidoMantido
Os próprios objetos dos arquivos geradosLançamentos financeiros e valores
Dados do resultado (output)Estado da tarefa e horários
Prompt e texto de inputIdentificador do modelo e request_id

A resposta:

{
  "taskId": "job_01k...",
  "contentState": "purged",
  "purgedAt": "2026-09-13T12:00:00Z",
  "contentRemovedBy": "user",
  "billingRetained": true,
  "mediaDeletionPending": true
}

Algumas regras:

  • Somente tarefas em estado final (succeeded / failed / canceled / expired). Espere a tarefa em execução terminar: os arquivos ainda não chegaram, e uma exclusão pela metade é pior que não excluir. Uma tarefa de geração não pode ser cancelada após a aceitação; não existe um caminho de “cancelar primeiro, destruir depois”.
  • Idempotente e sem necessidade de Idempotency-Key. O endpoint é idempotente por taskId: chamá-lo de novo para uma tarefa já destruída ainda retorna 200, e purgedAt é o horário da primeira destruição, não desta chamada. Repetir após um tempo limite é seguro.
  • A resposta significa “agendado”, não “já excluído”. Enquanto mediaDeletionPending for verdadeiro, contentState já é purged, mas a limpeza em segundo plano ainda não terminou de remover os objetos; normalmente termina em até um minuto. Excluir de forma síncrona permitiria que um único objeto problemático bloqueasse toda a solicitação, justamente quando você precisa de uma resposta clara.
  • Uma resposta ainda em present significa que esta chamada não removeu nada, por exemplo porque a tarefa está sob obrigação de preservação. Você pode tentar depois; o motivo específico não é divulgado intencionalmente.
  • billingRetained sempre é true. Parece redundante, mas está ali porque é a informação que o usuário mais provavelmente interpretaria de forma errada nesse endpoint; veja abaixo.

Destruir não é cancelar nem receber reembolso

purge afeta somente conteúdo. Não muda nada no faturamento:

  • Uma cobrança liquidada continua liquidada. Destruir os arquivos não devolve o dinheiro.
  • Uma reserva já liberada por falha ou expiração continua liberada; destruir não a libera novamente.
  • A cobrança permanece na página de faturamento com valor, horário e modelo.

Isso é intencional. Registros financeiros são a evidência da transação para as duas partes e seguem uma política de retenção de 10 anos; o conteúdo é seu e pode ser removido a pedido. São duas categorias de dados, não duas faces da mesma coisa.

Em uma frase: destruir remove o conteúdo, não o registro dos seus gastos.

contentState: existência do conteúdo e responsável pela remoção

Os detalhes da tarefa têm um contentState com três valores:

ValorSignificadoQuando aparece
presentO conteúdo ainda existeEstado normal e forma de interpretar tarefas antigas, anteriores ao campo
expiredRemovido automaticamente na expiraçãoO prazo efetivo de retenção passou e a limpeza foi executada
purgedVocê o destruiuVocê chamou jobs/purge ou escolheu Destruir saídas

Os dois últimos incluem purgedAt, quando o conteúdo foi removido, e contentRemovedBy, com system para a limpeza e user para você.

A palavra `expired` aparece em dois lugares com significados diferentes

  • Estado da tarefa expired: a geração excedeu o tempo limite e não produziu nada.
  • contentState expired: ela produziu algo, mas o conteúdo foi removido depois pelas configurações de retenção.

Os dois usam a mesma palavra em inglês. Um único rótulo “Expirado” na sua interface mistura duas situações sem relação: a primeira pede nova tentativa; a segunda não recupera aquele resultado, por mais que você tente novamente.

Exibir purged como “expirado” erra pelo mesmo motivo, no sentido inverso: um caso decorre de um botão pressionado pelo usuário; o outro, da execução programada da nossa política. Inverter a explicação faz as pessoas concluírem que a plataforma perdeu seus arquivos.

A expiração limpa campos, não registros

As duas partes desta frase importam; a primeira isolada é enganosa

O conteúdo é apagado ao fim do prazo de retenção; o registro de faturamento e status, que não contém conteúdo, é mantido por prazo indeterminado.

Dizer apenas a primeira parte é literalmente verdadeiro, mas ainda cria uma impressão errada: o que desaparece é o conteúdo de input e output, não o registro da tarefa.

A limpeza abrange input, output, URLs de callback e o conteúdo relacionado de eventos e callbacks. O próprio registro da tarefa é mantido por prazo indeterminado: é a única evidência em uma disputa de faturamento, e apagá-lo quebraria a contabilidade. Depois, cada registro contém algumas centenas de bytes de metadados: ID da tarefa, modelo, estado, valor, horários e chave de origem. A destruição sob demanda segue a mesma regra; só o momento é escolhido por você.

Depois que o conteúdo é removido:

  • Você ainda pode responder “quanto fui cobrado neste mês, quais tarefas falharam e qual chave as enviou”.
  • Você não pode responder “qual prompt enviei e qual chave de objeto guardava o arquivo”: recordInfo deixa de retornar input e output a partir daí.

Se precisar de prompts por mais tempo, mantenha uma cópia própria. Uma obrigação ativa de preservação suspende a exclusão correspondente e também bloqueia a destruição sob demanda; nenhuma das duas pode restaurar uma saída já excluída fisicamente.

Histórico de saldo é separado do conteúdo das tarefas

Limpar input e output de uma tarefa, por expiração ou por destruição solicitada, não altera recargas, reservas, liquidações, reservas devolvidas nem ajustes manuais. Você ainda pode conciliar essas movimentações na página de faturamento do console. Registros do histórico financeiro seguem uma retenção de dez anos e não são removidos quando o conteúdo de uma tarefa expira ou é destruído.

Se uma solicitação de acesso ou exclusão abranger dados que precisam ser mantidos por disputa, investigação de segurança ou legislação aplicável, nossa resposta explicará o escopo e o motivo.

Duas coisas que não podemos fazer

1. O modelo que executa sua solicitação necessariamente vê o prompt em texto puro

A geração é feita pelo modelo que você seleciona, e o prompt precisa chegar a ele em texto puro. É um limite de arquitetura, não uma configuração; reduzir seu prazo para uma hora não muda isso. Portanto, nossos prazos de retenção só podem garantir por quanto tempo a própria SpicyAPI guarda algo.

O que acontece com um prompt depois de chegar ao modelo está fora do controle das nossas configurações de retenção. Se isso importa para seu caso de uso, entre em contato antes de enviar material sensível.

2. Não existe “exclusão imediata”

A regra final de ciclo de vida pode levar até 24 horas para executar, e backups do banco de dados são substituídos em ciclos de 35 dias. Qualquer afirmação de que dados desaparecem instantaneamente de todos os lugares é falsa. Podemos nos comprometer com o prazo de conclusão, não com uma remoção instantânea; por isso, o endpoint de destruição responde “agendado”, não “excluído”.

Tarefas envolvidas em disputas, solicitações periciais ou obrigações legais de denúncia são colocadas sob preservação e param de contar o prazo até sua liberação. A destruição sob demanda não ocorre enquanto a preservação estiver em vigor.

Isso prevalece sobre todos os números e configurações acima. Não é uma exceção reservada em silêncio: sem um mecanismo de preservação, a primeira notificação legal obrigaria a descumprir uma promessa de retenção, e você teria de explicar por que a documentação dizia 14 dias. Essa informação está aqui porque faz parte do assunto.

O que está nas suas mãos

  • Defina cada prazo conforme sua necessidade real. São separados: não altere uploads para “Excluir ao concluir a tarefa” como consequência indireta de querer prompts por menos tempo.
  • Baixe antes de reduzir. Um prazo menor pode alcançar tarefas já executadas; veja efeitos de uma alteração.
  • Use X-Spicy-Retention em solicitações sensíveis pontuais. Não é necessário reconfigurar a conta inteira para uma geração.
  • Não envie o que não precisa enviar. Imagens de referência e prompts são os dois itens mais sensíveis e os únicos cujo conteúdo você escolhe.
  • Arquive seus próprios arquivos gerados. Eles duram no máximo cerca de 14 dias, ou 60 dias para mídia de curtas, e menos se você reduzir o prazo.
  • Guarde uma cópia dos dados da conta. Baixar seus dados, na página Proteção de dados, fornece um JSON com perfil, papéis em equipes, detalhes de chaves de API, nunca os segredos, dados de tarefas ainda retidos e registros financeiros. Não inclui arquivos de mídia; baixe separadamente os resultados necessários.
  • Não armazene URLs de download no banco de dados. Elas expiram em 20 minutos e não podem ser revogadas após a emissão. Assine uma quando precisar; veja Mídia.
  • Use HTTPS nas URLs de callback. O conteúdo inclui estado da tarefa e referências de arquivos; HTTP simples os expõe a qualquer pessoa no caminho.

Não treinamos com seu conteúdo

Seus prompts, imagens de referência e arquivos gerados não entram em nenhum conjunto de treinamento.

O limite dessa frase importa: ela se refere a nós. Não somos nós que definimos as políticas de cada modelo; veja o primeiro ponto acima.

Nesta página