---
title: "Complete a direct newsletter media upload"
method: POST
path: "/newsletter-asset-uploads/{token}"
tags: ["Newsletters"]
---

# Complete a direct newsletter media upload

`POST /newsletter-asset-uploads/{token}`

## Request

- Base URL: `https://shipmail.to/api/v1`
- URL: `https://shipmail.to/api/v1/newsletter-asset-uploads/{token}`
- Auth: none required

Verify the object uploaded to the prepared storage URL, register it as a newsletter asset, and consume the completion token. The stored object must match the prepared filename, content type, byte size, and SHA-256 digest. This endpoint accepts no media bytes and requires no API-key authentication.

## Response `201`

Stored object verified, newsletter asset created, and completion token consumed.

- NewsletterAsset
  - `object` 'newsletter_asset', required
  - `id` string, required
  - `kind` 'image' | 'video', required
  - `filename` string, required
  - `content_type` string, required
  - `byte_size` integer, required
  - `checksum_sha256` string, required
  - `url` string, uri, required
  - `thumbnail_url` string, uri, nullable
  - `thumbnail_content_type` string, nullable
  - `thumbnail_byte_size` integer, nullable
  - `duration_seconds` number, nullable
  - `width` integer, nullable
  - `height` integer, nullable
  - `created_at` string, date-time, required
  - `image_url` string, uri, nullable, required
  - `video_url` string, uri, nullable, required

## Other responses

- `404`: Resource not found.
- `422`: Validation failed.

---

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