---
title: "Create or resume an idempotent upload session"
method: POST
path: "/publish-sessions"
tags: ["Publish"]
---

# Create or resume an idempotent upload session

`POST /publish-sessions`

## Request

- Base URL: `https://api.temp.md`
- URL: `https://api.temp.md/publish-sessions`
- Auth: one of:
  - none
  - HTTP bearer
  - HTTP bearer
- TypeScript: <https://skmtc.dev/temp-md/apis/temp-md-public-api/docs/publish-sessions/post.ts> (a function with typed inputs; its response is checked against the schema)

Omit tempId to create. Account authentication makes the new Temp owned immediately. Provide tempId to update with an account API key or scoped update token.

## Headers

- `X-Tempmd-Client` string
- `Idempotency-Key` string, required

## Request body

- CreatePublishSessionInput
  - `files` UploadManifestFile[], required
    - `path` string, required
    - `size` integer, required
    - `contentType` string, required
    - `hash` string, required
  - `tempId` string
  - `title` string
  - `spaMode` boolean

## Response `200`

Existing finalized session

- PublishSession
  - `sessionId` string, required
  - `tempId` string, required
  - `versionId` string, required
  - `operation` 'create' | 'update', required
  - `status` 'pending' | 'ready' | 'failed' | 'expired', required
  - `uploadToken` string, required
  - `uploads` PublishSessionFile[], required
    - `fileId` string, required
    - `path` string, required
    - `size` integer, required
    - `contentType` string, required
    - `hash` string, required
    - `status` 'expected' | 'uploaded', required
    - `method` 'PUT', required
    - `url` string, uri, required
    - `headers` object, required
  - `skipped` string[], required
  - `finalizeUrl` string, uri, required
  - `statusUrl` string, uri, required
  - `expiresAt` string, date-time, required

## Other responses

- `201`: Session ready for uploads
- `400`: Invalid request
- `401`: Authentication required or invalid
- `403`: Credential lacks access
- `409`: Request conflicts with current state
- `413`: Request or bundle exceeds an enforced limit
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/temp-md/apis/temp-md-public-api.md) - [All operations](https://skmtc.dev/temp-md/apis/temp-md-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/temp-md/apis/temp-md-public-api/revisions/4753682e1e3a?raw)
