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

# Anexos

> Upload directo para S3 e referência do ficheiro num email.

O upload de ficheiros no Sendaki segue um fluxo de 3 passos, desenhado para que o ficheiro **nunca passe pelo Sendaki** — vai directo do teu servidor (ou browser) para o S3.

<Steps>
  <Step title="Pede uma presigned URL">
    `POST /attachments/presign` devolve uma URL temporária de upload e uma `key`.
  </Step>

  <Step title="Faz o upload directo para o S3">
    `PUT` para a URL devolvida, com o conteúdo do ficheiro.
  </Step>

  <Step title="Referencia a key no envio">
    Usa a `key` no campo `attachments` de `POST /emails`.
  </Step>
</Steps>

## 1. Gerar a URL de upload

```bash theme={null}
curl -X POST https://awsapi.sendaki.tech/attachments/presign \
  -H "x-api-key: {a_tua_api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "filename": "fatura-001.pdf",
    "content_type": "application/pdf",
    "org_id": "org_123"
  }'
```

```json theme={null}
201 Created
{
  "url": "https://sendaki.s3.us-east-1.amazonaws.com/attachments/org123/1778360121432-fatura-001.pdf?X-Amz-Algorithm=...",
  "key": "attachments/org123/1778360121432-fatura-001.pdf",
  "expires_in": 3600
}
```

<Warning>A URL de upload expira em 1 hora.</Warning>

### Content types comuns

| Tipo de ficheiro | `content_type`                                                            |
| ---------------- | ------------------------------------------------------------------------- |
| PDF              | `application/pdf`                                                         |
| Word (.docx)     | `application/vnd.openxmlformats-officedocument.wordprocessingml.document` |
| Excel (.xlsx)    | `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`       |
| Imagem JPEG      | `image/jpeg`                                                              |
| Imagem PNG       | `image/png`                                                               |
| Texto            | `text/plain`                                                              |
| ZIP              | `application/zip`                                                         |
| Genérico         | `application/octet-stream` (default)                                      |

## 2. Upload directo para o S3

<CodeGroup>
  ```bash cURL theme={null}
  curl -X PUT "{url_devolvida}" \
    -H "Content-Type: application/pdf" \
    --data-binary @fatura-001.pdf
  ```

  ```javascript JavaScript theme={null}
  const { url, key } = await fetch("/attachments/presign", {
    method: "POST",
    headers: { "x-api-key": SENDAKI_API_KEY, "Content-Type": "application/json" },
    body: JSON.stringify({ filename: "fatura-001.pdf", org_id: "org_123", content_type: "application/pdf" }),
  }).then((r) => r.json());

  await fetch(url, {
    method: "PUT",
    headers: { "Content-Type": "application/pdf" },
    body: ficheiro, // File ou Blob
  });

  // Guarda a key para usar em POST /emails
  ```
</CodeGroup>

## 3. Enviar o email com o anexo

Usa a `key` devolvida no passo 1 no campo `attachments` — ver [Enviar emails](/guides/sending-emails#com-anexos).

```json theme={null}
{
  "attachments": [
    {
      "filename": "fatura-001.pdf",
      "key": "attachments/org123/1778360121432-fatura-001.pdf",
      "content_type": "application/pdf"
    }
  ]
}
```

## Download de um anexo

`GET /attachments/download` gera uma presigned URL temporária de download (expira em 1 hora):

```bash theme={null}
curl "https://awsapi.sendaki.tech/attachments/download?key=attachments/org123/1778360121432-fatura-001.pdf" \
  -H "x-api-key: {a_tua_api_key}"
```

## Apagar um anexo

Apagar é permanente e irreversível — usa apenas para uploads abandonados (email nunca enviado) ou quando o email associado é apagado.

```bash theme={null}
curl -X DELETE "https://awsapi.sendaki.tech/attachments/delete?key=attachments/org123/1778360121432-fatura-001.pdf" \
  -H "x-api-key: {a_tua_api_key}"
```

## Organização no S3

```
sendaki (bucket)
  └── attachments/
        └── {org_id}/
              └── {timestamp}-{filename}
```

O bucket é privado — ficheiros nunca são acessíveis sem uma presigned URL válida.

Ver a referência completa em [Attachments](/api-reference/introduction).
