---
title: "Create or update a frontier and its fields"
method: PUT
path: "/v1/admin/frontiers"
tags: ["Admin"]
---

# Create or update a frontier and its fields

`PUT /v1/admin/frontiers`

## Request

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

Same shape as a seed file's `frontier` + `fields`. Fields are upserted by slug in the given order (that order is the radial order); fields left out are kept.

## Headers

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

## Request body

- object
  - `frontier` object, required
    - `slug` string, required
    - `name` string, required
    - `description` string, required
    - `sortOrder` integer, required
    - `explainer` string[], required
    - `checkedAt` string
  - `fields` object[], required
    - `slug` string, required
    - `name` string, required
    - `blurb` string, required
    - `explainer` string[], required

## Response `200`

Upserted

- FrontierWriteResult
  - `ok` true, required
  - `slug` string, required
  - `fields` 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)
