# Direitos de conteúdo

> Antes de o Nodaro importar o link de um vídeo, a pessoa confirma uma declaração de direitos de conteúdo. Leia, confirme por link ou autorize chaves e agentes.

Source: https://nodaro.ai/pt-BR/docs/developers/api/content-rights

**Direitos de conteúdo** são a declaração que uma pessoa confirma antes de o Nodaro importar um link para o vídeo, a imagem ou a gravação de alguém. A pessoa confirma que detém os direitos sobre o conteúdo, ou tem a permissão de quem os detém, e que é responsável pela forma como o usa. O Nodaro guarda um registro de cada confirmação: quem confirmou, para qual link, qual texto, quando e de onde, e o download feito com ela.

## Quais importações precisam de uma confirmação
Toda rota que busca um link faz a mesma verificação:

- A importação de vídeo, `POST /v1/download-video`.
- As importações de áudio, `POST /v1/youtube-audio` e `POST /v1/extract-youtube-audio`.
- As importações de imagem e de gravação, `POST /v1/media/import-url` e `POST /v1/media/import-recording`.
- `POST /v1/trim-audio` quando recebe um link para a página de um vídeo.
- A busca que a própria execução faz de um nó [**URL de vídeo**](https://nodaro.ai/docs/nodes/automate/video-url), para o vídeo e para o som dele.
- Uma transcrição ou um cover com Suno que recebe um link para a página de um vídeo: `POST /v1/transcribe` (o `audioUrl` dela), `POST /v1/suno/cover` e `POST /v1/suno/upload-extend` (o `uploadUrl` deles), e a ferramenta de áudio do MCP.
- Uma dublagem que recebe um link, `POST /v1/dubbing` com um `sourceUrl`, e o nó **Dublagem** de uma execução que recebe um link.

Essas rotas recebem a confirmação como `confirmationId`. Um arquivo enviado do seu próprio dispositivo não é uma importação de link, então não precisa de confirmação.

**Transcrição e Suno.** Um link para a página de um vídeo tem o som buscado primeiro, então a rota recebe a confirmação da mesma forma. A confirmação é verificada antes de a tarefa ser criada: uma recusa é um `403` com o código que diz o motivo, e nada é cobrado. A tarefa gasta a confirmação logo antes de o som ser buscado. Um link direto de arquivo não precisa de nenhuma. Um link é a página de um vídeo quando o host dele é um dos hosts próprios das plataformas. Um host que apenas contém o nome de uma plataforma é um arquivo comum.

**Dublagem.** `POST /v1/dubbing` entrega um `sourceUrl` ao serviço de dublagem, que o busca por conta própria. Isso é uma importação do link, tanto para a página de um vídeo quanto para um arquivo direto. Todo `sourceUrl` que não é um arquivo do próprio armazenamento da implantação recebe `confirmationId`. A confirmação é lida antes de qualquer coisa tocar no link, inclusive a verificação de duração, e uma recusa é um `403` antes de a tarefa ser criada. Um `audioUrl` ou um `videoUrl` é uma entrada de mídia como a de qualquer nó, e não precisa de nenhuma.

**Links recusados de imediato.** Essas rotas recusam um link com uma barra invertida ou um caractere de controle, como uma tabulação ou uma quebra de linha, com `400 validation_error`, antes de qualquer coisa lê-lo. Nenhum link real contém um desses.

Se uma importação sem confirmação é recusada é uma configuração da implantação. Enquanto a configuração está desativada, a importação é aceita. Quando ela é ativada, a importação responde `403 rights_confirmation_required`. Envie sempre uma confirmação, para que o seu cliente continue funcionando quando a configuração mudar.

## As rotas
| Método | Caminho | O que faz |
| --- | --- | --- |
| `GET` | `/v1/content-rights/declaration` | Retorna a declaração atual: `{ data: { version, text } }`. É pública, então um cliente pode mostrá-la antes de alguém fazer login. |
| `POST` | `/v1/content-rights/confirm` | Registra que a conta conectada confirmou a declaração para um link. Corpo: `{ url, declarationVersion }`. Responde `201 { data: { id, declarationVersion, expiresAt } }`. Qualquer link `http(s)` que uma importação aceita pode ser confirmado: a página de um vídeo, um arquivo, uma imagem ou uma página que o serviço de dublagem lê. Um link com uma barra invertida ou um caractere de controle é um `400`. |
| `GET` | `/v1/content-rights/authorization` | Retorna a autorização permanente da conta: `{ data: { id, declarationVersion, createdAt } }`, ou `{ data: null }` quando não há nenhuma. |
| `POST` | `/v1/content-rights/authorization` | Registra uma autorização permanente para a declaração atual. Corpo: `{ declarationVersion }`. Responde `201 { data: { id, declarationVersion, createdAt } }`. Só a partir da sua própria sessão conectada. |
| `DELETE` | `/v1/content-rights/authorization` | Revoga a autorização permanente. O registro é mantido. Responde `{ data: { revoked } }`. Só a partir da sua própria sessão conectada. |

`POST /v1/content-rights/confirm` e `POST /v1/content-rights/authorization` respondem `409 rights_confirmation_stale` quando a declaração mudou depois que o cliente a leu. Leia a declaração de novo e pergunte à pessoa de novo.

## Confirmar um link e depois importá-lo
### Ler a declaração
Chame `GET /v1/content-rights/declaration`. Mostre o `text` dela como está, com uma caixa de seleção que começa desmarcada.

### Confirmar o link
Quando a pessoa marcar a caixa, chame `POST /v1/content-rights/confirm` com o link e a `version` da declaração.

### Importar o link
Envie o `id` da resposta como `confirmationId` na importação, por exemplo em `POST /v1/download-video`.

**curl**

```bash
VERSION=$(curl -s https://app.nodaro.ai/v1/content-rights/declaration | jq -r .data.version)

CONFIRMATION=$(curl -s -X POST https://app.nodaro.ai/v1/content-rights/confirm \
  -H "Authorization: Bearer $NODARO_API_KEY" -H 'Content-Type: application/json' \
  -d "{ \"url\": \"https://example.com/watch/VIDEO_ID\", \"declarationVersion\": $VERSION }" | jq -r .data.id)

curl -s -X POST https://app.nodaro.ai/v1/download-video \
  -H "Authorization: Bearer $NODARO_API_KEY" -H 'Content-Type: application/json' \
  -d "{ \"url\": \"https://example.com/watch/VIDEO_ID\", \"confirmationId\": \"$CONFIRMATION\" }"
```

**TypeScript SDK**

```ts
const { version, text } = await client.contentRights.declaration()
// Show `text` with a checkbox. Once it is ticked:
const { id } = await client.contentRights.confirm({ url, declarationVersion: version })
const { downloadId } = await client.media.downloadVideo({ url, maxHeight: 1080, confirmationId: id })
```

Uma confirmação libera um download desse link. O download precisa ser feito pela mesma conta, sob a declaração atual, dentro de uma hora. O link é comparado depois de normalizado: o mesmo vídeo com outros parâmetros de consulta corresponde, e outro vídeo nunca corresponde. O download então leva a confirmação no arquivo armazenado.

A confirmação é verificada antes que qualquer outra coisa possa recusar a importação, e só é gasta quando o download está para começar. Um `429 too_many_downloads` ou um endereço recusado nunca gasta uma confirmação. Uma importação recusada nunca inicia uma busca.

## Importações por chaves de API, apps conectados e agentes de IA
Uma importação feita por uma chave de API pessoal, por um app conectado ou por um agente de IA pelo MCP não tem quem marque uma caixa para cada link. A pessoa autoriza essas importações uma vez, na própria sessão conectada:

- No app, em **Configurações**, em **Importações por chaves de API, apps conectados e agentes de IA**: marque a caixa e clique em **Autorizar**. **Revogar** encerra a autorização.
- Pelo código, com `POST /v1/content-rights/authorization` a partir da própria sessão da pessoa. Uma chave, um app ou um agente que chama a rota é recusado com `403 forbidden`.

Com uma autorização permanente, cada importação pelas chaves, apps e agentes da conta é registrada como uma confirmação derivada dela, uma para cada download, e a importação passa sem `confirmationId`. Um `confirmationId` que você envia continua sendo usado primeiro. As execuções que uma chave, um app ou um agente iniciou levam a mesma cobertura a cada importação que a execução faz.

A autorização indica a versão da declaração para a qual foi dada. Uma nova declaração precisa de uma nova autorização, assim como precisa de uma nova marcação. Até lá, a conta conta como não autorizada.

Um app conectado só importa, e confirma, com um escopo que lhe permita escrever pela conta, isto é, qualquer escopo `:write` ou `:execute`. Um app só com escopos de leitura é recusado com `403 insufficient_scope` antes da verificação de direitos de conteúdo.

Enquanto a implantação exige uma confirmação, uma importação por uma chave, um app ou um agente sem confirmação e sem autorização permanente é recusada com `403 rights_authorization_required`. A solução é a pessoa autorizar nas configurações dela. Uma execução sem nenhuma forma de entrada, como uma execução agendada ou uma execução por webhook, não tem a cobertura de nenhuma autorização e é recusada como uma pessoa que não marcou a caixa.

## Um nó URL de vídeo em uma execução
A busca que a própria execução faz de um nó [**URL de vídeo**](https://nodaro.ai/docs/nodes/automate/video-url) recebe a confirmação da requisição da execução. Defina `rightsConfirmationId` no nó em `inputOverrides`, em `POST /v1/workflows/:id/run` ou `POST /v1/app/:slug/run`:

```json
{
"inputOverrides": {
"<video url node id>": { "youtubeUrl": "https://example.com/watch/VIDEO_ID", "rightsConfirmationId": "<confirmation id>" }
}
}
```

O nó **Dublagem** de uma execução que recebe um link é retido da mesma forma antes de a tarefa dele ser criada. A confirmação dele vem da requisição da execução, como `rightsConfirmationId` no nó **Dublagem** em `inputOverrides`, ou da autorização permanente da conta, para uma execução iniciada por uma chave ou um agente. Um nó repetido dubla o seu único link em cada iteração, tudo sob essa mesma confirmação para essa execução.

A confirmação precisa ser para esse mesmo link, feita para essa execução. Ela é um campo só da execução. Uma confirmação salva em um nó é descartada antes de a execução ler o workflow, porque uma confirmação vale para um download dentro de uma hora. Quando `inputOverrides` define outro link, a confirmação do link antigo é descartada junto com os outros campos dele.

## No editor
Todo nó que busca um link no editor mostra a caixa de direitos de conteúdo abaixo do link e espera a caixa ser marcada para esse link:

- **Dublagem.** Uma execução para até a caixa abaixo do **Link de origem** ser marcada, e cada execução confirma o link de novo. Uma execução cuja requisição coloca outro link no lugar do marcado não começa. Um nó **Dublagem** congelado nunca é executado, então não pergunta. A execução de um app publicado não tem caixa para o próprio link de um nó **Dublagem**. Um nó **Dublagem** dentro de um sub-workflow também não tem. Por isso, com a configuração ativada, os dois são recusados. Veja [Dublagem](https://nodaro.ai/docs/nodes/audio/dubbing#content-rights).
- **Transcrever e Cover com Suno.** Os dois recebem um link para onde está um vídeo por um nó [**URL de vídeo**](https://nodaro.ai/docs/nodes/automate/video-url). Esse nó pede a declaração e busca o som, e uma execução lê essa faixa. Uma execução no editor para antes de qualquer coisa começar quando um desses nós recebe esse link diretamente: no seu próprio campo de link, ou de um nó **Texto** mapeado para o link do **Cover com Suno**. A mensagem cita o nó e diz para conectar um nó **URL de vídeo** em vez disso. Um valor gerado durante uma execução, um link escrito no **Estender upload com Suno** e uma requisição pela API ou por um agente ficam a cargo do servidor.
- **Gerar música e Áudio de referência.** Os dois buscam o som de um link no editor. O **Gerar música** busca quando você clica em **Baixar**. O [**Áudio de referência**](https://nodaro.ai/docs/nodes/audio/reference-audio) busca assim que a caixa dele é marcada, e de novo quando você clica em **Extrair áudio**. Cada busca confirma a declaração para essa única busca, com o `confirmationId` de `POST /v1/youtube-audio` ou `POST /v1/extract-youtube-audio`. Uma execução e um app publicado leem o arquivo armazenado e nunca buscam esses links.
- **Uma imagem adicionada por um link.** O [**Enviar imagem**](https://nodaro.ai/docs/nodes/image/upload-image) e a entrada de imagem de um app publicado copiam um link de imagem colado para o armazenamento com `POST /v1/media/import-url`. A cópia espera a caixa ser marcada para esse link. No editor, marcar a caixa inicia a cópia. Na página de um app, **Definir** espera por ela. Uma marcação vale para uma cópia, então o próximo link pergunta de novo. Um link que a cópia recusa com `403` não é adicionado. Um link que não pode ser copiado por outro motivo, como um arquivo inacessível ou grande demais, ainda é adicionado como está, com um aviso.

Quando a página detecta que a declaração mudou, todas as caixas da página são desmarcadas, não só a caixa de um nó, porque cada caixa foi marcada sob o texto antigo. Um arquivo enviado não precisa de caixa.

## Erros
Uma importação responde `403` com um destes códigos quando a confirmação não serve. Nada foi buscado.

| Código | Significado |
| --- | --- |
| `rights_confirmation_required` | A implantação exige uma confirmação, e nenhuma foi enviada. |
| `rights_authorization_required` | A implantação exige uma confirmação, a importação veio por uma chave de API, um app conectado ou um agente de IA, e a conta não tem uma autorização permanente. |
| `rights_confirmation_not_found` | Nenhuma confirmação tem esse ID. |
| `rights_confirmation_mismatch` | A confirmação é de outro link ou de outra conta. |
| `rights_confirmation_stale` | A declaração mudou desde a confirmação. Leia de novo e confirme de novo. |
| `rights_confirmation_expired` | A confirmação tem mais de uma hora. |
| `rights_confirmation_used` | Uma importação já foi feita com a confirmação. Uma importação que falhou depois de a busca começar também conta. |
| `imports_blocked` | A importação de links está bloqueada na conta, ou a conta está encerrada, pela política de infratores reincidentes da implantação. A mensagem diz até quando: uma data em UTC, ou até que um administrador retire o bloqueio. Veja [Infratores reincidentes](#repeat-infringers). |
| `import_source_disabled` | A implantação não permite importações do site do link. A mensagem não cita nenhum site. |

Para cada código `rights_confirmation_*`, confirme o link de novo e envie o novo ID. No TypeScript SDK, essas recusas chegam como [`ImportRefusedError`](https://nodaro.ai/docs/developers/sdk/errors#importrefusederror).

## Conteúdo restrito
Depois de uma reclamação, o Nodaro pode restringir um arquivo armazenado ou o resultado de uma tarefa. Um arquivo restrito aparece, para qualquer chamador, inclusive o dono, como um arquivo que não existe: ele sai da biblioteca, de todas as listagens, da galeria e de todos os compartilhamentos.

- `GET /v1/download?url=` e `GET /v1/image-proxy?url=` respondem `451` com o código `content_restricted` para o endereço de um arquivo restrito.
- Uma requisição que indica um arquivo restrito como entrada é recusada com `422 job_blocked`. Um nó de workflow que o leria falha com `content_restricted`.
- Um arquivo retido como prova de uma reclamação não pode ser excluído. `DELETE /v1/library/:id` responde `409 content_held` com a mensagem “This file cannot be deleted right now.” (este arquivo não pode ser excluído agora). Uma requisição que exclui vários arquivos o pula.

Quando uma restrição causada por uma reclamação de direitos autorais atinge o seu conteúdo, o Nodaro pode avisar você por e-mail. O e-mail cita o seu arquivo restrito, o link de onde ele foi importado, o motivo, a referência do caso e a página onde você pode enviar uma contranotificação. Uma pessoa que enviou uma reclamação e comprovou o e-mail pode receber uma atualização com a situação e a decisão do caso. Uma pessoa do Nodaro envia cada um desses e-mails. Nenhum é enviado automaticamente.

Para denunciar um conteúdo que você acredita violar os seus direitos, use o formulário de reclamações em `app.nodaro.ai/copyright-complaints`. O app tem links para o formulário na página de login, na barra lateral e no menu da conta. Cada reclamação é tratada por uma pessoa.

## Contranotificações
Quando o seu conteúdo foi restringido após uma notificação de direitos autorais, você pode respondê-la com uma **contranotificação** nos termos do 17 U.S.C. § 512(g)(3). Abra **Configurações › Restrições de conteúdo** no app. A página lista as restrições que uma reclamação causou no seu próprio conteúdo: o que foi restringido e quando, a referência da reclamação e o tipo de reclamação. Ela nunca mostra quem reclamou. A página **Configurações** mostra o caminho até lá apenas quando você tem uma restrição desse tipo.

Uma contranotificação responde a uma restrição. Você só pode enviá-la para uma restrição causada por uma reclamação de direitos autorais, que ainda esteja em vigor e cuja reclamação esteja aberta. Ela informa:

- O seu nome completo, endereço físico, telefone e e-mail.
- O que foi restringido e onde estava antes. O app preenche esses dados para você, em inglês.
- A sua assinatura, que é o seu nome completo digitado.
- A declaração, mostrada palavra por palavra, com cada afirmação confirmada separadamente. Você declara, sob pena de perjúrio, que acredita de boa-fé que o material foi removido ou desativado por engano ou identificação incorreta. Você também aceita a jurisdição do Tribunal Distrital Federal dos Estados Unidos aplicável e a citação feita pela pessoa que reclamou.

Antes do envio, a página avisa que o seu nome, endereço, telefone e e-mail são enviados à pessoa que reclamou, como a lei exige. Você mesmo a envia, conectado ao app. Uma chave de API, um app conectado ou um agente de IA é recusado com `403 in_app_only`. Os seus dados são armazenados criptografados, e nada do que você enviou muda depois.

**Quando o conteúdo pode ser restaurado.** A lei permite uma restauração não antes de 10 nem depois de 14 dias úteis após o recebimento da contranotificação. O Nodaro usa os dias em que todas as leituras dessa regra concordam. A janela abre no 11º dia útil após o recebimento, sem contar os feriados federais dos EUA. O último dia dela é o 14º dia útil, contando todos os dias de semana. Os dias são datas do calendário de Nova York, e o dia 1 é o primeiro dia útil depois do dia do recebimento. Por exemplo, uma contranotificação recebida na segunda-feira, 23 de novembro de 2026, pode ser restaurada de quarta-feira, 9 de dezembro de 2026, a sexta-feira, 11 de dezembro de 2026. Isso porque o Dia de Ação de Graças, em 26 de novembro, não é contado para a abertura.

**O que acontece depois.** Uma pessoa do Nodaro trata cada contranotificação:

- Ela é enviada à pessoa que reclamou. Nada é enviado automaticamente.
- Se a pessoa que reclamou informar uma ação judicial, o conteúdo continua restringido até o fim da ação judicial.
- Uma contranotificação que não é válida, por exemplo uma em que falta um elemento exigido pela lei, é recusada com um motivo que é mostrado a você. O conteúdo continua restringido.
- Caso contrário, o conteúdo é restaurado assim que a janela abre, a menos que outra restrição ou outra reclamação aberta diga respeito ao mesmo conteúdo.

## Infratores reincidentes
Uma reclamação sozinha não é uma infração. Quando o Nodaro considera uma reclamação procedente, ele registra uma **infração** contra a conta. Uma infração pode ser retirada, por exemplo quando um recurso é aceito ou o conteúdo é restaurado após uma contranotificação. Uma infração retirada deixa de contar.

A política de infratores reincidentes define uma **medida** para cada quantidade de infrações vigentes de uma conta dentro de uma janela móvel. A política padrão:

| Infrações vigentes nos últimos 24 meses | Medida |
| --- | --- |
| 1 | Um aviso |
| 2 | Importação de links bloqueada por 30 dias |
| 3 | A conta encerrada |

Uma implantação pode mudar a janela e as etapas. Uma etapa também pode suspender a conta por um número de dias. Uma medida nunca é tomada automaticamente: uma pessoa decide cada uma.

- **Um aviso** é um registro, não uma restrição. Ele é mostrado a você enquanto estiver dentro da janela da política.
- **Importação de links bloqueada** recusa toda importação de link feita pela conta com `403 imports_blocked`, pelo número de dias da etapa ou até ser retirada. Um arquivo enviado do seu próprio dispositivo não é uma importação e não é recusado.
- **A conta suspensa** recusa o login e toda requisição até o fim da suspensão, com `403 access_blocked`. Execuções agendadas e apps publicados param enquanto isso. Uma suspensão sempre tem um fim.
- **A conta encerrada** bloqueia o login e toda requisição, inclusive as importações.

A conta é verificada de novo logo antes de um download começar. Um bloqueio aplicado enquanto um download esperava a vez dele também o recusa, e um bloqueio retirado vale na hora.

**O que você vê.** **Configurações › Restrições de conteúdo** mostra as medidas em vigor na sua conta, o que foi dito a você e até quando. Também mostra os avisos e as infrações registrados dentro da janela da política, cada um pela referência do seu caso, e a duração da janela. Enquanto uma conta está suspensa, o dono dela não consegue fazer login, então o app responde como faz para uma conta bloqueada.

## Perguntas frequentes

### O que é a declaração de direitos de conteúdo?

Um texto curto que a pessoa que importa um link confirma. Ele diz que ela detém os direitos sobre o conteúdo, ou tem a permissão de quem os detém, e que é responsável pela forma como o usa. GET /v1/content-rights/declaration retorna o texto atual e a versão dele.

### Como importo o link de um vídeo com uma confirmação?

Leia a declaração, mostre o texto dela com uma caixa de seleção que começa desmarcada e chame POST /v1/content-rights/confirm com o link quando a caixa for marcada. Envie o id da resposta como confirmationId em POST /v1/download-video.

### Por quanto tempo uma confirmação vale?

Uma confirmação libera um download desse link, pela mesma conta, sob a declaração atual, dentro de uma hora. Confirme de novo para cada nova importação.

### Como as chaves de API e os agentes de IA importam links?

A pessoa autoriza essas importações uma vez, na própria sessão conectada, em Configurações ou com POST /v1/content-rights/authorization. Cada importação pelas chaves de API, apps conectados e agentes de IA dela passa então a ser registrada como uma confirmação derivada dessa autorização.

### Hoje uma confirmação é exigida em toda importação?

Quem decide é a implantação. Enquanto a configuração dela está desativada, uma importação sem confirmação ainda é aceita. Quando ela é ativada, a importação é recusada com 403 rights_confirmation_required. Envie sempre uma confirmação, para que o seu cliente continue funcionando quando a configuração mudar.

### O que posso fazer se o meu conteúdo foi restringido após uma notificação de direitos autorais?

Abra Configurações › Restrições de conteúdo no app e envie uma contranotificação para essa restrição. Se você enviar uma contranotificação válida e a pessoa que reclamou não informar nenhuma ação judicial, o conteúdo pode ser restaurado de 10 a 14 dias úteis depois que o Nodaro a recebe.
