---
title: "Saves changes to some files as a new version"
method: POST
path: "/lambdas/{privateKey}/versions/changes"
tags: ["Versions"]
---

# Saves changes to some files as a new version

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

## Request

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

Files that are not named stay as they are, so a small change does not send every file again. The changes are
applied in this order: `remove` takes files out, `files` adds files or replaces those of the same name, and `edits`
replaces text within files - each `find` has to occur exactly once in its file, or nothing is saved. What results
has to be a valid lambda, as for any save.

## Path parameters

- `privateKey` string, required

## Query parameters

- `deploy` boolean

## Request body

- VersionChangeRequest: Changes to make to some files, saved as the next version or into a feature.
  - `Files` LambdaFile[], nullable: Files to add, or to replace where one of that name exists
    - `Name` string: Its path, with forward slashes: `lambda.cs`, `Store.cs`, `resources/web/index.html`, `docs/product.md`. Case sensitive, and also what the compiler's messages name.
    - `Code` string: Its content: the text itself, or base64 where `encoding` says so
    - `Encoding` string, nullable: `base64` for a file that is not text - a picture, a font; left out for text. C# files are always text.
    - `IsCompiled` boolean
    - `IsCode` boolean
    - `IsResource` boolean
    - `Bytes` string, byte
  - `Remove` string[], nullable: Names of files to remove. Each has to exist.
  - `Edits` FileEdit[], nullable: Replacements of text within files, applied after the files were added and removed
    - `File` string: The name of the file to change, which has to be text
    - `Find` string: The text to replace, exactly as it is in the file. It has to occur exactly once - include more of what surrounds it where it occurs more often.
    - `Replace` string: What to put in its place; empty removes it
  - `Specification` string, nullable: What the user wants from this change and why. Optional, and cut past 4000 characters.
  - `Change` string, nullable: What this change does, in one line for the owner. Optional, and cut past 500 characters.

## 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`: Nothing to change, a file to remove or edit that does not exist, a `find` that occurs never or more than once, or a result that cannot be a lambda. Nothing was saved.
- `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)
