---
title: "Create Bulk Upload Urls"
method: POST
path: "/documents/{child_id}/bulk-upload-urls"
tags: ["documents"]
---

# Create Bulk Upload Urls

`POST /documents/{child_id}/bulk-upload-urls`

## Request

- Base URL: `https://api.projectindi.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.projectindi.com/documents/{child_id}/bulk-upload-urls`
- Auth: none declared

Mint presigned Storage upload URLs for a bulk document upload.

The browser PUTs each file's bytes straight to Storage (no request-size
ceiling), then POSTs the returned paths as job metadata. Access is gated by
``_require_upload_access``: on R2 the presign is a local HMAC that no RLS
sees, so Storage's INSERT policies only ever held on the Supabase backend.

## Path parameters

- `child_id` string, required

## Request body

- BulkUploadUrlsRequest
  - `files` BulkUploadSlotRequest[], required
    - `file_name` string, required
    - `needs_poster` boolean

## Response `200`

Successful Response

- BulkUploadUrlsResponse
  - `slots` BulkUploadSlot[], required
    - `source` BulkUploadSlotUrl, required
      - `signed_url` string, required
      - `storage_path` string, required
    - `poster` BulkUploadSlotUrl
      - `signed_url` string, required
      - `storage_path` string, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/projectindi/apis/indi-agent-api-first-principles.md) - [All operations](https://skmtc.dev/projectindi/apis/indi-agent-api-first-principles/llms.txt) - [OpenAPI document](https://skmtc.dev/projectindi/apis/indi-agent-api-first-principles/revisions/25a7813e21fd?raw)
