diff --git a/CHANGELOG.md b/CHANGELOG.md
index 10652f17f2f515bb408d91ffc2f18564c7452f1d..5f7f14fe7acbd998efbb1b30f63778447784a055 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,16 +5,47 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
-## [Unreleased]
+## [0.1] 2021-11-08
+(Timm Fitschen)
+
+The initial release contains two separate GRPC APIs, one for transactions of
+entities (Entity API) and one for general information about the server.
+
+Note that the authentication of clients (and/or servers) is not defined as
+a protobuf API. Instead, the server should provide authentication schemes based
+on the transport protocols (usually HTTP/2) and indicate the options in its own
+documentation.
 
 ### Added
 
-### Changed
+#### Entity API (v1)
+
+The Entity API defines entities, the first-class citizens of CaosDB and the
+transactions for insertion, updates, retrieval and deletion of entities and the
+upload and download of binary files.
+
+Entities can be retrieved by id or by query. Several entities can be processed
+in a single transaction and the transaction types (insertion, update, deletion,
+retrieval) can be mixed in a single transaction.
+
+Notable current limitations of the API:
+
+ * The error handling is still not perfect. Properties cannot have messages
+   right now and only a few error messages are defined in the API.
+ * The version message can only represent the version id of an entity. The
+   history cannot be retrieved.
+ * The entity's access control lists cannot be changed or retrieved.
+ * The entity state cannot be changed or retrieved.
+ * A lot of flags (e.g. inheritance among other things) which are implemented
+   in the REST API of CaosDB are not supported.
 
-### Deprecated
+The current release is designed in a way that these limitation can be be
+overcome in future releases of the API without breaking backwards compatibility.
 
-### Removed
+#### Info API (v1)
 
-### Fixed
+The Info API is strict read-only API which provides useful non-confidential
+information about the server.
 
-### Security
+The initial release of this API is quite limited. Only the server version can
+be retrieved.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2f4e90751de80e4ba4d15a40abf599f03119d9e4..f7dc3f92231f8d450013eddade871952aa699f3c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,7 +20,7 @@
 
 cmake_minimum_required(VERSION 3.13)
 
