---
title: "Confirm a signed upload"
method: POST
path: "/attachments/{id}/confirm"
tags: ["Attachments"]
---

# Confirm a signed upload

`POST /attachments/{id}/confirm`

## Request

- Base URL: `https://sending.dev/api/v1`
- URL: `https://sending.dev/api/v1/attachments/{id}/confirm`
- Auth: HTTP bearer

Marks as ready an attachment uploaded with `uploadUrl`, aligning actual size and Content-Type. Optional: the same check happens the first time the attachment is used in a send. Required scope: `email:send` or `inbox:send`. An attachment uploaded once is reused across sends: pass `attachments: [{ id }]` to `/emails`, `/messages`, `/campaigns` or `/inboxes/{id}/send`.

## Path parameters

- `id` string, required: Attachment ID.

## Response `200`

Attachment ready to use.

- AttachmentEnvelope
  - `attachment` Attachment, required
    - `id` string, uuid, required
    - `filename` string, required
    - `contentType` string, required
    - `size` integer, required: File size in bytes.
    - `status` 'pending' | 'ready', required: `pending` until the signed upload is confirmed.
    - `createdAt` string, date-time, required

## Other responses

- `401`: Missing or invalid token.
- `403`: Insufficient scope.
- `404`: Resource not found.
- `409`: The file has not been uploaded yet (`attachment_not_uploaded`).
- `422`: Invalid input.

---

[API](https://skmtc.dev/sending/apis/sending-dev-api.md) · [All operations](https://skmtc.dev/sending/apis/sending-dev-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sending/apis/sending-dev-api/revisions/9fe78d2918a1?raw)
