---
title: "Saves a zip archive as a new version"
method: POST
path: "/lambdas/{privateKey}/versions/zip"
tags: ["Versions"]
---

# Saves a zip archive as a new version

`POST /lambdas/{privateKey}/versions/zip`

## Request

- Base URL: `https://genhttp.dev/api/v1`
- URL: `https://genhttp.dev/api/v1/lambdas/{privateKey}/versions/zip`
- Auth: none declared

The archive replaces every file, so it has to hold all of them: a file it leaves out is not in the new version.

It is read as a commit of the files would be. A single folder around everything is removed. A git repository is
skipped, and so is what the `.gitignore` files in the archive leave out - except files the newest version already
has, which are kept as git keeps what it tracks. Other dot files of the code are kept; hidden files among the
resources are skipped. Text files are kept as text, anything that is not UTF-8 as base64. With `?layout=project`
the archive is read as a clone of the lambda's git repository has it, and the platform's own files are left out.

The archive is counted as it is sent, before anything is left out, against what a version may come to. Zip what a
commit would hold - never what a build installed (`node_modules`, for example).

## Path parameters

- `privateKey` string, required

## Query parameters

- `deploy` boolean
- `specification` string
- `change` string
- `layout` string

## Response `201`

The version was saved. If it was to be deployed as well, `deployment` says whether that worked.

- SavedVersionResponse: A version that was just saved.
  - `Version` integer: Its number
  - `Created` string, date-time: When it was saved
  - `Specification` string, nullable: What the user wanted and why, as it was kept
  - `Change` string, nullable: What it changes, as it was kept
  - `Origin` string, nullable: How it was saved
  - `Deployment` DeploymentOutcomeResponse: What came of an attempt to put a version online.
    - `Success` boolean: Whether it compiled and is online now. Where it is not, whatever was online before still is.
    - `Lambda` LambdaResponse: A lambda, as whoever holds its editor key sees it.
      - `PublicKey` string: Names its address below the hosting domain. Not a secret; its owner may change it.
      - `PrivateKey` string: The editor key, which authorizes every call about the lambda. Treat it like a password.
      - `Tier` string: `Free`, `Premium` or `Demo`, assigned by the operator. Decides its limits, whether it is kept online while nobody uses it, and whether it may answer at a domain of its own.
      - `Created` string, date-time: When it was created
      - `Modified` string, date-time: When something about it last changed: a save, a deployment, a setting
      - `ActiveVersion` integer, nullable: The version that is online; absent while nothing is
      - `LatestVersion` integer, nullable: The newest version saved, which may be ahead of the one online
      - `PublicUrl` string: Its address below the hosting domain, named after its public key: `https://quiz.genhttp.run/`. While it answers at a domain of its own, this address sends its visitors on to the domain.
      - `EditorPath` string: Where its editor is on this site: `/editor/{privateKey}`. Holds the editor key.
      - `DeployedAt` string, date-time, nullable: When the version online went online; absent while nothing is
      - `DeployedUntil` string, date-time, nullable: When it is taken offline unless it is visited or edited before then - each visit and each edit moves this on. Absent while it is offline, and for a tier that keeps it online.
      - `KeptUntil` string, date-time, nullable: When it is deleted unless it is visited or edited before then. Absent for a tier that keeps it.
      - `Domain` string, nullable: The domain of its own it is configured to answer at, whether or not its tier lets it
      - `DomainServed` boolean: Whether it answers at that domain: it has one, and its tier includes it
      - `Address` string: Where to link to it: its domain while that is served, `publicUrl` otherwise
      - `View` string: How its editor opens for somebody who has not chosen a view of their own: `Full` or `Simple`
      - `GitPath` string: Where it is cloned with git and pushed to, on this site. The versions are the commits of `main`, the features the other branches. Holds the editor key, like the editor's path.
    - `Diagnostics` CompilationDiagnostic[]: What the compiler said: the errors that kept it offline, or the warnings of a version that went online
      - `Severity` string: `Error`, which keeps the code from going online, or `Warning`
      - `Id` string: What kind of message it is: the C# compiler's (`CS1002`), `LAMBDA0001` for something lambdas may not do, `LAMBDA0002` for a handler the platform cannot serve, or `LAMBDA` for anything else the platform refused
      - `Message` string: What is wrong, and often what to do about it
      - `Line` integer: The line in the file, counting from 1; 0 when it is about no line
      - `Column` integer: The column in the line, counting from 1; 0 when it is about no line
      - `File` string, nullable: The name of the file it is in, as the lambda names it; absent when it is about none of them

## Other responses

- `400`: The body is not a zip archive, it is larger than a version may be, it has no `lambda.cs`, or a file in it cannot be part of a lambda. The message says which.
- `403`: The lambda is a demo, which anybody may read and nobody may change. Create a lambda of your own from it instead: `POST /lambdas` with the demo's id as `template`.
- `404`: No lambda has this editor key. A key that never existed and the key of a deleted lambda are answered alike.

---

[API](https://skmtc.dev/genhttp/apis/genhttp-lambda-api.md) · [All operations](https://skmtc.dev/genhttp/apis/genhttp-lambda-api/llms.txt) · [OpenAPI document](https://skmtc.dev/genhttp/apis/genhttp-lambda-api/revisions/8b36699e03df?raw)
