---
title: "Vercel Blob upload-completed webhook"
method: POST
path: "/api/v1/uploads/complete"
tags: ["Uploads"]
---

# Vercel Blob upload-completed webhook

`POST /api/v1/uploads/complete`

## Request

- Base URL: `http://localhost:3002`
- URL: `http://localhost:3002/api/v1/uploads/complete`
- Auth: HTTP bearer

Called by Vercel Blob after a client upload finishes. Signature verification is delegated to @vercel/blob/client.handleUpload. iOS clients do NOT call this endpoint — it's documented here for completeness only.

## Request body

- BlobWebhookBody
  - `type` 'blob.generate-client-token' | 'blob.upload-completed', required: Vercel Blob event type. Set by the Vercel Blob service; not authored by clients of the Charter Captain API.

## Response `200`

Webhook handled

## Other responses

- `400`: Invalid body, malformed clientPayload, or persistence failure

---

[API](https://skmtc.dev/chartercaptain/apis/charter-captain-api.md) · [All operations](https://skmtc.dev/chartercaptain/apis/charter-captain-api/llms.txt) · [OpenAPI document](https://skmtc.dev/chartercaptain/apis/charter-captain-api/revisions/1ffea1113adb?raw)