-set(CAOSDB_PROTO_VERSION 0.0.10)
+set(CAOSDB_PROTO_VERSION 0.1.0)
 
 project("caosdb-proto"
     VERSION ${CAOSDB_PROTO_VERSION}
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 9de921c9981572e001ee41e37f4ef7a36ccd30d8..ca5a13a3949c295fc980ecd3e9173d5315e4a9b6 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -55,13 +55,14 @@ further defined and clarified by project maintainers.
 ## Enforcement
 
 Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by contacting the project team at **t.fitschen (AT) indiscale.com**,
-**d.hornung (AT) indiscale.com**, **a.schlemmer (AT) indiscale.com**, or
-**h.tomwoerden (AT) indiscale.com**.  All complaints will be
-reviewed and investigated and will result in a response that
-is deemed necessary and appropriate to the circumstances. The project team is
-obligated to maintain confidentiality with regard to the reporter of an incident.
-Further details of specific enforcement policies may be posted separately.
+reported by contacting the project team at **s.rohde (AT) indiscale.com**,
+**t.fitschen (AT) indiscale.com**, **d.hornung (AT) indiscale.com**,
+**a.schlemmer (AT) indiscale.com**, or **h.tomwoerden (AT) indiscale.com**.
+All complaints will be reviewed and investigated and will result in a response
+that is deemed necessary and appropriate to the circumstances. The project team
+is obligated to maintain confidentiality with regard to the reporter of an
+incident. Further details of specific enforcement policies may be posted
+separately.
 
 Project maintainers who do not follow or enforce the Code of Conduct in good
 faith may face temporary or permanent repercussions as determined by other
diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md
index 15b3e417102aa64e1c46208d609e5a1415d6080b..fb4f36a908730c83db79e41453fef3ea1aa3bd93 100644
--- a/DEPENDENCIES.md
+++ b/DEPENDENCIES.md
@@ -1,5 +1,6 @@
 # GENERAL
 
+No dependencies.
 
 # BUILD DOCS
 
@@ -12,7 +13,8 @@
 
 # LINTING
 
-* >=buf-0.43.2
+* Dependencies from BUILD DOCS
+* >=buf-0.43.2 (install via pip)
 
 # FORMATTING
 
diff --git a/HUMANS.md b/HUMANS.md
index 3104ed33f893da734c04d97b694bc2c1126ac519..9f62dadda4f90cfb968b689ce66066a3ed5f2666 100644
--- a/HUMANS.md
+++ b/HUMANS.md
@@ -1,3 +1,4 @@
 # Active Contributors
 
 * Timm Fitschen <t.fitschen@indiscale.com>
+* Daniel Hornung <d.hornung@indiscale.com>
diff --git a/RELEASE_GUIDELINES.md b/RELEASE_GUIDELINES.md
index a4ef6e55a76bb0eeca84d814f46b9c5161217595..6dc4fafcb338ed88b7fa03798b09624d8c51f538 100644
--- a/RELEASE_GUIDELINES.md
+++ b/RELEASE_GUIDELINES.md
@@ -7,7 +7,6 @@ guidelines of the CaosDB Project
 ## General Prerequisites
 
 * All tests are passing.
-* FEATURES.md is up-to-date and a public API is being declared in that document.
 * CHANGELOG.md is up-to-date.
 * DEPENDENCIES.md is up-to-date.
 
@@ -28,5 +27,3 @@ guidelines of the CaosDB Project
 6. Tag the latest commit of the main branch with `v<VERSION>`.
 
 7. Delete the release branch.
-
-8. TODO...
diff --git a/proto/caosdb/CMakeLists.txt b/proto/caosdb/CMakeLists.txt
index 2c820d599a8bcdc05fb3d058123f7e5299f7c3e0..f7fa61531e3c135afc139c41337d8a59a3cca39f 100644
--- a/proto/caosdb/CMakeLists.txt
+++ b/proto/caosdb/CMakeLists.txt
@@ -19,8 +19,8 @@
 #
 
 set(CAOSDB_API_PACKAGES
-    caosdb.info.v1alpha1
-    caosdb.entity.v1alpha1
+    caosdb.info.v1
+    caosdb.entity.v1
     caosdb.acm.v1alpha1
     )
 
diff --git a/proto/caosdb/entity/v1alpha1/main.proto b/proto/caosdb/entity/v1/main.proto
similarity index 71%
rename from proto/caosdb/entity/v1alpha1/main.proto
rename to proto/caosdb/entity/v1/main.proto
index 605711e0e3378449eed4b44d6cb220b003899d5e..db89ef5fb57d31c16608a71300251318fca5b2e3 100644
--- a/proto/caosdb/entity/v1alpha1/main.proto
+++ b/proto/caosdb/entity/v1/main.proto
@@ -18,12 +18,12 @@
 // along with this program. If not, see <https://www.gnu.org/licenses/>.
 //
 
-// This is the main file of the caosdb.entity.v1alpha1 package.
+// This is the main file of the caosdb.entity.v1 package.
 syntax                      = "proto3";
 option  java_multiple_files = true;
-option  java_package        = "org.caosdb.api.entity.v1alpha1";
+option  java_package        = "org.caosdb.api.entity.v1";
 option  cc_enable_arenas    = true;
-package caosdb.entity.v1alpha1;
+package caosdb.entity.v1;
 
 // Data type for references to other entities.
 message ReferenceDataType {
@@ -137,258 +137,195 @@ enum MessageCode {
   // code was not in this list. An unknown error code is a sign of a wrong otr
   // out-dated implementation on either side.
   MESSAGE_CODE_UNKNOWN = 1;
+
   // The requested entity (retrieve, delete, or update) does not exist.
   MESSAGE_CODE_ENTITY_DOES_NOT_EXIST = 2;
+
   // The entity has no properties.
   MESSAGE_CODE_ENTITY_HAS_NO_PROPERTIES = 3;
 
-  // TODO(tf) This entity has been deleted successfully.
-  MESSAGE_CODE_ENTITY_HAS_BEEN_DELETED_SUCCESSFULLY = 5;
-
-  // TODO(tf) Entity has unqualified properties.
-  MESSAGE_CODE_ENTITY_HAS_UNQUALIFIED_PROPERTIES = 6;
-
-  // TODO(tf) Entity has unqualified parents.
-  MESSAGE_CODE_ENTITY_HAS_UNQUALIFIED_PARENTS = 7;
-
-  // TODO(tf) DESCRIPTION!!!
-  MESSAGE_CODE_PARSING_FAILED = 8;
-
-  // TODO(tf) Unknown datatype.
-  MESSAGE_CODE_UNKNOWN_DATATYPE = 9;
-
-  // TODO(tf) Unknown importance.
-  MESSAGE_CODE_UNKNOWN_IMPORTANCE = 10;
-
-  // TODO(tf) Entity has no ID.
-  MESSAGE_CODE_ENTITY_HAS_NO_ID = 11;
-
-  // TODO(tf) Entity is required by other entities which are not to be deleted.
-  MESSAGE_CODE_REQUIRED_BY_PERSISTENT_ENTITY = 12;
-
-  // TODO(tf) Property has no datatype.
-  MESSAGE_CODE_NO_DATATYPE = 13;
-
-  // TODO(tf) Entity has no description.
-  MESSAGE_CODE_ENTITY_HAS_NO_DESCRIPTION = 14;
-
-  // TODO(tf) Entity has no name.
-  MESSAGE_CODE_ENTITY_HAS_NO_NAME = 15;
-
-  // TODO(tf) An obligatory property is missing.
-  MESSAGE_CODE_OBLIGATORY_PROPERTY_MISSING = 16;
+  // This entity has been deleted successfully.
+  MESSAGE_CODE_ENTITY_HAS_BEEN_DELETED_SUCCESSFULLY = 4;
 
-  // TODO(tf) Entity has no parents.
-  MESSAGE_CODE_ENTITY_HAS_NO_PARENTS = 17;
+  // On insert or update: Entity has unqualified properties.
+  MESSAGE_CODE_ENTITY_HAS_UNQUALIFIED_PROPERTIES = 5;
 
-  // TODO(tf) Entity can not be identified due to name duplicates.
-  MESSAGE_CODE_NAME_DUPLICATES = 18;
+  // On insert or update: Entity has unqualified parents.
+  MESSAGE_CODE_ENTITY_HAS_UNQUALIFIED_PARENTS = 6;
 
-  // TODO(tf) Entity has no name and no ID.
-  MESSAGE_CODE_ENTITY_HAS_NO_NAME_AND_NO_ID = 19;
+  // On update: Entity, Property or Parent has no ID and the server is
+  // configured to require a valid ID for all entities which are to be updated
+  // and for their properties and parents as well.
+  MESSAGE_CODE_ENTITY_HAS_NO_ID = 7;
 
-  // TODO(tf) Reference property has no refid.
-  MESSAGE_CODE_REFERENCE_HAS_NO_REFID = 20;
+  // On delete: Entity is required by other entities which are not to be
+  // deleted.
+  MESSAGE_CODE_REQUIRED_BY_PERSISTENT_ENTITY = 8;
 
-  // TODO(tf) No target path specified.
-  MESSAGE_CODE_NO_TARGET_PATH = 21;
+  // Property has no datatype.
+  MESSAGE_CODE_PROPERTY_HAS_NO_DATA_TYPE = 9;
 
-  // TODO(tf) This target path is not allowed.
-  MESSAGE_CODE_TARGET_PATH_NOT_ALLOWED = 22;
+  // Entity has no description.
+  MESSAGE_CODE_ENTITY_HAS_NO_DESCRIPTION = 10;
 
-  // TODO(tf) This target path does already exist.
-  MESSAGE_CODE_TARGET_PATH_EXISTS = 23;
+  // Entity has no name.
+  MESSAGE_CODE_ENTITY_HAS_NO_NAME = 11;
 
-  // TODO(tf) Entity has no unit.
-  MESSAGE_CODE_ENTITY_HAS_NO_UNIT = 24;
+  // On insert or update: An obligatory property is missing.
+  MESSAGE_CODE_OBLIGATORY_PROPERTY_MISSING = 12;
 
-  // TODO(tf) Cannot parse value.
-  MESSAGE_CODE_CANNOT_PARSE_VALUE = 25;
+  // On insert or update: Entity has no parents.
+  MESSAGE_CODE_ENTITY_HAS_NO_PARENTS = 13;
 
-  // TODO(tf) Checksum test failed. File is corrupted.
-  MESSAGE_CODE_CHECKSUM_TEST_FAILED = 26;
+  // No target path specified.
+  MESSAGE_CODE_FILE_HAS_NO_TARGET_PATH = 14;
 
-  // TODO(tf) Size test failed. File is corrupted.
-  MESSAGE_CODE_SIZE_TEST_FAILED = 27;
+  // This target path is not allowed.
+  MESSAGE_CODE_TARGET_PATH_NOT_ALLOWED = 15;
 
-  // TODO(tf) Could not create parent folder in the file system.
-  MESSAGE_CODE_CANNOT_CREATE_PARENT_FOLDER = 28;
+  // This target path does already exist.
+  MESSAGE_CODE_TARGET_PATH_EXISTS = 16;
 
-  // TODO(tf) File has not been uploaded.
-  MESSAGE_CODE_FILE_HAS_NOT_BEEN_UPLOAED = 29;
+  // Property has no unit.
+  MESSAGE_CODE_PROPERTY_HAS_NO_UNIT = 17;
 
-  // TODO(tf) Thumbnail has not been uploaded.
-  MESSAGE_CODE_THUMBNAIL_HAS_NOT_BEEN_UPLOAED = 30;
+  // Cannot parse value.
+  MESSAGE_CODE_CANNOT_PARSE_VALUE = 18;
 
-  // TODO(tf) Could not move file to it's target folder.
-  MESSAGE_CODE_CANNOT_MOVE_FILE_TO_TARGET_PATH = 31;
+  // Checksum test failed. File is corrupted.
+  MESSAGE_CODE_CHECKSUM_TEST_FAILED = 19;
 
-  // TODO(tf) Cannot parse value to datetime format
-  // (yyyy-mm-dd'T'hh:mm:ss[.fffffffff][TimeZone]).
-  MESSAGE_CODE_CANNOT_PARSE_DATETIME_VALUE = 32;
+  // Size test failed. File is corrupted.
+  MESSAGE_CODE_SIZE_TEST_FAILED = 20;
 
-  // TODO(tf) Cannot parse value to double.
-  MESSAGE_CODE_CANNOT_PARSE_DOUBLE_VALUE = 33;
+  // Cannot create parent folder in the file system.
+  MESSAGE_CODE_CANNOT_CREATE_PARENT_FOLDER = 21;
 
-  // TODO(tf) Cannot parse value to integer.
-  MESSAGE_CODE_CANNOT_PARSE_INT_VALUE = 34;
+  // File has not been uploaded.
+  MESSAGE_CODE_FILE_HAS_NOT_BEEN_UPLOAED = 22;
 
-  // TODO(tf) Cannot parse value to boolean (either 'true' or 'false', ignoring
-  // case).
-  MESSAGE_CODE_CANNOT_PARSE_BOOL_VALUE = 35;
+  // Cannot move file to it's target folder.
+  MESSAGE_CODE_CANNOT_MOVE_FILE_TO_TARGET_PATH = 23;
 
-  // TODO(tf) Could not connect to MySQL server.
-  MESSAGE_CODE_CANNOT_CONNECT_TO_DATABASE = 36;
+  // Cannot parse value as datetime value.
+  MESSAGE_CODE_CANNOT_PARSE_DATETIME_VALUE = 24;
 
-  // TODO(tf) Please check if your MySQL has all required procedures installed.
-  MESSAGE_CODE_MYSQL_PROCEDURE_EXCEPTION = 37;
+  // Cannot parse value as double value.
+  MESSAGE_CODE_CANNOT_PARSE_DOUBLE_VALUE = 25;
 
-  // TODO(tf) This error occurred while parsing the xml. Probably it has a wrong
-  // encoding.
-  MESSAGE_CODE_REQUEST_HAS_WRONG_ENCODING = 38;
+  // Cannot parse value as integer value.
+  MESSAGE_CODE_CANNOT_PARSE_INT_VALUE = 26;
 
-  // TODO(tf) Request body didn't contain the expected Elements.
-  MESSAGE_CODE_REQUEST_DOESNT_CONTAIN_EXPECTED_ELEMENTS = 39;
+  // Cannot parse value as boolean value (either 'true' or 'false', case
+  // insensitive).
+  MESSAGE_CODE_CANNOT_PARSE_BOOL_VALUE = 27;
 
-  // TODO(tf) File is not in drop-off box.
-  MESSAGE_CODE_FILE_NOT_IN_DROPOFFBOX = 40;
+  // File could not be found.
+  MESSAGE_CODE_FILE_NOT_FOUND = 28;
 
-  // TODO(tf) File could not be found.
-  MESSAGE_CODE_FILE_NOT_FOUND = 41;
+  // A warning occured while processing an entity with the strict flag.
+  MESSAGE_CODE_WARNING_OCCURED = 29;
 
-  // TODO(tf) Could not move file to tmp folder.
-  MESSAGE_CODE_CANNOT_MOVE_FILE_TO_TMP = 42;
+  // On insert or update: Name is already in use. Choose a different name or
+  // reuse an existing entity.
+  MESSAGE_CODE_ENTITY_NAME_IS_NOT_UNIQUE = 30;
 
-  // TODO(tf) Insufficient read permission for this file. Please make it
-  // readable.
-  MESSAGE_CODE_CANNOT_READ_FILE = 43;
+  // This query finished with errors.
+  MESSAGE_CODE_QUERY_EXCEPTION = 31;
 
-  // TODO(tf) Insufficient read permission for this file's thumbnail. Please
-  // make it readable.
-  MESSAGE_CODE_CANNOT_READ_THUMBNAIL = 44;
+  // An unknown error occured during the transaction and it was rolled back.
+  MESSAGE_CODE_TRANSACTION_ROLL_BACK = 32;
 
-  // TODO(tf) No file representation submitted.
-  MESSAGE_CODE_NO_FILE_REPRESENTATION_SUBMITTED = 45;
+  // Unknown unit. Values with this unit cannot be converted to other units
+  // when used in search queries.
+  MESSAGE_CODE_UNKNOWN_UNIT = 34;
 
-  // TODO(tf) DESCRIPTION?
-  MESSAGE_CODE_FILE_IS_EMPTY = 46;
+  // You are not allowed to do this.
+  MESSAGE_CODE_AUTHORIZATION_ERROR = 35;
 
-  // TODO(tf) A warning occured while processing an entity with the strict flag.
-  MESSAGE_CODE_WARNING_OCCURED = 47;
+  // Reference not qualified. The value of this Reference Property is to be a
+  // child of its data type.
+  MESSAGE_CODE_REFERENCE_IS_NOT_ALLOWED_BY_DATA_TYPE = 36;
 
-  // TODO(tf) DESCRIPTION?
-  MESSAGE_CODE_UNKNOWN_JOB = 48;
+  // This entity cannot be identified due to name duplicates.
+  MESSAGE_CODE_ENTITY_NAME_DUPLICATES = 37;
 
-  // TODO(tf) Name is already in use. Choose a different name or reuse an
-  // existing entity.
-  MESSAGE_CODE_NAME_IS_NOT_UNIQUE = 49;
+  // This data type cannot be identified due to name duplicates.
+  MESSAGE_CODE_DATA_TYPE_NAME_DUPLICATES = 38;
 
-  // TODO(tf) This entity cannot be identified uniquely due to name dublicates
-  MESSAGE_CODE_CANNOT_IDENTIFY_ENTITY_UNIQUELY = 50;
+  // This entity cannot be identified as it didn't come with a name or id.
+  MESSAGE_CODE_ENTITY_HAS_NO_NAME_OR_ID = 39;
 
-  // TODO(tf) This query finished with errors.
-  MESSAGE_CODE_QUERY_EXCEPTION = 51;
+  // Affiliation is not defined for this child-parent constellation.
+  MESSAGE_CODE_AFFILIATION_ERROR = 40;
 
-  // TODO(tf) This entity is empty.
-  MESSAGE_CODE_ENTITY_IS_EMPTY = 52;
-
-  // TODO(tf) An unknown error occured during the transaction and it was rolled
-  // back.
-  MESSAGE_CODE_TRANSACTION_ROLL_BACK = 53;
-
-  // TODO(tf) The file upload failed for an unknown reason.
-  MESSAGE_CODE_FILE_UPLOAD_FAILED = 54;
-
-  // TODO(tf) Unknown unit. Values with this unit cannot be converted to other
-  // units when used in search queries.
-  MESSAGE_CODE_UNKNOWN_UNIT = 55;
-
-  // TODO(tf) You are not allowed to do this.
-  MESSAGE_CODE_AUTHORIZATION_ERROR = 56;
-
-  // TODO(tf) Reference not qualified. The value of this Reference Property is
-  // to be a child of its data type.
-  MESSAGE_CODE_REFERENCE_IS_NOT_ALLOWED_BY_DATATYPE = 57;
-
-  // TODO(tf) Cannot parse EntityACL.
-  MESSAGE_CODE_CANNOT_PARSE_ENTITY_ACL = 58;
-
-  // TODO(tf) This entity cannot be identified due to name duplicates.
-  MESSAGE_CODE_ENTITY_NAME_DUPLICATES = 59;
-
-  // TODO(tf) This data type cannot be identified due to name duplicates.
-  MESSAGE_CODE_DATA_TYPE_NAME_DUPLICATES = 60;
-
-  // TODO(tf) This entity cannot be identified as it didn't come with a name or
-  // id.
-  MESSAGE_CODE_ENTITY_HAS_NO_NAME_OR_ID = 61;
-
-  // TODO(tf) Affiliation is not defined for this child-parent constellation.
-  MESSAGE_CODE_AFFILIATION_ERROR = 62;
-
-  // TODO(tf) An error occured during the parsing of this query. Maybe you use a
+  // An error occured during the parsing of this query. Maybe you were using a
   // wrong syntax?
-  MESSAGE_CODE_QUERY_PARSING_ERROR = 63;
+  MESSAGE_CODE_QUERY_PARSING_ERROR = 41;
 
-  // TODO(tf) A property which has 'name' as its parent must have a TEXT data
-  // type.
-  MESSAGE_CODE_NAME_PROPERTIES_MUST_BE_TEXT = 64;
+  // A property which has 'name' as its parent must have a TEXT data type.
+  MESSAGE_CODE_NAME_PROPERTIES_MUST_BE_TEXT = 42;
 
-  // TODO(tf) This entity had parent duplicates. That is meaningless and only
-  // one parent had been inserted.
-  MESSAGE_CODE_PARENT_DUPLICATES_WARNING = 65;
+  // This entity had parent duplicates. That is meaningless and only one parent
+  // had been inserted.
+  MESSAGE_CODE_PARENT_DUPLICATES_WARNING = 43;
 
-  // TODO(tf) This entity had parent duplicates. Parent duplicates are
-  // meaningless and would be ignored (and inserted only once). But these
-  // parents had diverging inheritance instructions which cannot be processed.
-  MESSAGE_CODE_PARENT_DUPLICATES_ERROR = 66;
+  // This entity had parent duplicates. Parent duplicates are meaningless and
+  // would be ignored (and inserted only once). But these parents had diverging
+  // inheritance instructions which cannot be processed.
+  MESSAGE_CODE_PARENT_DUPLICATES_ERROR = 44;
 
-  // TODO(tf) One or more entities are not qualified. None of them have been
+  // One or more entities are not qualified. None of them have been
   // inserted/updated/deleted.
-  MESSAGE_CODE_ATOMICITY_ERROR = 67;
+  MESSAGE_CODE_ATOMICITY_ERROR = 45;
 
-  // TODO(tf) There is no such role '" + role + "'.
-  MESSAGE_CODE_NO_SUCH_ENTITY_ROLE = 68;
+  // There is no such role.
+  MESSAGE_CODE_NO_SUCH_ENTITY_ROLE = 46;
 
-  // TODO(tf) This entity cannot be deleted due to dependency problems
-  MESSAGE_CODE_REQUIRED_BY_UNQUALIFIED = 69;
+  // This entity cannot be deleted due to dependency problems
+  MESSAGE_CODE_REQUIRED_BY_UNQUALIFIED = 47;
 
-  // TODO(tf) This entity has an invalid reference.
-  MESSAGE_CODE_ENTITY_HAS_INVALID_REFERENCE = 70;
+  // This entity has an unqualified reference. I.e. the referenced entity is
+  // not qualified for the transaction.
+  MESSAGE_CODE_ENTITY_HAS_UNQUALIFIED_REFERENCE = 48;
 
-  // TODO(tf) Referenced entity does not exist.
-  MESSAGE_CODE_REFERENCED_ENTITY_DOES_NOT_EXIST = 71;
+  // Referenced entity does not exist.
+  MESSAGE_CODE_REFERENCED_ENTITY_DOES_NOT_EXIST = 49;
 
-  // TODO(tf) This reference cannot be identified due to name duplicates.
-  MESSAGE_CODE_REFERENCE_NAME_DUPLICATES = 72;
+  // This reference cannot be identified due to name duplicates.
+  MESSAGE_CODE_REFERENCE_NAME_DUPLICATES = 50;
 
-  // TODO(tf) The datatype which is to be inherited could not be detected due to
+  // The datatype which is to be inherited could not be detected due to
   // divergent datatypes of at least two parents.
-  MESSAGE_CODE_DATATYPE_INHERITANCE_AMBIGUOUS = 73;
+  MESSAGE_CODE_DATA_TYPE_INHERITANCE_AMBIGUOUS = 51;
 
-  // TODO(tf) This datatype does not accept collections of values (e.g. Lists).
-  MESSAGE_CODE_DATA_TYPE_DOES_NOT_ACCEPT_COLLECTION_VALUES = 74;
+  // This datatype does not accept collections of values (e.g. Lists).
+  MESSAGE_CODE_DATA_TYPE_DOES_NOT_ACCEPT_COLLECTION_VALUES = 52;
 
-  // TODO(tf) This unit cannot be parsed.
-  MESSAGE_CODE_CANNOT_PARSE_UNIT = 75;
+  // This unit cannot be parsed.
+  MESSAGE_CODE_CANNOT_PARSE_UNIT = 53;
 
-  // TODO(tf) This property is an additional property which has no corresponding
+  // This property is an additional property which has no corresponding
   // property among the properties of the parents.
-  MESSAGE_CODE_ADDITIONAL_PROPERTY = 76;
+  MESSAGE_CODE_ADDITIONAL_PROPERTY = 54;
 
-  // TODO(tf) This property overrides the datatype.
-  MESSAGE_CODE_PROPERTY_WITH_DATATYPE_OVERRIDE = 77;
+  // This property overrides the datatype.
+  MESSAGE_CODE_PROPERTY_WITH_DATA_TYPE_OVERRIDE = 55;
 
-  // TODO(tf) This property overrides the description.
-  MESSAGE_CODE_PROPERTY_WITH_DESC_OVERRIDE = 78;
+  // This property overrides the description.
+  MESSAGE_CODE_PROPERTY_WITH_DESCRIPTION_OVERRIDE = 56;
 
-  // TODO(tf) This property overrides the name.
-  MESSAGE_CODE_PROPERTY_WITH_NAME_OVERRIDE = 79;
+  // This property overrides the name.
+  MESSAGE_CODE_PROPERTY_WITH_NAME_OVERRIDE = 57;
 
   // Indicates that this server cannot process this integer value because it is
   // out of range. The integer range is an implementation detail and thus this
   // can happen even though the API allows the value.
-  MESSAGE_CODE_INTEGER_VALUE_OUT_OF_RANGE = 80;
+  MESSAGE_CODE_INTEGER_VALUE_OUT_OF_RANGE = 58;
+
+  // This entity caused an unexpected integrity violation. This is a strong
+  // indicator for a server bug. Please report.
+  MESSAGE_CODE_INTEGRITY_VIOLATION = 59;
 }
 
 // Messages are used by server's or client's to transport *transient*
@@ -631,8 +568,6 @@ message RetrieveRequest {
   // Is the client requesting to download the file associated with the
   // retrieved entity or query results?
   bool register_file_download = 3;
-  // TODO Settings for the download. Ignored if register_file_download is false.
-  // FileTransmissionSettings download_settings = 4;
 }
 
 // Response to a retrieve request
diff --git a/proto/caosdb/info/v1alpha1/main.proto b/proto/caosdb/info/v1/main.proto
similarity index 93%
rename from proto/caosdb/info/v1alpha1/main.proto
rename to proto/caosdb/info/v1/main.proto
index bcdf43eb61ff2acfc5ca2bef242bf59ab327710c..24949c4f2bea7d2b3d39ae518f35429ddc9ff15c 100644
--- a/proto/caosdb/info/v1alpha1/main.proto
+++ b/proto/caosdb/info/v1/main.proto
@@ -18,12 +18,12 @@
 // along with this program. If not, see <https://www.gnu.org/licenses/>.
 //
 
-// This is the main file of the caosdb.info.v1alpha1 package.
+// This is the main file of the caosdb.info.v1 package.
 syntax                     = "proto3";
 option java_multiple_files = true;
-option java_package        = "org.caosdb.api.info.v1alpha1";
+option java_package        = "org.caosdb.api.info.v1";
 
-package caosdb.info.v1alpha1;
+package caosdb.info.v1;
 
 
 /////////////////////////////// SERVER VERSION