Metadata ******** This endpoint provides access to form metadata, for example, supporting documents, media files to be used in the form, source documents and map layers. - ``pk`` - primary key for the metadata - ``formid`` - the form id for a form - ``format`` - is the extension of a file format e.g ``png``, ``csv`` Permissions ----------- This endpoint applies the same permissions someone has on the form. Get list of metadata -------------------- Returns a list of metadata across all forms requesting user has access to. .. raw:: html
GET /api/v1/metadata
:: HTTP 200 OK [ { "data_file": "", "data_file_type": null, "data_type": "public_link", "data_value": "http://mylink", "id": 406, "url": "https://api.ona.io/api/v1/metadata/406", "xform": 328 }, { "data_file": "username/form-media/a.png", "data_file_type": "image/png", "data_type": "media", "data_value": "a.png", "id": 7100, "url": "https://api.ona.io/api/v1/metadata/7100", "xform": 320 }, .... ] Get list of metadata for a specific form ----------------------------------------- The form endpoint, ``/api/v1/forms/formid``, contains a ``metadata`` field has list of metadata for the form. Alternatively, you can supply the query parameter ``xform`` with the `formid` as the value. .. raw:: html
    GET /api/v1/metadata?xform=formid
:: HTTP 200 OK [ { "data_file": "username/form-media/a.png", "data_file_type": "image/png", "data_type": "media", "data_value": "a.png", "id": 7100, "url": "https://api.ona.io/api/v1/metadata/7100", "xform": 320 }, .... ] Get a specific metadata ------------------------ .. raw:: html
    GET /api/v1/metadata/{pk}
:: curl -X GET https://api.ona.io/api/v1/metadata/7100 :: HTTP 200 OK { "data_file": "username/form-media/a.png", "data_file_type": "image/png", "data_type": "media", "data_value": "a.png", "id": 7100, "url": "https://api.ona.io/api/v1/metadata/7100", "xform": 320 } If the metadata is a file, appending the extension of the file type would return the file itself e.g: .. raw:: html
    GET /api/v1/metadata/{pk}.{format}
:: curl -X GET https://api.ona.io/api/v1/metadata/7100.png -o a.png Alternatively, if the request is made with an ``Accept`` header of the content type of the file the file would be returned e.g .. raw:: html
GET /api/v1/metadata/{pk} Accept: image/png 
:: curl -X GET https://api.ona.io/api/v1/metadata/7100 -H "Accept: image/png" -o a.png Add metadata or media file to a form ------------------------------------- .. raw:: html
POST /api/v1/metadata
*Payload* :: {"xform": , "data_type": "", \ "data_value": ""} Where: - ``data_type`` - can be 'media' or 'source' or 'supporting_doc' - ``data_value`` - can be text or a file name - ``xform`` - the form id you are adding the media to - ``data_file`` - optional, should be the file you want to upload Example: ^^^^^^^^ :: curl -X POST -d "{"data_type": "mapbox_layer", "data_value":"example||https://api.tiles.mapbox.com/v3/examples.map-0l53fhk2.json||example attribution", "xform": 320}" https://api.ona.io/api/v1/metadata -H "Content-Type: appliction/json" :: HTTP 201 CREATED { "id": 7119, "xform": 320, "data_value": "example||https://api.tiles.mapbox.com/v3/examples.map-0l53fhk2.json||example attribution", "data_type": "mapbox_layer", "data_file": null, "data_file_type": null, "url": "https://api.ona.io/api/v1/metadata/7119.json" } Media upload example: ^^^^^^^^^^^^^^^^^^^^^ :: curl -X POST -F 'data_type=media' -F 'data_value=demo.jpg' \ -F 'xform=320' -F "data_file=@folder.jpg" https://api.ona.io/api/v1/metadata.json :: HTTP 201 CREATED { "id": 7121, "xform": 320, "data_value": "folder.jpg", "data_type": "media", "data_file": "ukanga/formid-media/folder.jpg", "data_file_type": "image/jpeg", "url": "https://api.ona.io/api/v1/metadata/7121.json" } Link XForm or Dataview as a media to a form ------------------------------------------- It is possible to link another form or a dataview as a csv media resource to a form, the linked form will be downloadable by ODK Collect and Enketo as media. The ``data_type`` parameter will be 'media'm the ``xform`` parameter will be the form id you are adding the media to and the ``data_value`` param is a string of the form `"xform [form id] [filename]"` or `"dataview [dataview id] [filename]"`. Where: - ``[form id]`` - is the numeric id of the form - ``[dataview id]`` - is the numeric id of the dataview - ``[filename]`` - name of file for the linked resource, e.g `fruits` -> `fruits.csv` Link XForm or Dataview as a media example: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: curl -X POST -F 'data_type=media' -F 'xform=320' -F 'data_value="xform 328 places"' https://api.ona.io/api/v1/metadata.json :: HTTP 201 CREATED { "id": 7121, "xform": 320, "data_value": "xform 328 places", "data_type": "media", "url": "https://api.ona.io/api/v1/metadata/7121.json" } Link XForm as a GeoJSON media attachment example: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: curl -X POST -F 'data_type=media' -F 'xform=320' -F 'data_value="xform_geojson 328 places"' -F 'extra_data='{"data_title": "fruits", "data_simple_style": true, "data_geo_field": "geofied_1", "data_fields": "field_1,field_2"}'' https://api.ona.io/api/v1/metadata.json :: HTTP 201 CREATED { "id": 7121, "xform": 320, "data_value": "xform_geojson 328 places", "data_type": "media", "extra_data": '{"data_title": "fruits", "data_simple_style": true, "data_geo_field": "geofied_1", "data_fields": "field_1,field_2"}' "url": "https://api.ona.io/api/v1/metadata/7121.json" } Create XForm meta permissions ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Set meta permissions for a specific form by passing two roles that are pipe delimited. First role indicates editor default role and the other is the dataentry default role. Example :: curl -X POST -F 'data_type=xform_meta_perms' -F 'xform=320' -F 'data_value="editor-minor|dataentryonly"' https://api.ona.io/api/v1/metadata.json :: HTTP 201 CREATED Delete Metadata ^^^^^^^^^^^^^^^^ .. raw:: html
DELETE /api/v1/metadata/{pk}