---
title: "Point companies and programs at their self-hosted logos and photos"
method: PUT
path: "/v1/admin/media"
tags: ["Admin"]
---

# Point companies and programs at their self-hosted logos and photos

`PUT /v1/admin/media`

## Request

- Base URL: `http://api.technooptimist.io`
- URL: `http://api.technooptimist.io/v1/admin/media`
- Auth: HTTP bearer

One `SeedMediaFile` (packages/db/seed/media/<frontier>.json). Sets companies.logo_url and programs.image_url to the listed files; ship the files with the web app first. Unknown companies/programs are reported in `missing`.

## Headers

- `x-routine-name` string: Name of the routine making the write; recorded as `routine:<name>` in the audit log.

## Request body

- object
  - `logos` object
  - `programs` object
  - `mechanisms` object

## Response `200`

Applied

- MediaWriteResult
  - `ok` true, required
  - `logos` integer, required
  - `images` integer, required
  - `missing` string[], required

## Other responses

- `401`: Missing or invalid credentials
- `403`: Credential lacks the required scope
- `404`: Not found
- `409`: Conflict
- `422`: Validation failed

---

[API](https://skmtc.dev/technooptimist/apis/the-techno-optimist-api.md) · [All operations](https://skmtc.dev/technooptimist/apis/the-techno-optimist-api/llms.txt) · [OpenAPI document](https://skmtc.dev/technooptimist/apis/the-techno-optimist-api/revisions/b7bcde6a0f30?raw)
