> ## Documentation Index
> Fetch the complete documentation index at: https://docs.datasnap.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Geração de Url de Upload

> Gere um token com URL pré-assinada para fazer upload direto de arquivos JSONL para o Oracle Cloud Storage

## Visão Geral

Este endpoint permite gerar **URLs pré-assinadas** para upload direto de arquivos no formato JSONL. É o **primeiro passo** do processo de upload de arquivos na API DataSnap.

<CardGroup cols={2}>
  <Card title="Método" icon="key">
    Gera URLs temporárias e seguras
  </Card>

  <Card title="Segurança" icon="shield">
    URLs expiram automaticamente (1-60 min)
  </Card>

  <Card title="Performance" icon="bolt">
    Upload direto para Oracle Cloud Storage
  </Card>

  <Card title="Escalabilidade" icon="arrows-up-down">
    Suporte a arquivos de qualquer tamanho (recomendamos arquivos de até 10MB para máxima performance)
  </Card>
</CardGroup>

## Autenticação

<Info>
  Este endpoint requer autenticação. Inclua seu token Bearer no cabeçalho Authorization.
</Info>

```bash theme={null}
Authorization: Bearer SEU_TOKEN_AQUI
```

## Parâmetros de Caminho

<ParamField path="slug" type="string" required>
  O slug do schema para o qual você quer gerar o token de upload
</ParamField>

## Corpo da Requisição

<ParamField body="minutes" type="integer" required>
  Número de minutos que a URL de upload deve ser válida (1-60 minutos)
</ParamField>

## Exemplo de Requisição

<RequestExample>
  ```bash cURL (Exemplo Principal) theme={null}
  curl -X POST \
    "https://api.datasnap.cloud/api/v1/schemas/seu-schema/generate-upload-token" \
    -H "Authorization: Bearer SEU_TOKEN_AQUI" \
    -H "Content-Type: application/json" \
    -d '{"minutes": 15}'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://api.datasnap.cloud/api/v1/schemas/seu-schema/generate-upload-token',
    {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer SEU_TOKEN_AQUI',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ minutes: 15 })
    }
  );

  const tokenData = await response.json();
  console.log('Token gerado:', tokenData);
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.datasnap.cloud/api/v1/schemas/seu-schema/generate-upload-token",
      headers={
          "Authorization": "Bearer SEU_TOKEN_AQUI",
          "Content-Type": "application/json"
      },
      json={"minutes": 15}
  )

  token_data = response.json()
  print(f"Token gerado: {token_data}")
  ```
</RequestExample>

## Resposta de Sucesso

<ResponseField name="id" type="integer">
  Identificador único do token de upload gerado
</ResponseField>

<ResponseField name="upload_url" type="string">
  URL pré-assinada para upload direto de arquivos para o Oracle Cloud Storage
</ResponseField>

<ResponseField name="expires_at" type="string">
  Data e hora de expiração da URL de upload no formato ISO 8601
</ResponseField>

<ResponseField name="success" type="boolean">
  Indica se o token foi gerado com sucesso
</ResponseField>

<ResponseExample>
  ```json theme={null}
  {
    "id": 8,
    "upload_url": "{pre_signed_url}",
    "expires_at": "2025-10-03T03:29:08.000000Z",
    "success": true
  }
  ```
</ResponseExample>

## Como Usar o Token Gerado

Após receber a resposta, use a `upload_url` para fazer upload direto do arquivo:

```bash theme={null}
# Usar a URL retornada para upload
curl -X PUT \
  "{pre_signed_url}/dados.jsonl" \
  -H "Content-Type: application/octet-stream" \
  --data-binary "@dados.jsonl"
```

## Validação

<ParamField body="minutes" type="integer">
  O valor deve estar entre 1 e 60 minutos
</ParamField>

## Códigos de Erro

<ResponseField name="200" type="Success">
  Token gerado com sucesso
</ResponseField>

<ResponseField name="401" type="Error">
  Não autorizado - Token de autenticação inválido ou ausente
</ResponseField>

<ResponseField name="422" type="Error">
  Erro de validação - Valor de minutes inválido (deve estar entre 1 e 60)
</ResponseField>

## Próximos Passos

Após gerar o token:

1. **Use a upload\_url** retornada para fazer upload direto via HTTP PUT
2. **Monitore a expiração** - URLs expiram automaticamente
3. **Consulte seus dados** usando o endpoint de consultas após processamento

## Endpoints Relacionados

* [Executar Consultas](/api-reference/endpoint/schema-query-endpoint) - Consultar dados enviados
* [Listar Arquivos](/api-reference/endpoint/schema-files-endpoint) - Gerenciar arquivos enviados
