diff --git a/docs/toardb_fastapi.md b/docs/toardb_fastapi.md
index edf375e3addf6b2a332dbef16894dc58c23cd99c..2f58fb1bf3b7914b58c1ad2c49ac61002421aa51 100644
--- a/docs/toardb_fastapi.md
+++ b/docs/toardb_fastapi.md
@@ -4,6 +4,24 @@
 
 
 
+#### Body_patch_data_data__patch
+
+| Name | Type | Description | Required |
+| ---- | ---- | ----------- | -------- |
+| file | binary |  | Yes |
+
+#### Body_patch_stationmeta_core_stationmeta__station_code__patch
+
+| Name | Type | Description | Required |
+| ---- | ---- | ----------- | -------- |
+| stationmeta | [StationmetaPatch](#stationmetapatch) |  | Yes |
+
+#### Body_patch_timeseries_timeseries__timeseries_id__patch
+
+| Name | Type | Description | Required |
+| ---- | ---- | ----------- | -------- |
+| timeseries | [TimeseriesPatch](#timeseriespatch) |  | Yes |
+
 #### Contact
 
 | Name | Type | Description | Required |
@@ -15,9 +33,9 @@
 
 | Name | Type | Description | Required |
 | ---- | ---- | ----------- | -------- |
-| lat | number | longitude coordinate of station (decimal degrees_east). This is our best estimate of the station location which is not always identical to the official station coordinates (see coordinate_validation_status). | No |
-| lng | number | latitude coordinate of station (decimal degrees_north). This is our best estimate of the station location which is not always identical to the official station coordinates (see coordinate_validation_status). | No |
-| alt | number | altitude of station (in m above sea level). This is our best estimate of the station altitude, which is not always identical to the reported station altitude, but frequently uses the elevation from google earth instead (see coordinate_validation_status). | No |
+| lat | number | longitude coordinate of station (decimal degrees_east). This is our best estimate of the station location which is not always identical to the official station coordinates (see potential changelog entry). | No |
+| lng | number | latitude coordinate of station (decimal degrees_north). This is our best estimate of the station location which is not always identical to the official station coordinates (see potential changelog entry). | No |
+| alt | number | altitude of station (in m above sea level). This is our best estimate of the station altitude, which is not always identical to the reported station altitude, but frequently uses the elevation from google earth instead (see potential changelog entry). | No |
 
 #### Data
 
@@ -26,6 +44,7 @@
 | datetime | dateTime | date and time of observation | Yes |
 | value | number | variable value at datetime | Yes |
 | flags | string | flags | Yes |
+| version | string | version | Yes |
 | timeseries_id | integer | ID of timeseries | Yes |
 
 #### Organisation
@@ -60,11 +79,9 @@
 | codes | [ string ] | list of station's codes | Yes |
 | name | string |  | Yes |
 | coordinates | [Coordinates](#coordinates) |  | Yes |
+| coordinate_validation_status | string |  | Yes |
 | country | string |  | Yes |
 | state | string |  | Yes |
-| coordinate_validation_status | string |  | Yes |
-| coordinate_validation_date | dateTime |  | Yes |
-| coordinate_validator_id | integer |  | Yes |
 | type_of_environment | string |  | Yes |
 | type_of_area | string |  | Yes |
 | timezone | string |  | Yes |
@@ -75,6 +92,7 @@
 | aux_docs | [ [StationmetaAuxDoc](#stationmetaauxdoc) ] |  | No |
 | aux_urls | [ [StationmetaAuxUrl](#stationmetaauxurl) ] |  | No |
 | globalmeta | [StationmetaGlobal](#stationmetaglobal) |  | No |
+| changelog | [ [StationmetaChangelog](#stationmetachangelog) ] |  | No |
 
 #### StationmetaAnnotation
 
@@ -87,6 +105,16 @@
 | approved | boolean |  | Yes |
 | contributor_id | integer |  | Yes |
 
+#### StationmetaAnnotationPatch
+
+| Name | Type | Description | Required |
+| ---- | ---- | ----------- | -------- |
+| kind | integer |  | No |
+| text | string |  | No |
+| date_added | dateTime |  | No |
+| approved | boolean |  | No |
+| contributor_id | integer |  | No |
+
 #### StationmetaAuxDoc
 
 | Name | Type | Description | Required |
@@ -97,6 +125,15 @@
 | resource | string |  | Yes |
 | station_id | integer |  | Yes |
 
+#### StationmetaAuxDocPatch
+
+| Name | Type | Description | Required |
+| ---- | ---- | ----------- | -------- |
+| resource_description | string |  | No |
+| date_added | dateTime |  | No |
+| resource | string |  | No |
+| station_id | integer |  | No |
+
 #### StationmetaAuxImage
 
 | Name | Type | Description | Required |
@@ -109,6 +146,17 @@
 | image_width | integer |  | Yes |
 | station_id | integer |  | Yes |
 
+#### StationmetaAuxImagePatch
+
+| Name | Type | Description | Required |
+| ---- | ---- | ----------- | -------- |
+| resource_description | string |  | No |
+| date_added | dateTime |  | No |
+| resource | string |  | No |
+| image_height | integer |  | No |
+| image_width | integer |  | No |
+| station_id | integer |  | No |
+
 #### StationmetaAuxUrl
 
 | Name | Type | Description | Required |
@@ -119,6 +167,27 @@
 | resource | string |  | Yes |
 | station_id | integer |  | Yes |
 
+#### StationmetaAuxUrlPatch
+
+| Name | Type | Description | Required |
+| ---- | ---- | ----------- | -------- |
+| resource_description | string |  | No |
+| date_added | dateTime |  | No |
+| resource | string |  | No |
+| station_id | integer |  | No |
+
+#### StationmetaChangelog
+
+| Name | Type | Description | Required |
+| ---- | ---- | ----------- | -------- |
+| datetime | dateTime |  | Yes |
+| description | string |  | Yes |
+| old_value | string |  | Yes |
+| new_value | string |  | Yes |
+| station_id | integer |  | Yes |
+| author_id | integer |  | Yes |
+| type_of_change | integer |  | Yes |
+
 #### StationmetaCore
 
 | Name | Type | Description | Required |
@@ -127,11 +196,9 @@
 | codes | [ string ] | list of station's codes | Yes |
 | name | string |  | Yes |
 | coordinates | [Coordinates](#coordinates) |  | Yes |
+| coordinate_validation_status | string |  | Yes |
 | country | string |  | Yes |
 | state | string |  | Yes |
-| coordinate_validation_status | string |  | Yes |
-| coordinate_validation_date | dateTime |  | Yes |
-| coordinate_validator_id | integer |  | Yes |
 | type_of_environment | string |  | Yes |
 | type_of_area | string |  | Yes |
 | timezone | string |  | Yes |
@@ -145,11 +212,9 @@
 | codes | [ string ] | list of station's codes | Yes |
 | name | string |  | Yes |
 | coordinates | [Coordinates](#coordinates) |  | Yes |
+| coordinate_validation_status | string |  | Yes |
 | country | string |  | Yes |
 | state | string |  | Yes |
-| coordinate_validation_status | string |  | Yes |
-| coordinate_validation_date | dateTime |  | Yes |
-| coordinate_validator_id | integer |  | Yes |
 | type_of_environment | string |  | Yes |
 | type_of_area | string |  | Yes |
 | timezone | string |  | Yes |
@@ -178,6 +243,49 @@
 | toar1_category | string |  | Yes |
 | station_id | integer |  | Yes |
 
+#### StationmetaGlobalPatch
+
+| Name | Type | Description | Required |
+| ---- | ---- | ----------- | -------- |
+| population_density_year2010 | number |  | No |
+| max_population_density_25km_year2010 | number |  | No |
+| climatic_zone | string |  | No |
+| nightlight_1km_year2013 | number |  | No |
+| nightlight_5km_year2013 | number |  | No |
+| max_nightlight_25km_year2013 | number |  | No |
+| wheat_production_year2000 | number |  | No |
+| rice_production_year2000 | number |  | No |
+| edgar_htap_v2_nox_emissions_year2010 | number |  | No |
+| omi_no2_column_years2011to2015 | number |  | No |
+| htap_region_tier1 | string |  | No |
+| etopo_alt | number |  | No |
+| etopo_min_alt_5km | number |  | No |
+| etopo_relative_alt | number |  | No |
+| dominant_landcover_year2012 | string |  | No |
+| toar1_category | string |  | No |
+| station_id | integer |  | No |
+
+#### StationmetaPatch
+
+| Name | Type | Description | Required |
+| ---- | ---- | ----------- | -------- |
+| codes | [ string ] |  | No |
+| name | string |  | No |
+| coordinates | [Coordinates](#coordinates) |  | No |
+| coordinate_validation_status | string |  | No |
+| country | string |  | No |
+| state | string |  | No |
+| type_of_environment | string |  | No |
+| type_of_area | string |  | No |
+| timezone | string |  | No |
+| additional_metadata | string (json-string) |  | No |
+| roles | [ [StationmetaRolePatch](#stationmetarolepatch) ] |  | No |
+| annotations | [ [StationmetaAnnotationPatch](#stationmetaannotationpatch) ] |  | No |
+| aux_images | [ [StationmetaAuxImagePatch](#stationmetaauximagepatch) ] |  | No |
+| aux_docs | [ [StationmetaAuxDocPatch](#stationmetaauxdocpatch) ] |  | No |
+| aux_urls | [ [StationmetaAuxUrlPatch](#stationmetaauxurlpatch) ] |  | No |
+| globalmeta | [StationmetaGlobalPatch](#stationmetaglobalpatch) |  | No |
+
 #### StationmetaRole
 
 | Name | Type | Description | Required |
@@ -187,6 +295,14 @@
 | status | string |  | Yes |
 | contact | [Contact](#contact) |  | Yes |
 
+#### StationmetaRolePatch
+
+| Name | Type | Description | Required |
+| ---- | ---- | ----------- | -------- |
+| role | string |  | Yes |
+| status | string |  | Yes |
+| contact_id | integer |  | Yes |
+
 #### Timeseries
 
 | Name | Type | Description | Required |
@@ -210,6 +326,7 @@
 | variable | [Variable](#variable) |  | Yes |
 | station | [StationmetaCoreBase](#stationmetacorebase) |  | Yes |
 | programme | [TimeseriesProgramme](#timeseriesprogramme) |  | Yes |
+| changelog | [ [TimeseriesChangelog](#timeserieschangelog) ] |  | No |
 
 #### TimeseriesAnnotation
 
@@ -223,6 +340,44 @@
 | contributor_id | integer |  | Yes |
 | timeseries_id | integer |  | Yes |
 
+#### TimeseriesChangelog
+
+| Name | Type | Description | Required |
+| ---- | ---- | ----------- | -------- |
+| datetime | dateTime |  | Yes |
+| description | string |  | Yes |
+| old_value | string |  | Yes |
+| new_value | string |  | Yes |
+| timeseries_id | integer |  | Yes |
+| author_id | integer |  | Yes |
+| type_of_change | integer |  | Yes |
+| period_start | dateTime |  | No |
+| period_end | dateTime |  | No |
+| version | string |  | No |
+
+#### TimeseriesPatch
+
+| Name | Type | Description | Required |
+| ---- | ---- | ----------- | -------- |
+| label | string |  | No |
+| order | integer |  | No |
+| access_rights | string |  | No |
+| sampling_frequency | string |  | No |
+| aggregation | string |  | No |
+| source | string |  | No |
+| data_start_date | dateTime |  | No |
+| data_end_date | dateTime |  | No |
+| measurement_method | string |  | No |
+| sampling_height | number |  | No |
+| date_added | dateTime |  | No |
+| date_modified | dateTime |  | No |
+| additional_metadata | string (json-string) |  | No |
+| roles | [ [TimeseriesRole](#timeseriesrole) ] |  | No |
+| annotations | [ [TimeseriesAnnotation](#timeseriesannotation) ] |  | No |
+| variable | [Variable](#variable) |  | No |
+| station | [StationmetaCoreBase](#stationmetacorebase) |  | No |
+| programme | [TimeseriesProgramme](#timeseriesprogramme) |  | No |
+
 #### TimeseriesProgramme
 
 | Name | Type | Description | Required |
@@ -269,6 +424,10 @@
  [0, 'active', 'active'],  
  [1, 'inactive', 'inactive'],  
  [2, 'unknown', 'unknown']]
+#### Kind Of Annotations ####
+  * Kind of Annotations: [  
+ [0, 'User', 'user comment'],  
+ [1, 'Provider', 'provider comment']]
 #### Kind Of Organizations ####
   * Kind of Organizations: [  
  [1, 'Government', 'government'],  
@@ -419,6 +578,15 @@
  [13, 'Changed', 'changed'],  
  [14, 'Estimated', 'estimated'],  
  [15, 'MissingValue', 'missing value']]
+#### Type Of Change ####
+  * Type of Change: [  
+ [0, 'Created', 'created'],  
+ [1, 'SingleValue', 'single value correction in metadata'],  
+ [2, 'Comprehensive', 'comprehensive metadata revision'],  
+ [3, 'Typo', 'typographic correction of metadata'],  
+ [4, 'UnspecifiedData', 'unspecified data value corrections'],  
+ [5, 'Replaced', 'replaced data with a new version'],  
+ [6, 'Flagging', 'data value flagging']]
 
 
 ## REST API
@@ -775,6 +943,66 @@ Get Stationmeta
 | 200 | Successful Response |
 | 422 | Validation Error |
 
+#### PATCH
+##### Summary:
+
+Patch Stationmeta Core
+
+##### Parameters
+
+| Name | Located in | Description | Required | Schema |
+| ---- | ---------- | ----------- | -------- | ---- |
+| station_code | path |  | Yes | string |
+| description | query |  | Yes | string |
+
+##### Responses
+
+| Code | Description |
+| ---- | ----------- |
+| 200 | Successful Response |
+| 422 | Validation Error |
+
+### /stationmeta_changelog/{station_id}
+
+#### GET
+##### Summary:
+
+Get Stationmeta Changelog
+
+##### Parameters
+
+| Name | Located in | Description | Required | Schema |
+| ---- | ---------- | ----------- | -------- | ---- |
+| station_id | path |  | Yes | integer |
+
+##### Responses
+
+| Code | Description |
+| ---- | ----------- |
+| 200 | Successful Response |
+| 422 | Validation Error |
+
+### /stationmeta/delete_field/{station_code}
+
+#### PATCH
+##### Summary:
+
+Patch Stationmeta Core
+
+##### Parameters
+
+| Name | Located in | Description | Required | Schema |
+| ---- | ---------- | ----------- | -------- | ---- |
+| station_code | path |  | Yes | string |
+| field | query |  | Yes | string |
+
+##### Responses
+
+| Code | Description |
+| ---- | ----------- |
+| 200 | Successful Response |
+| 422 | Validation Error |
+
 ### /timeseries/
 
 #### GET
@@ -816,6 +1044,66 @@ Get Timeseries
 | 200 | Successful Response |
 | 422 | Validation Error |
 
+#### PATCH
+##### Summary:
+
+Patch Timeseries
+
+##### Parameters
+
+| Name | Located in | Description | Required | Schema |
+| ---- | ---------- | ----------- | -------- | ---- |
+| timeseries_id | path |  | Yes | integer |
+| description | query |  | Yes | string |
+
+##### Responses
+
+| Code | Description |
+| ---- | ----------- |
+| 200 | Successful Response |
+| 422 | Validation Error |
+
+### /timeseries_changelog/{timeseries_id}
+
+#### GET
+##### Summary:
+
+Get Timeseries Changelog
+
+##### Parameters
+
+| Name | Located in | Description | Required | Schema |
+| ---- | ---------- | ----------- | -------- | ---- |
+| timeseries_id | path |  | Yes | integer |
+
+##### Responses
+
+| Code | Description |
+| ---- | ----------- |
+| 200 | Successful Response |
+| 422 | Validation Error |
+
+### /timeseries/delete_field/{timeseries_id}
+
+#### PATCH
+##### Summary:
+
+Patch Timeseries
+
+##### Parameters
+
+| Name | Located in | Description | Required | Schema |
+| ---- | ---------- | ----------- | -------- | ---- |
+| timeseries_id | path |  | Yes | integer |
+| field | query |  | Yes | string |
+
+##### Responses
+
+| Code | Description |
+| ---- | ----------- |
+| 200 | Successful Response |
+| 422 | Validation Error |
+
 ### /data/
 
 #### GET
@@ -837,6 +1125,25 @@ Get All Data
 | 200 | Successful Response |
 | 422 | Validation Error |
 
+#### PATCH
+##### Summary:
+
+Patch Data
+
+##### Parameters
+
+| Name | Located in | Description | Required | Schema |
+| ---- | ---------- | ----------- | -------- | ---- |
+| description | query |  | Yes | string |
+| version | query |  | Yes | string |
+
+##### Responses
+
+| Code | Description |
+| ---- | ----------- |
+| 200 | Successful Response |
+| 422 | Validation Error |
+
 ### /data/{timeseries_id}
 
 #### GET
diff --git a/toardb/stationmeta/models_core.py b/toardb/stationmeta/models_core.py
index 92262f5af3f41bd8caca2ff645c18cbe77eab832..e4099fc74370b831c6d5eb1e21ff88818655751d 100644
--- a/toardb/stationmeta/models_core.py
+++ b/toardb/stationmeta/models_core.py
@@ -31,6 +31,8 @@ class StationmetaCore_WithoutCoords(Base):
     +------------------------------+--------------------------+-----------+----------+----------------------------------------------+
     | coordinates                  | geometry(PointZ,4326)    |           | not null |                                              |
     +------------------------------+--------------------------+-----------+----------+----------------------------------------------+
+    | coordinate_validation_status | integer                  |           | not null | 0                                            |
+    +------------------------------+--------------------------+-----------+----------+----------------------------------------------+
     | country                      | character varying(128)   |           | not null |                                              |
     +------------------------------+--------------------------+-----------+----------+----------------------------------------------+
     | state                        | character varying(128)   |           | not null |                                              |
diff --git a/toardb/stationmeta/schemas.py b/toardb/stationmeta/schemas.py
index 193053e43ede39e0415f6dc1e69bfb2024d3dbb2..9b818f0afe48ca92c4132d0fd9e35b6b88914427 100644
--- a/toardb/stationmeta/schemas.py
+++ b/toardb/stationmeta/schemas.py
@@ -29,6 +29,7 @@ class StationmetaCoreBase(BaseModel):
     codes: List[str] = Field(..., description="list of station's codes")
     name: str
     coordinates: Coordinates
+    coordinate_validation_status: str
     country: str
     state: str
     type_of_environment: str
@@ -39,6 +40,10 @@ class StationmetaCoreBase(BaseModel):
     class Config(BaseConfig):
         orm_mode = True
 
+    @validator('coordinate_validation_status')
+    def check_coordinate_validation_status(cls, v):
+        return tuple(filter(lambda x: x.value == int(v), CV_enum))[0].string
+
     @validator('type_of_environment')
     def check_type_of_environment(cls, v):
         return tuple(filter(lambda x: x.value == int(v), ST_enum))[0].string
@@ -52,6 +57,7 @@ class StationmetaCorePatch(BaseModel):
     codes: List[str] = None
     name: str = None
     coordinates: Coordinates = None
+    coordinate_validation_status: str = None
     country: str = None
     state: str = None
     type_of_environment: str = None
@@ -62,6 +68,11 @@ class StationmetaCorePatch(BaseModel):
     class Config(BaseConfig):
         orm_mode = True
 
+    @validator('coordinate_validation_status')
+    def check_coordinate_validation_status(cls, v):
+        if v:
+            return tuple(filter(lambda x: x.value == int(v), CV_enum))[0].string
+
     @validator('type_of_environment')
     def check_type_of_environment(cls, v):
         if v:
@@ -76,6 +87,13 @@ class StationmetaCorePatch(BaseModel):
 class StationmetaCoreCreate(StationmetaCoreBase):
     pass
 
+    @validator('coordinate_validation_status')
+    def check_coordinate_validation_status(cls, v):
+        if tuple(filter(lambda x: x.string == v, CV_enum)):
+            return v
+        else:
+            raise ValueError(f"coordinate validation status not known: {v}")
+
     @validator('type_of_environment')
     def check_type_of_environment(cls, v):
         if tuple(filter(lambda x: x.string == v, ST_enum)):
diff --git a/toardb/toardb.py b/toardb/toardb.py
index ca457c4a707f6c6c5d53edef98edb432579e323f..92f6893abf3a89a185b3bcb9ce23782d55fe4815 100644
--- a/toardb/toardb.py
+++ b/toardb/toardb.py
@@ -24,6 +24,7 @@ async def info():
     controlled_vocabulary = {
         "Role Codes": settings.RC_vocab,
         "Role Status": settings.RS_vocab,
+        "Kind of Annotations": settings.AK_vocab,
         "Kind of Organizations": settings.OK_vocab,
         "Data Access Rights": settings.DA_vocab,
         "Sampling Frequencies": settings.SF_vocab,
@@ -48,6 +49,7 @@ async def info(name: str):
     controlled_vocabulary = {
         "Role Codes": settings.RC_vocab,
         "Role Status": settings.RS_vocab,
+        "Kind of Annotations": settings.AK_vocab,
         "Kind of Organizations": settings.OK_vocab,
         "Data Access Rights": settings.DA_vocab,
         "Sampling Frequencies": settings.SF_vocab,
@@ -119,6 +121,7 @@ async def startup_event():
     fake_cur = fake_conn.cursor()
     RC_vocabulary = __get_enum_dict(fake_cur, "rc_vocabulary")
     RS_vocabulary = __get_enum_dict(fake_cur, "rs_vocabulary")
+    AK_vocabulary = __get_enum_dict(fake_cur, "ak_vocabulary")
     OK_vocabulary = __get_enum_dict(fake_cur, "ok_vocabulary")
     DA_vocabulary = __get_enum_dict(fake_cur, "da_vocabulary")
     SF_vocabulary = __get_enum_dict(fake_cur, "sf_vocabulary")
@@ -142,6 +145,7 @@ fake_conn = engine.raw_connection()
 fake_cur = fake_conn.cursor()
 RC_vocabulary = __get_enum_dict(fake_cur, "rc_vocabulary")
 RS_vocabulary = __get_enum_dict(fake_cur, "rs_vocabulary")
+AK_vocabulary = __get_enum_dict(fake_cur, "ak_vocabulary")
 OK_vocabulary = __get_enum_dict(fake_cur, "ok_vocabulary")
 DA_vocabulary = __get_enum_dict(fake_cur, "da_vocabulary")
 SF_vocabulary = __get_enum_dict(fake_cur, "sf_vocabulary")
@@ -164,6 +168,7 @@ class Settings(BaseSettings):
     Enumdict=namedtuple("Dict",["value","string","display_str"])
     RC_vocab = RC_vocabulary
     RS_vocab = RS_vocabulary
+    AK_vocab = AK_vocabulary
     OK_vocab = OK_vocabulary
     DA_vocab = DA_vocabulary
     SF_vocab = SF_vocabulary