# Genesis

The **genesis** is the process by which an Harmonize environment is initialized. Upon system deployment, it is mandatory to define a **primary domain**, together with a suitable set of **users** and **policies**, such that the system can be operated using regular workflows. At minimum, one user and one policy must be defined, but a whole array of users and policies can be defined in order to render the Harmonize bootstrapping an atomic process.

The input request body contains two sections, namely the `rootDomainSetup` and the `cryptoSetup`. The former is akin to a regular new domain creation payload, while the latter is used to select the cryptographic algorithms to be used by the system.

Of particular importance, at genesis level, is the setting up of a **breakglass**, i.e., a protection mechanism against possible mis-usage of the policy engine that will allow to restore the system in case of wrong user manipulation. Enabling this feature is achieved by setting the property `governingStrategy` to `CoerceDescendants`. More information on this feature can be found in the developer documentation.

Calls to the genesis route are not authenticated, since the system has no active users at this stage.

Running Genesis on a new installation includes two properties in the `GenesisSucceeded` notary event:
- `genesis`: a data structure holding the notary signed original genesis payload
- `createdEntitiesReferences`: with key information on the data created

## Run the genesis

 - [POST /v1/genesis](https://docs.ripple.com/products/custody/devbox/genesis/rungenesis.md)

