---
title: "Register uploaded gallery photos"
method: POST
path: "/photos"
tags: ["Media"]
---

# Register uploaded gallery photos

`POST /photos`

## Request

- Base URL: `https://api.aisle.wedding/v1`
- URL: `https://api.aisle.wedding/v1/photos`
- Auth: HTTP bearer

Registers one to sixty Vercel Blob URLs created under this wedding’s signed photo prefix.

This POST has no idempotency-key store. After a lost response, list before retrying, reconcile the resource, and retry only deliberately.

## Request body

- union
  - object
    - `url` string, required
    - `width` integer, required
    - `height` integer, required
    - `section` string
    - `captured_at` string, date-time, nullable
  - object
    - `photos` object[], required
      - `url` string, required
      - `width` integer, required
      - `height` integer, required
      - `section` string
      - `captured_at` string, date-time, nullable

## Response `201`

The requested data.

- PhotoRegistrationResult
  - `data` PublicPhotoRegistration, required
    - `added` integer, required
    - `skipped` integer, required
    - `photos` PublicPhoto[], required
      - `id` string, required
      - `url` string, uri, required
      - `width` integer, required
      - `height` integer, required
      - `section` string, required
      - `captured_at` string, date-time, required: An RFC 3339 UTC timestamp with milliseconds.
      - `sort_index` integer, required
      - `created_at` string, date-time, required: An RFC 3339 UTC timestamp with milliseconds.

## Other responses

- `400`: The request itself could not be read, such as a body that is not a JSON object. A field we refuse is validation_failed instead.
- `401`: The API key is missing, malformed, or no longer valid.
- `402`: The operation requires an active Aisle membership for this wedding.
- `403`: The key is valid but not permitted to do this.
- `404`: No such resource inside the key's wedding.
- `405`: That HTTP method is not supported here. See the Allow header.
- `409`: The request collided with the current state of the resource.
- `415`: A request body must be sent as application/json.
- `422`: The request was well-formed but a field was not acceptable. Every field at fault is named in error.details.
- `429`: Too many requests. Retry after the time given in Retry-After.
- `500`: Something went wrong on our side.

---

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