---
title: "S3 upload-completed webhook"
method: POST
path: "/i/webhooks/s3"
tags: ["webhooks"]
---

# S3 upload-completed webhook

`POST /i/webhooks/s3`

Internal endpoint called by S3/LocalStack. Authenticated via the X-Webhook-Secret header, not a JWT.

## Headers

- `X-Webhook-Secret` string, required

## Request body

- HttpS3WebhookPayload
  - `Records` HttpS3WebhookRecord[]
    - `eventName` string
    - `eventSource` string
    - `s3` HttpS3WebhookDetail
      - `bucket` HttpS3WebhookBucket
        - `name` string
      - `object` HttpS3WebhookObject
        - `key` string
        - `size` integer
        - `userMetadata` object

## Response `200`

No Content

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `500` — Internal Server Error

---

[API](https://skmtc.dev/earnation/apis/earnation-api.md) · [All operations](https://skmtc.dev/earnation/apis/earnation-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/earnation/earnation-api/revisions/1219d1bf2177/schema)
