<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.archivematica.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sevein</id>
	<title>Archivematica - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.archivematica.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sevein"/>
	<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/Special:Contributions/Sevein"/>
	<updated>2026-06-03T03:45:01Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.4</generator>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Storage_Service_0.19_Release_Notes&amp;diff=13657</id>
		<title>Storage Service 0.19 Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Storage_Service_0.19_Release_Notes&amp;diff=13657"/>
		<updated>2022-02-25T18:16:56Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Storage Service 0.19 release notes&lt;br /&gt;
&lt;br /&gt;
* '''Release date: 25 Feb 2022'''&lt;br /&gt;
&lt;br /&gt;
This release...&lt;br /&gt;
&lt;br /&gt;
== Upgrading ==&lt;br /&gt;
&lt;br /&gt;
* With the new permission module (see [https://github.com/artefactual/archivematica-storage-service/pull/625 pull request #625] for more), existing users defined in the application database will automatically become administrators when the Django migrations are executed. If your Storage Service is configured with an external authentication backend, you can use [https://github.com/artefactual/archivematica-storage-service/tree/stable/0.19.x/install SS_AUTH_DEFAULT_USER_ROLE] to establish a new default user role for authenticated users or tweak the [https://github.com/artefactual/archivematica-storage-service/blob/stable/0.19.x/storage_service/storage_service/settings/base.py authentication backend settings] to map the user roles according to your needs.&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
=== User roles ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1486&lt;br /&gt;
&lt;br /&gt;
Users can be associated to one of the following roles or permission sets: administrators, managers, reviewers and readers. Supported authentication backends like LDAP, Shibboleth or CAS include new configuration attributes to promote authenticated users.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Storage_Service_0.19_Release_Notes&amp;diff=13656</id>
		<title>Storage Service 0.19 Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Storage_Service_0.19_Release_Notes&amp;diff=13656"/>
		<updated>2022-02-25T18:15:27Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Storage Service 0.19 release notes&lt;br /&gt;
&lt;br /&gt;
* '''Release date: 25 Feb 2022'''&lt;br /&gt;
&lt;br /&gt;
== Upgrading ==&lt;br /&gt;
&lt;br /&gt;
* With the new permission module (see [https://github.com/artefactual/archivematica-storage-service/pull/625 pull request #625] for more), existing users in the application database become administrators automatically. If you have Storage Service configured with an external authentication backend, you can use [https://github.com/artefactual/archivematica-storage-service/tree/stable/0.19.x/install SS_AUTH_DEFAULT_USER_ROLE] to establish a new default user role for authenticated users or tweak the [https://github.com/artefactual/archivematica-storage-service/blob/stable/0.19.x/storage_service/storage_service/settings/base.py authentication backend settings] to map the user roles according to your needs.&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
=== User roles ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1486&lt;br /&gt;
&lt;br /&gt;
Users can be associated to one of the following roles or permission sets: administrators, managers, reviewers and readers. Supported authentication backends like LDAP, Shibboleth or CAS include new configuration attributes to promote authenticated users.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Storage_Service_0.19_Release_Notes&amp;diff=13655</id>
		<title>Storage Service 0.19 Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Storage_Service_0.19_Release_Notes&amp;diff=13655"/>
		<updated>2022-02-25T18:09:46Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Storage Service 0.19 release notes&lt;br /&gt;
&lt;br /&gt;
* '''Release date: TBD'''&lt;br /&gt;
&lt;br /&gt;
== Upgrading ==&lt;br /&gt;
&lt;br /&gt;
* With the new permission module (see [https://github.com/artefactual/archivematica-storage-service/pull/625 pull request #625] for more), existing users in the application database become administrators automatically. If you have Storage Service configured with an external authentication backend, you can use [https://github.com/artefactual/archivematica-storage-service/tree/stable/0.19.x/install SS_AUTH_DEFAULT_USER_ROLE] to establish a new default user role for authenticated users or tweak the [https://github.com/artefactual/archivematica-storage-service/blob/stable/0.19.x/storage_service/storage_service/settings/base.py authentication backend settings] to map the user roles according to your needs.&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
=== User roles ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1486&lt;br /&gt;
&lt;br /&gt;
Users can be associated to one of the following roles or permission sets: administrators, managers, reviewers and readers. Supported authentication backends like LDAP, Shibboleth or CAS include new configuration attributes to promote authenticated users.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Storage_Service_0.19_Release_Notes&amp;diff=13654</id>
		<title>Storage Service 0.19 Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Storage_Service_0.19_Release_Notes&amp;diff=13654"/>
		<updated>2022-02-25T18:09:21Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Storage Service 0.19 release notes&lt;br /&gt;
&lt;br /&gt;
* '''Release date: TBD'''&lt;br /&gt;
&lt;br /&gt;
== Upgrading ==&lt;br /&gt;
&lt;br /&gt;
* With the new permission module (see [https://github.com/artefactual/archivematica-storage-service/pull/625 pull request #625] for more), existing users in the application database become administrators automatically. If you have Storage Service configured with an external authentication backend, you can use [https://github.com/artefactual/archivematica-storage-service/tree/stable/0.19.x/install SS_AUTH_DEFAULT_USER_ROLE] to establish a new default user role for authenticated users or tweak the [https://github.com/artefactual/archivematica-storage-service/blob/qa/0.x/storage_service/storage_service/settings/base.py authentication backend settings] to map the user roles according to your needs.&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
=== User roles ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1486&lt;br /&gt;
&lt;br /&gt;
Users can be associated to one of the following roles or permission sets: administrators, managers, reviewers and readers. Supported authentication backends like LDAP, Shibboleth or CAS include new configuration attributes to promote authenticated users.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13653</id>
		<title>Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13653"/>
		<updated>2022-02-24T18:56:57Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; Release Notes&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
&lt;br /&gt;
Release notes are prepared by Artefactual for each release of Archivematica. Most releases also have a corresponding release of the Storage System, and may also include corresponding releases for various dependencies and libraries (i.e. FIDO, Automation Tools) - be sure to check the release notes for more information.&lt;br /&gt;
&lt;br /&gt;
Major releases are '''bolded''', minor releases are not.&lt;br /&gt;
&lt;br /&gt;
Features, enhancements, and bug fixes are often sponsored by members of the Archivematica community who are dedicated to funding Archivematica's ongoing development and maintenance. Code contributors are individuals who write Archivematica code and [https://github.com/artefactual/archivematica/blob/stable/1.6.x/CONTRIBUTING.md| contribute it] back to the project. Archivematica couldn't continue to grow without sponsors and contributors - thank you!&lt;br /&gt;
&lt;br /&gt;
Questions about a release or the release notes? Ask on the [https://groups.google.com/forum/#!forum/archivematica| Archivematica Google Group!]&lt;br /&gt;
&lt;br /&gt;
== Security patches ==&lt;br /&gt;
&lt;br /&gt;
* [[Log4j|Log4j vulnerability information]] Updated December 13, 2021&lt;br /&gt;
&lt;br /&gt;
== Archivematica 1.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Storage Service 0.19 Release Notes|'''Storage Service 0.19 Release Notes''']] (Upcoming release)&lt;br /&gt;
* [[Archivematica_1.13.2|Archivematica 1.13.2 Release Notes]] (Current release)&lt;br /&gt;
* [[Archivematica_1.13.1_and_Storage_Service_0.18.1_release_notes|'''Archivematica 1.13.1 and Storage Service 0.18.1 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.13.0_and_Storage_Service_0.18.0_release_notes|'''Archivematica 1.13.0 and Storage Service 0.18.0 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.12.2|Archivematica 1.12.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.12.1_and_Storage_Service_0.17.1_release_notes|Archivematica 1.12.1 and Storage Service 0.17.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes|'''Archivematica 1.12.0 and Storage Service 0.17.0 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.11.2_and_Storage_Service_0.16.1_release_notes|Archivematica 1.11.2 and Storage Service 0.16.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.11.1|Archivematica 1.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.11_and_Storage_Service_0.16_release_notes|'''Archivematica 1.11 and Storage Service 0.16 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.10.2|Archivematica 1.10.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10.1_release_notes|Archivematica 1.10.1 and Storage Service 0.15.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10_and_Storage_Service_0.15_release_notes|'''Archivematica 1.10 and Storage Service 0.15 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.9.3|Archivematica 1.9.3 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.9.2_release_notes|Archivematica 1.9.2 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9.1_and_Storage_Service_0.14.1_release_notes|Archivematica 1.9.1 and Storage Service 0.14.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9_and_Storage_Service_0.14_release_notes|'''Archivematica 1.9 and Storage Service 0.14 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.8.1_release_notes|Archivematica 1.8.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.8_and_Storage_Service_0.13_release_notes|'''Archivematica 1.8 and Storage Service 0.13 Release Notes''']]&lt;br /&gt;
* [[Archivematica 1.7.2_release_notes|Archivematica 1.7.2 Release Notes]] &lt;br /&gt;
* [[Storage Service 0.12 Release Notes|'''Storage Service 0.12 Release Notes''']] &lt;br /&gt;
* [[Archivematica 1.7.1_release_notes|Archivematica 1.7.1 Release Notes]]&lt;br /&gt;
* [[Storage Service 0.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.7_and_Storage_Service_0.11_release_notes|'''Archivematica 1.7 and Storage Service 0.11 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.6.1_release_notes|Archivematica 1.6.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.6_release_notes|'''Archivematica 1.6 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.5.1_Release_Notes|Archivematica 1.5.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.5_Release_Notes|'''Archivematica 1.5 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.4.1_Release_Notes|Archivematica 1.4.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.4_Release_Notes|'''Archivematica 1.4 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.3.2_Release_Notes|Archivematica 1.3.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3.1_Release_Notes|Archivematica 1.3.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3_Release_Notes|'''Archivematica 1.3 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.2_Release_Notes|'''Archivematica 1.2 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.1_Release_Notes|'''Archivematica 1.1 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.0_Release_Notes|'''Archivematica 1.0 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 0.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_0.10-beta_Release_Notes|'''Archivematica 0.10 Release Notes''']] &lt;br /&gt;
* [[Archivematica_0.9_Release_Notes|'''Archivematica 0.9 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.8 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.7.1_Release_Notes|Archivematica 0.7.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_0.7_Release_Notes|'''Archivematica 0.7 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.6 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
&lt;br /&gt;
* [[Major_release_notes|Template for major releases]]&lt;br /&gt;
* [[Minor_release_notes|Template for minor releases]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Storage_Service_0.19_Release_Notes&amp;diff=13650</id>
		<title>Storage Service 0.19 Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Storage_Service_0.19_Release_Notes&amp;diff=13650"/>
		<updated>2022-01-15T07:03:44Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Storage Service 0.19 release notes&lt;br /&gt;
&lt;br /&gt;
* '''Release date: TBD'''&lt;br /&gt;
&lt;br /&gt;
== Upgrading ==&lt;br /&gt;
&lt;br /&gt;
* '''TODO!''' Describe transition to the new permission module and the use of SS_AUTH_DEFAULT_USER_ROLE=&amp;quot;reader&amp;quot;, refer to docs (https://github.com/artefactual/archivematica-storage-service/pull/625).&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
=== User roles ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1486&lt;br /&gt;
&lt;br /&gt;
Users can be associated to one of the following roles or permission sets: administrators, managers, reviewers and readers. Supported authentication backends like LDAP, Shibboleth or CAS include new configuration attributes to promote authenticated users.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Storage_Service_0.19_Release_Notes&amp;diff=13649</id>
		<title>Storage Service 0.19 Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Storage_Service_0.19_Release_Notes&amp;diff=13649"/>
		<updated>2022-01-15T07:03:22Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Storage Service 0.19 release notes&lt;br /&gt;
&lt;br /&gt;
**Release date: ?**&lt;br /&gt;
&lt;br /&gt;
== Upgrading ==&lt;br /&gt;
&lt;br /&gt;
* '''TODO!''' Describe transition to the new permission module and the use of SS_AUTH_DEFAULT_USER_ROLE=&amp;quot;reader&amp;quot;, refer to docs (https://github.com/artefactual/archivematica-storage-service/pull/625).&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
=== User roles ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1486&lt;br /&gt;
&lt;br /&gt;
Users can be associated to one of the following roles or permission sets: administrators, managers, reviewers and readers. Supported authentication backends like LDAP, Shibboleth or CAS include new configuration attributes to promote authenticated users.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Storage_Service_0.19_Release_Notes&amp;diff=13648</id>
		<title>Storage Service 0.19 Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Storage_Service_0.19_Release_Notes&amp;diff=13648"/>
		<updated>2022-01-15T07:02:55Z</updated>

		<summary type="html">&lt;p&gt;Sevein: Created page with &amp;quot;Home &amp;gt; Release Notes &amp;gt; Storage Service 0.19 release notes  **Release date: ?**  == Upgrading ==  * **TODO!** Describe transition to the new per...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Storage Service 0.19 release notes&lt;br /&gt;
&lt;br /&gt;
**Release date: ?**&lt;br /&gt;
&lt;br /&gt;
== Upgrading ==&lt;br /&gt;
&lt;br /&gt;
* **TODO!** Describe transition to the new permission module and the use of SS_AUTH_DEFAULT_USER_ROLE=&amp;quot;reader&amp;quot;, refer to docs (https://github.com/artefactual/archivematica-storage-service/pull/625).&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
=== User roles ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1486&lt;br /&gt;
&lt;br /&gt;
Users can be associated to one of the following roles or permission sets: administrators, managers, reviewers and readers. Supported authentication backends like LDAP, Shibboleth or CAS include new configuration attributes to promote authenticated users.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13647</id>
		<title>Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13647"/>
		<updated>2022-01-15T06:51:54Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Archivematica 1.x releases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; Release Notes&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
&lt;br /&gt;
Release notes are prepared by Artefactual for each release of Archivematica. Most releases also have a corresponding release of the Storage System, and may also include corresponding releases for various dependencies and libraries (i.e. FIDO, Automation Tools) - be sure to check the release notes for more information.&lt;br /&gt;
&lt;br /&gt;
Major releases are '''bolded''', minor releases are not.&lt;br /&gt;
&lt;br /&gt;
Features, enhancements, and bug fixes are often sponsored by members of the Archivematica community who are dedicated to funding Archivematica's ongoing development and maintenance. Code contributors are individuals who write Archivematica code and [https://github.com/artefactual/archivematica/blob/stable/1.6.x/CONTRIBUTING.md| contribute it] back to the project. Archivematica couldn't continue to grow without sponsors and contributors - thank you!&lt;br /&gt;
&lt;br /&gt;
Questions about a release or the release notes? Ask on the [https://groups.google.com/forum/#!forum/archivematica| Archivematica Google Group!]&lt;br /&gt;
&lt;br /&gt;
== Security patches ==&lt;br /&gt;
&lt;br /&gt;
* [[Log4j|Log4j vulnerability information]] Updated December 13, 2021&lt;br /&gt;
&lt;br /&gt;
== Archivematica 1.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Storage Service 0.19 Release Notes|'''Storage Service 0.19 Release Notes''']] (Upcoming release)&lt;br /&gt;
* [[Archivematica_1.13.2|Archivematica 1.13.2 Release Notes]] (Current release)&lt;br /&gt;
* [[Archivematica_1.13.1_and_Storage_Service_0.18.1_release_notes|'''Archivematica 1.13.1 and Storage Service 0.18.1 Release Notes''']] (Current release)&lt;br /&gt;
* [[Archivematica_1.13.0_and_Storage_Service_0.18.0_release_notes|'''Archivematica 1.13.0 and Storage Service 0.18.0 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.12.2|Archivematica 1.12.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.12.1_and_Storage_Service_0.17.1_release_notes|Archivematica 1.12.1 and Storage Service 0.17.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes|'''Archivematica 1.12.0 and Storage Service 0.17.0 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.11.2_and_Storage_Service_0.16.1_release_notes|Archivematica 1.11.2 and Storage Service 0.16.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.11.1|Archivematica 1.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.11_and_Storage_Service_0.16_release_notes|'''Archivematica 1.11 and Storage Service 0.16 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.10.2|Archivematica 1.10.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10.1_release_notes|Archivematica 1.10.1 and Storage Service 0.15.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10_and_Storage_Service_0.15_release_notes|'''Archivematica 1.10 and Storage Service 0.15 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.9.3|Archivematica 1.9.3 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.9.2_release_notes|Archivematica 1.9.2 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9.1_and_Storage_Service_0.14.1_release_notes|Archivematica 1.9.1 and Storage Service 0.14.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9_and_Storage_Service_0.14_release_notes|'''Archivematica 1.9 and Storage Service 0.14 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.8.1_release_notes|Archivematica 1.8.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.8_and_Storage_Service_0.13_release_notes|'''Archivematica 1.8 and Storage Service 0.13 Release Notes''']]&lt;br /&gt;
* [[Archivematica 1.7.2_release_notes|Archivematica 1.7.2 Release Notes]] &lt;br /&gt;
* [[Storage Service 0.12 Release Notes|'''Storage Service 0.12 Release Notes''']] &lt;br /&gt;
* [[Archivematica 1.7.1_release_notes|Archivematica 1.7.1 Release Notes]]&lt;br /&gt;
* [[Storage Service 0.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.7_and_Storage_Service_0.11_release_notes|'''Archivematica 1.7 and Storage Service 0.11 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.6.1_release_notes|Archivematica 1.6.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.6_release_notes|'''Archivematica 1.6 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.5.1_Release_Notes|Archivematica 1.5.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.5_Release_Notes|'''Archivematica 1.5 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.4.1_Release_Notes|Archivematica 1.4.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.4_Release_Notes|'''Archivematica 1.4 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.3.2_Release_Notes|Archivematica 1.3.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3.1_Release_Notes|Archivematica 1.3.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3_Release_Notes|'''Archivematica 1.3 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.2_Release_Notes|'''Archivematica 1.2 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.1_Release_Notes|'''Archivematica 1.1 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.0_Release_Notes|'''Archivematica 1.0 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 0.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_0.10-beta_Release_Notes|'''Archivematica 0.10 Release Notes''']] &lt;br /&gt;
* [[Archivematica_0.9_Release_Notes|'''Archivematica 0.9 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.8 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.7.1_Release_Notes|Archivematica 0.7.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_0.7_Release_Notes|'''Archivematica 0.7 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.6 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
&lt;br /&gt;
* [[Major_release_notes|Template for major releases]]&lt;br /&gt;
* [[Minor_release_notes|Template for minor releases]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.12.2&amp;diff=13639</id>
		<title>Archivematica 1.12.2</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.12.2&amp;diff=13639"/>
		<updated>2021-12-13T16:38:48Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.12.2&lt;br /&gt;
&lt;br /&gt;
'''Release date: 13 Dic 2021'''&lt;br /&gt;
&lt;br /&gt;
This release fixes a critical security issue found in the Archivematica dashboard that allows unauthorized users to access some parts of the Administration tab.&lt;br /&gt;
&lt;br /&gt;
This issue was discovered as a result of a security audit by Scholars Portal. It was not discovered as a result of a breach. Scholars Portal reported the issue to Artefactual privately via email. Once we became aware of the issue, we began to develop the fix. Artefactual has also implemented security reporting process documentation across Archivematica-related GitHub repositories and changed issue templates to reflect a more secure process. You can review Archivematica’s security reporting process here: https://github.com/artefactual/archivematica/security/policy.&lt;br /&gt;
&lt;br /&gt;
==Upgrading==&lt;br /&gt;
&lt;br /&gt;
The fix can be easily installed since this issue only affects the dashboard.&lt;br /&gt;
&lt;br /&gt;
CentOS users relying on Archivematica packages should run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sudo yum -y update archivematica-dashboard&lt;br /&gt;
    sudo systemctl restart archivematica-dashboard&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Automated installations using Ansible should deploy from the stable branch: stable/1.12.x.&lt;br /&gt;
&lt;br /&gt;
Alternately, a fix can be applied to the web server. The following configuration snippet shows an updated Nginx server block with the additional rule added.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  server {&lt;br /&gt;
     listen 80;&lt;br /&gt;
     client_max_body_size 256M;&lt;br /&gt;
     server_name _;&lt;br /&gt;
     location / {&lt;br /&gt;
         set $upstream_endpoint http://archivematica-dashboard:8000;&lt;br /&gt;
         proxy_set_header Host $http_host;&lt;br /&gt;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
         proxy_redirect off;&lt;br /&gt;
         proxy_buffering off;&lt;br /&gt;
         proxy_read_timeout 172800s;&lt;br /&gt;
         proxy_pass $upstream_endpoint;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     # Directive to block access to admin pages in&lt;br /&gt;
     # Archivematica v1.11.0 or older.&lt;br /&gt;
     location ~ ^/administration/accounts/login/.+$ {&lt;br /&gt;
         return 404;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the fix has been applied, please be sure to update passwords and API keys:&lt;br /&gt;
&lt;br /&gt;
* Change the password and API key for the Storage Service user:&lt;br /&gt;
** In the Storage Service, change the password for the Storage Service user that the Archivematica dashboard uses. This will also regenerate the API key for the Storage Service user.&lt;br /&gt;
** In the Archivematica dashboard, under Administration &amp;gt; General, update the Storage Service user password and the API key to reflect the new password/key.&lt;br /&gt;
* Change the password for AtoM/Binder DIP upload.&lt;br /&gt;
* Review the PREMIS agent information to ensure that it is correct.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.12.2&amp;diff=13638</id>
		<title>Archivematica 1.12.2</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.12.2&amp;diff=13638"/>
		<updated>2021-12-13T10:30:50Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.12.2&lt;br /&gt;
&lt;br /&gt;
'''Release date: 13 Dic 2021'''&lt;br /&gt;
&lt;br /&gt;
This release fixes a critical security issue found in the Archivematica dashboard that allows unauthorized users to access some parts of the Administration tab.&lt;br /&gt;
&lt;br /&gt;
This issue was discovered as a result of a security audit by Scholars Portal. It was not discovered as a result of a breach. Scholars Portal reported the issue to Artefactual privately via email. Once we became aware of the issue, we began to develop the fix. Artefactual has also implemented security reporting process documentation across Archivematica-related GitHub repositories and changed issue templates to reflect a more secure process. You can review Archivematica’s security reporting process here: https://github.com/artefactual/archivematica/security/policy.&lt;br /&gt;
&lt;br /&gt;
==Upgrading==&lt;br /&gt;
&lt;br /&gt;
The fix can be easily installed since this issue only affects the dashboard.&lt;br /&gt;
&lt;br /&gt;
CentOS users relying on Archivematica packages should run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sudo yum -y update archivematica-dashboard&lt;br /&gt;
    sudo systemctl restart archivematica-dashboard&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Automated installations using Ansible should deploy from the stable branch: stable/1.12.x.&lt;br /&gt;
&lt;br /&gt;
Alternately, a fix can be applied to the web server. The following configuration snippet shows an updated Nginx server block with the additional rule added.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  server {&lt;br /&gt;
     listen 80;&lt;br /&gt;
     client_max_body_size 256M;&lt;br /&gt;
     server_name _;&lt;br /&gt;
     location / {&lt;br /&gt;
         set $upstream_endpoint http://archivematica-dashboard:8000;&lt;br /&gt;
         proxy_set_header Host $http_host;&lt;br /&gt;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
         proxy_redirect off;&lt;br /&gt;
         proxy_buffering off;&lt;br /&gt;
         proxy_read_timeout 172800s;&lt;br /&gt;
         proxy_pass $upstream_endpoint;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     # Directive to block access to admin pages in&lt;br /&gt;
     # Archivematica v1.11.0 or older.&lt;br /&gt;
     location ~ ^/administration/accounts/login/.+$ {&lt;br /&gt;
         return 404;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the fix has been applied, please be sure to update passwords and API keys:&lt;br /&gt;
&lt;br /&gt;
* Change the password and API key for the Storage Service user:&lt;br /&gt;
** In the Storage Service, change the password for the Storage Service user that the Archivematica dashboard uses. This will also regenerate the API key for the Storage Service user.&lt;br /&gt;
** In the Archivematica dashboard, under Administration &amp;gt; General, update the Storage Service user password and the API key to reflect the new password/key.&lt;br /&gt;
* Change the password for AtoM/Binder DIP upload.&lt;br /&gt;
* Review the PREMIS agent information to ensure that it is correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 10px 10px; border: 1px solid black; background-color: #F79086;&amp;quot;&amp;gt;Note: if you are upgrading from Archivematica 1.10.x or earlier, please be sure to clean up the completed transfers watched directory before upgrading. Instructions can be found on the [https://www.archivematica.org/en/docs/archivematica-1.11/admin-manual/installation-setup/upgrading/upgrading/#upgrade Upgrading] page in the documentation. &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.13.2&amp;diff=13637</id>
		<title>Archivematica 1.13.2</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.13.2&amp;diff=13637"/>
		<updated>2021-12-13T10:30:29Z</updated>

		<summary type="html">&lt;p&gt;Sevein: Created page with &amp;quot;Home &amp;gt; Release Notes &amp;gt; Archivematica 1.13.2  '''Release date: 13 Dic 2021'''  This release fixes a critical security issue found in the Archive...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.13.2&lt;br /&gt;
&lt;br /&gt;
'''Release date: 13 Dic 2021'''&lt;br /&gt;
&lt;br /&gt;
This release fixes a critical security issue found in the Archivematica dashboard that allows unauthorized users to access some parts of the Administration tab.&lt;br /&gt;
&lt;br /&gt;
This issue was discovered as a result of a security audit by Scholars Portal. It was not discovered as a result of a breach. Scholars Portal reported the issue to Artefactual privately via email. Once we became aware of the issue, we began to develop the fix. Artefactual has also implemented security reporting process documentation across Archivematica-related GitHub repositories and changed issue templates to reflect a more secure process. You can review Archivematica’s security reporting process here: https://github.com/artefactual/archivematica/security/policy.&lt;br /&gt;
&lt;br /&gt;
==Upgrading==&lt;br /&gt;
&lt;br /&gt;
The fix can be easily installed since this issue only affects the dashboard.&lt;br /&gt;
&lt;br /&gt;
CentOS users relying on Archivematica packages should run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sudo yum -y update archivematica-dashboard&lt;br /&gt;
    sudo systemctl restart archivematica-dashboard&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Automated installations using Ansible should deploy from the stable branch: stable/1.13.x.&lt;br /&gt;
&lt;br /&gt;
Alternately, a fix can be applied to the web server. The following configuration snippet shows an updated Nginx server block with the additional rule added.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  server {&lt;br /&gt;
     listen 80;&lt;br /&gt;
     client_max_body_size 256M;&lt;br /&gt;
     server_name _;&lt;br /&gt;
     location / {&lt;br /&gt;
         set $upstream_endpoint http://archivematica-dashboard:8000;&lt;br /&gt;
         proxy_set_header Host $http_host;&lt;br /&gt;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
         proxy_redirect off;&lt;br /&gt;
         proxy_buffering off;&lt;br /&gt;
         proxy_read_timeout 172800s;&lt;br /&gt;
         proxy_pass $upstream_endpoint;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     # Directive to block access to admin pages in&lt;br /&gt;
     # Archivematica v1.11.0 or older.&lt;br /&gt;
     location ~ ^/administration/accounts/login/.+$ {&lt;br /&gt;
         return 404;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the fix has been applied, please be sure to update passwords and API keys:&lt;br /&gt;
&lt;br /&gt;
* Change the password and API key for the Storage Service user:&lt;br /&gt;
** In the Storage Service, change the password for the Storage Service user that the Archivematica dashboard uses. This will also regenerate the API key for the Storage Service user.&lt;br /&gt;
** In the Archivematica dashboard, under Administration &amp;gt; General, update the Storage Service user password and the API key to reflect the new password/key.&lt;br /&gt;
* Change the password for AtoM/Binder DIP upload.&lt;br /&gt;
* Review the PREMIS agent information to ensure that it is correct.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.12.2&amp;diff=13636</id>
		<title>Archivematica 1.12.2</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.12.2&amp;diff=13636"/>
		<updated>2021-12-13T10:29:39Z</updated>

		<summary type="html">&lt;p&gt;Sevein: Created page with &amp;quot;Home &amp;gt; Release Notes &amp;gt; Archivematica 1.12.2  '''Release date: 13 Dic 2021'''  This release fixes a critical security issue found in the Archive...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.12.2&lt;br /&gt;
&lt;br /&gt;
'''Release date: 13 Dic 2021'''&lt;br /&gt;
&lt;br /&gt;
This release fixes a critical security issue found in the Archivematica dashboard that allows unauthorized users to access some parts of the Administration tab.&lt;br /&gt;
&lt;br /&gt;
This issue was discovered as a result of a security audit by Scholars Portal. It was not discovered as a result of a breach. Scholars Portal reported the issue to Artefactual privately via email. Once we became aware of the issue, we began to develop the fix. Artefactual has also implemented security reporting process documentation across Archivematica-related GitHub repositories and changed issue templates to reflect a more secure process. You can review Archivematica’s security reporting process here: https://github.com/artefactual/archivematica/security/policy.&lt;br /&gt;
&lt;br /&gt;
==Upgrading==&lt;br /&gt;
&lt;br /&gt;
The fix can be easily installed since this issue only affects the dashboard.&lt;br /&gt;
&lt;br /&gt;
CentOS users relying on Archivematica packages should run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sudo yum -y update archivematica-dashboard&lt;br /&gt;
    sudo systemctl restart archivematica-dashboard&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Automated installations using Ansible should deploy from the stable branches: stable/1.12.x.&lt;br /&gt;
&lt;br /&gt;
Alternately, a fix can be applied to the web server. The following configuration snippet shows an updated Nginx server block with the additional rule added.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  server {&lt;br /&gt;
     listen 80;&lt;br /&gt;
     client_max_body_size 256M;&lt;br /&gt;
     server_name _;&lt;br /&gt;
     location / {&lt;br /&gt;
         set $upstream_endpoint http://archivematica-dashboard:8000;&lt;br /&gt;
         proxy_set_header Host $http_host;&lt;br /&gt;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
         proxy_redirect off;&lt;br /&gt;
         proxy_buffering off;&lt;br /&gt;
         proxy_read_timeout 172800s;&lt;br /&gt;
         proxy_pass $upstream_endpoint;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     # Directive to block access to admin pages in&lt;br /&gt;
     # Archivematica v1.11.0 or older.&lt;br /&gt;
     location ~ ^/administration/accounts/login/.+$ {&lt;br /&gt;
         return 404;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After the fix has been applied, please be sure to update passwords and API keys:&lt;br /&gt;
&lt;br /&gt;
* Change the password and API key for the Storage Service user:&lt;br /&gt;
** In the Storage Service, change the password for the Storage Service user that the Archivematica dashboard uses. This will also regenerate the API key for the Storage Service user.&lt;br /&gt;
** In the Archivematica dashboard, under Administration &amp;gt; General, update the Storage Service user password and the API key to reflect the new password/key.&lt;br /&gt;
* Change the password for AtoM/Binder DIP upload.&lt;br /&gt;
* Review the PREMIS agent information to ensure that it is correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 10px 10px; border: 1px solid black; background-color: #F79086;&amp;quot;&amp;gt;Note: if you are upgrading from Archivematica 1.10.x or earlier, please be sure to clean up the completed transfers watched directory before upgrading. Instructions can be found on the [https://www.archivematica.org/en/docs/archivematica-1.11/admin-manual/installation-setup/upgrading/upgrading/#upgrade Upgrading] page in the documentation. &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13635</id>
		<title>Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13635"/>
		<updated>2021-12-13T10:28:03Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Archivematica 1.x releases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; Release Notes&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
&lt;br /&gt;
Release notes are prepared by Artefactual for each release of Archivematica. Most releases also have a corresponding release of the Storage System, and may also include corresponding releases for various dependencies and libraries (i.e. FIDO, Automation Tools) - be sure to check the release notes for more information.&lt;br /&gt;
&lt;br /&gt;
Major releases are '''bolded''', minor releases are not.&lt;br /&gt;
&lt;br /&gt;
Features, enhancements, and bug fixes are often sponsored by members of the Archivematica community who are dedicated to funding Archivematica's ongoing development and maintenance. Code contributors are individuals who write Archivematica code and [https://github.com/artefactual/archivematica/blob/stable/1.6.x/CONTRIBUTING.md| contribute it] back to the project. Archivematica couldn't continue to grow without sponsors and contributors - thank you!&lt;br /&gt;
&lt;br /&gt;
Questions about a release or the release notes? Ask on the [https://groups.google.com/forum/#!forum/archivematica| Archivematica Google Group!]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 1.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_1.13.2|Archivematica 1.13.2 Release Notes]] (Current release)&lt;br /&gt;
* [[Archivematica_1.13.1_and_Storage_Service_0.18.1_release_notes|'''Archivematica 1.13.1 and Storage Service 0.18.1 Release Notes''']] (Current release)&lt;br /&gt;
* [[Archivematica_1.13.0_and_Storage_Service_0.18.0_release_notes|'''Archivematica 1.13.0 and Storage Service 0.18.0 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.12.2|Archivematica 1.12.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.12.1_and_Storage_Service_0.17.1_release_notes|Archivematica 1.12.1 and Storage Service 0.17.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes|'''Archivematica 1.12.0 and Storage Service 0.17.0 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.11.2_and_Storage_Service_0.16.1_release_notes|Archivematica 1.11.2 and Storage Service 0.16.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.11.1|Archivematica 1.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.11_and_Storage_Service_0.16_release_notes|'''Archivematica 1.11 and Storage Service 0.16 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.10.2|Archivematica 1.10.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10.1_release_notes|Archivematica 1.10.1 and Storage Service 0.15.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10_and_Storage_Service_0.15_release_notes|'''Archivematica 1.10 and Storage Service 0.15 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.9.3|Archivematica 1.9.3 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.9.2_release_notes|Archivematica 1.9.2 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9.1_and_Storage_Service_0.14.1_release_notes|Archivematica 1.9.1 and Storage Service 0.14.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9_and_Storage_Service_0.14_release_notes|'''Archivematica 1.9 and Storage Service 0.14 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.8.1_release_notes|Archivematica 1.8.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.8_and_Storage_Service_0.13_release_notes|'''Archivematica 1.8 and Storage Service 0.13 Release Notes''']]&lt;br /&gt;
*[[Archivematica 1.7.2_release_notes|Archivematica 1.7.2 Release Notes]] &lt;br /&gt;
*[[Storage Service 0.12 Release Notes|'''Storage Service 0.12 Release Notes''']] &lt;br /&gt;
*[[Archivematica 1.7.1_release_notes|Archivematica 1.7.1 Release Notes]]&lt;br /&gt;
*[[Storage Service 0.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.7_and_Storage_Service_0.11_release_notes|'''Archivematica 1.7 and Storage Service 0.11 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.6.1_release_notes|Archivematica 1.6.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.6_release_notes|'''Archivematica 1.6 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.5.1_Release_Notes|Archivematica 1.5.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.5_Release_Notes|'''Archivematica 1.5 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.4.1_Release_Notes|Archivematica 1.4.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.4_Release_Notes|'''Archivematica 1.4 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.3.2_Release_Notes|Archivematica 1.3.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3.1_Release_Notes|Archivematica 1.3.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3_Release_Notes|'''Archivematica 1.3 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.2_Release_Notes|'''Archivematica 1.2 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.1_Release_Notes|'''Archivematica 1.1 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.0_Release_Notes|'''Archivematica 1.0 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 0.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_0.10-beta_Release_Notes|'''Archivematica 0.10 Release Notes''']] &lt;br /&gt;
* [[Archivematica_0.9_Release_Notes|'''Archivematica 0.9 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.8 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.7.1_Release_Notes|Archivematica 0.7.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_0.7_Release_Notes|'''Archivematica 0.7 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.6 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
&lt;br /&gt;
* [[Major_release_notes|Template for major releases]]&lt;br /&gt;
* [[Minor_release_notes|Template for minor releases]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.13.1_and_Storage_Service_0.18.1_release_notes&amp;diff=13619</id>
		<title>Archivematica 1.13.1 and Storage Service 0.18.1 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.13.1_and_Storage_Service_0.18.1_release_notes&amp;diff=13619"/>
		<updated>2021-10-19T16:12:54Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.13.1 and Storage Service 0.18.1&lt;br /&gt;
&lt;br /&gt;
'''Release date: October 19, 2021'''&lt;br /&gt;
&lt;br /&gt;
== Environments ==&lt;br /&gt;
&lt;br /&gt;
Please see the [https://www.archivematica.org/en/docs/archivematica-1.13/admin-manual/installation-setup/installation/installation/#installation installation instructions].&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.13.1 and Storage Service 0.18.1 have been tested in the following environments:&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 18.04 64-bit Server Edition&lt;br /&gt;
* CentOS 7 64-bit&lt;br /&gt;
&lt;br /&gt;
Please note that we've dropped support for Ubuntu Linux 16.04 since it reached the end of its five-year LTS window on April 30th 2021. We're planning to add support for Ubuntu 20.04 in the short term.&lt;br /&gt;
&lt;br /&gt;
For development purposes, most of our developers prefer to use Docker containers. These and all above environments are linked from the installation instructions above.&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
Please see the 1.13.1 milestone in GitHub for all issues addressed in this release: https://github.com/archivematica/Issues/milestone/19?closed=1.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.13.1_and_Storage_Service_0.18.1_release_notes&amp;diff=13618</id>
		<title>Archivematica 1.13.1 and Storage Service 0.18.1 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.13.1_and_Storage_Service_0.18.1_release_notes&amp;diff=13618"/>
		<updated>2021-10-19T16:12:39Z</updated>

		<summary type="html">&lt;p&gt;Sevein: Created page with &amp;quot;Home &amp;gt; Release Notes &amp;gt; Archivematica 1.13.1 and Storage Service 0.18.1  '''Release date: October 19, 2021'''  == Environments ==  Please see th...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.13.1 and Storage Service 0.18.1&lt;br /&gt;
&lt;br /&gt;
'''Release date: October 19, 2021'''&lt;br /&gt;
&lt;br /&gt;
== Environments ==&lt;br /&gt;
&lt;br /&gt;
Please see the [https://www.archivematica.org/en/docs/archivematica-1.13/admin-manual/installation-setup/installation/installation/#installation installation instructions].&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.13.1 and Storage Service 0.18.1 have been tested in the following environments:&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 18.04 64-bit Server Edition&lt;br /&gt;
* CentOS 7 64-bit&lt;br /&gt;
&lt;br /&gt;
Please note that we've dropped support for Ubuntu Linux 16.04 since it reached the end of its five-year LTS window on April 30th 2021. We're planning to add support for Ubuntu 20.04 in the short term.&lt;br /&gt;
&lt;br /&gt;
For development purposes, most of our developers prefer to use Docker containers. These and all above environments are linked from the installation instructions above.&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
Please see the 1.13.1 milestone in GitHub for all issues addressed in this release: https://github.com/archivematica/Issues/milestone/19.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13617</id>
		<title>Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13617"/>
		<updated>2021-10-19T16:10:20Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Archivematica 1.x releases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; Release Notes&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
&lt;br /&gt;
Release notes are prepared by Artefactual for each release of Archivematica. Most releases also have a corresponding release of the Storage System, and may also include corresponding releases for various dependencies and libraries (i.e. FIDO, Automation Tools) - be sure to check the release notes for more information.&lt;br /&gt;
&lt;br /&gt;
Major releases are '''bolded''', minor releases are not.&lt;br /&gt;
&lt;br /&gt;
Features, enhancements, and bug fixes are often sponsored by members of the Archivematica community who are dedicated to funding Archivematica's ongoing development and maintenance. Code contributors are individuals who write Archivematica code and [https://github.com/artefactual/archivematica/blob/stable/1.6.x/CONTRIBUTING.md| contribute it] back to the project. Archivematica couldn't continue to grow without sponsors and contributors - thank you!&lt;br /&gt;
&lt;br /&gt;
Questions about a release or the release notes? Ask on the [https://groups.google.com/forum/#!forum/archivematica| Archivematica Google Group!]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 1.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_1.13.1_and_Storage_Service_0.18.1_release_notes|'''Archivematica 1.13.1 and Storage Service 0.18.1 Release Notes''']] (Current release)&lt;br /&gt;
* [[Archivematica_1.13.0_and_Storage_Service_0.18.0_release_notes|'''Archivematica 1.13.0 and Storage Service 0.18.0 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.12.1_and_Storage_Service_0.17.1_release_notes|Archivematica 1.12.1 and Storage Service 0.17.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes|'''Archivematica 1.12.0 and Storage Service 0.17.0 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.11.2_and_Storage_Service_0.16.1_release_notes|Archivematica 1.11.2 and Storage Service 0.16.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.11.1|Archivematica 1.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.11_and_Storage_Service_0.16_release_notes|'''Archivematica 1.11 and Storage Service 0.16 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.10.2|Archivematica 1.10.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10.1_release_notes|Archivematica 1.10.1 and Storage Service 0.15.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10_and_Storage_Service_0.15_release_notes|'''Archivematica 1.10 and Storage Service 0.15 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.9.3|Archivematica 1.9.3 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.9.2_release_notes|Archivematica 1.9.2 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9.1_and_Storage_Service_0.14.1_release_notes|Archivematica 1.9.1 and Storage Service 0.14.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9_and_Storage_Service_0.14_release_notes|'''Archivematica 1.9 and Storage Service 0.14 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.8.1_release_notes|Archivematica 1.8.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.8_and_Storage_Service_0.13_release_notes|'''Archivematica 1.8 and Storage Service 0.13 Release Notes''']]&lt;br /&gt;
*[[Archivematica 1.7.2_release_notes|Archivematica 1.7.2 Release Notes]] &lt;br /&gt;
*[[Storage Service 0.12 Release Notes|'''Storage Service 0.12 Release Notes''']] &lt;br /&gt;
*[[Archivematica 1.7.1_release_notes|Archivematica 1.7.1 Release Notes]]&lt;br /&gt;
*[[Storage Service 0.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.7_and_Storage_Service_0.11_release_notes|'''Archivematica 1.7 and Storage Service 0.11 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.6.1_release_notes|Archivematica 1.6.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.6_release_notes|'''Archivematica 1.6 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.5.1_Release_Notes|Archivematica 1.5.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.5_Release_Notes|'''Archivematica 1.5 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.4.1_Release_Notes|Archivematica 1.4.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.4_Release_Notes|'''Archivematica 1.4 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.3.2_Release_Notes|Archivematica 1.3.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3.1_Release_Notes|Archivematica 1.3.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3_Release_Notes|'''Archivematica 1.3 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.2_Release_Notes|'''Archivematica 1.2 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.1_Release_Notes|'''Archivematica 1.1 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.0_Release_Notes|'''Archivematica 1.0 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 0.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_0.10-beta_Release_Notes|'''Archivematica 0.10 Release Notes''']] &lt;br /&gt;
* [[Archivematica_0.9_Release_Notes|'''Archivematica 0.9 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.8 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.7.1_Release_Notes|Archivematica 0.7.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_0.7_Release_Notes|'''Archivematica 0.7 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.6 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
&lt;br /&gt;
* [[Major_release_notes|Template for major releases]]&lt;br /&gt;
* [[Minor_release_notes|Template for minor releases]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.13.0_and_Storage_Service_0.18.0_release_notes&amp;diff=13582</id>
		<title>Archivematica 1.13.0 and Storage Service 0.18.0 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.13.0_and_Storage_Service_0.18.0_release_notes&amp;diff=13582"/>
		<updated>2021-05-28T07:11:42Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.13.0 and Storage Service 0.18.0&lt;br /&gt;
&lt;br /&gt;
'''Release date: ???'''&lt;br /&gt;
&lt;br /&gt;
== Environments ==&lt;br /&gt;
&lt;br /&gt;
Please see the [https://www.archivematica.org/en/docs/archivematica-1.13/admin-manual/installation-setup/installation/installation/#installation installation instructions].&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.13.0 and Storage Service 0.18.0 have been tested in the following environments:&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 18.04 64-bit Server Edition&lt;br /&gt;
* CentOS 7 64-bit&lt;br /&gt;
&lt;br /&gt;
Please note that we've dropped support for Ubuntu Linux 16.04 since it reached the end of its five-year LTS window on April 30th 2021. We're planning to add support for Ubuntu 20.04 in the short term.&lt;br /&gt;
&lt;br /&gt;
For development purposes, most of our developers prefer to use Docker containers. These and all above environments are linked from the installation instructions above.&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
=== Disableable virus scanning ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/869&lt;br /&gt;
&lt;br /&gt;
Virus scanning is now disableable from the processing configuration. &lt;br /&gt;
&lt;br /&gt;
=== Purge management command ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1239&lt;br /&gt;
&lt;br /&gt;
A new [https://www.archivematica.org/en/docs/archivematica-1.13/admin-manual/maintenance/maintenance/#management-commands management command] has been added to provide a mechanism to remove old processing data from the system filling up the application database and search indices.&lt;br /&gt;
&lt;br /&gt;
== Changed ==&lt;br /&gt;
&lt;br /&gt;
=== Python 3 ===&lt;br /&gt;
&lt;br /&gt;
* Issues: https://github.com/archivematica/Issues/issues?q=is%3Aopen+is%3Aissue+milestone%3A1.13.0+label%3A%22%3Asnake%3A%C2%B3+Python+3%22&lt;br /&gt;
&lt;br /&gt;
All Archivematica components are now running on Python 3.6.&lt;br /&gt;
&lt;br /&gt;
=== Archivematica Storage Service now uses MySQL by default ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/952&lt;br /&gt;
&lt;br /&gt;
MySQL is now the default database in Archivematica Storage Service. SQLite is still supported but we encourage users to migrate. We have documented the process: [https://www.archivematica.org/en/docs/storage-service-0.18/migration-sqlite-mysql/#migration-sqlite-mysql Migrating data from SQLite to MySQL].&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
Please see the 1.13 milestone in GitHub for all issues addressed in this release: https://github.com/archivematica/Issues/milestone/17.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.13.0_and_Storage_Service_0.18.0_release_notes&amp;diff=13581</id>
		<title>Archivematica 1.13.0 and Storage Service 0.18.0 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.13.0_and_Storage_Service_0.18.0_release_notes&amp;diff=13581"/>
		<updated>2021-05-28T07:11:22Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.13.0 and Storage Service 0.18.0&lt;br /&gt;
&lt;br /&gt;
'''Release date: ???'''&lt;br /&gt;
&lt;br /&gt;
== Environments ==&lt;br /&gt;
&lt;br /&gt;
Please see the [https://www.archivematica.org/en/docs/archivematica-1.13/admin-manual/installation-setup/installation/installation/#installation installation instructions].&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.13.0 and Storage Service 0.18.0 have been tested in the following environments:&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 18.04 64-bit Server Edition&lt;br /&gt;
* CentOS 7 64-bit&lt;br /&gt;
&lt;br /&gt;
Please note that we've dropped support for Ubuntu Linux 16.04 since it reached the end of its five-year LTS window on April 30th 2021. We're planning to add support for Ubuntu 20.04 in the short term.&lt;br /&gt;
&lt;br /&gt;
For development purposes, most of our developers prefer to use Docker containers. These and all above environments are linked from the installation instructions above.&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
=== Disableable virus scanning ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/869&lt;br /&gt;
&lt;br /&gt;
Virus scanning is now disableable from the processing configuration. &lt;br /&gt;
&lt;br /&gt;
=== Purge management command ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1239&lt;br /&gt;
&lt;br /&gt;
A new [https://www.archivematica.org/en/docs/archivematica-1.13/admin-manual/maintenance/maintenance/#management-commands management command] has been added to provide a mechanism to remove old processing data from the system filling up the application database and search indices.&lt;br /&gt;
&lt;br /&gt;
== Changed ==&lt;br /&gt;
&lt;br /&gt;
=== Python 3 ===&lt;br /&gt;
&lt;br /&gt;
* Issues: https://github.com/archivematica/Issues/issues?q=is%3Aopen+is%3Aissue+milestone%3A1.13.0+label%3A%22%3Asnake%3A%C2%B3+Python+3%22&lt;br /&gt;
&lt;br /&gt;
All Archivematica components are now running on Python 3.6.&lt;br /&gt;
&lt;br /&gt;
=== Archivematica Storage Service now uses MySQL by default ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/952&lt;br /&gt;
&lt;br /&gt;
MySQL is now the default database in Archivematica Storage Service. SQLite is still supported but we encourage users to migrate. We have documented the process: [https://www.archivematica.org/en/docs/storage-service-0.18/migration-sqlite-mysql/#migration-sqlite-mysql Migrating data from SQLite to MySQL].&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
Please see the 1.13 milestone in Github for all issues addressed in this release: https://github.com/archivematica/Issues/milestone/17&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.13.0_and_Storage_Service_0.18.0_release_notes&amp;diff=13580</id>
		<title>Archivematica 1.13.0 and Storage Service 0.18.0 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.13.0_and_Storage_Service_0.18.0_release_notes&amp;diff=13580"/>
		<updated>2021-05-28T06:22:28Z</updated>

		<summary type="html">&lt;p&gt;Sevein: Some more updates in preparation for v1.13.0-rc.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.13.0 and Storage Service 0.18.0&lt;br /&gt;
&lt;br /&gt;
'''Release date: ???'''&lt;br /&gt;
&lt;br /&gt;
== Environments ==&lt;br /&gt;
&lt;br /&gt;
Please see the [https://www.archivematica.org/en/docs/archivematica-1.13/admin-manual/installation-setup/installation/installation/#installation installation instructions].&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.13.0 and Storage Service 0.18.0 have been tested in the following environments:&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 18.04 64-bit Server Edition&lt;br /&gt;
* CentOS 7 64-bit&lt;br /&gt;
&lt;br /&gt;
Please note that we've dropped support for Ubuntu Linux 16.04 since it reached the end of its five-year LTS window on April 30th 2021. We're planning to add support for Ubuntu 20.04 in the short term.&lt;br /&gt;
&lt;br /&gt;
For development purposes, most of our developers prefer to use Docker containers. These and all above environments are linked from the installation instructions above.&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
=== Disableable virus scanning ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/869&lt;br /&gt;
&lt;br /&gt;
Virus scanning is now disableable from the processing configuration. &lt;br /&gt;
&lt;br /&gt;
=== Purge management command ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1239&lt;br /&gt;
&lt;br /&gt;
A new [https://www.archivematica.org/en/docs/archivematica-1.13/admin-manual/maintenance/maintenance/#management-commands management command] has been added to provide a mechanism to remove old processing data from the system filling up the application database and search indices.&lt;br /&gt;
&lt;br /&gt;
== Changed ==&lt;br /&gt;
&lt;br /&gt;
=== Python 3 ===&lt;br /&gt;
&lt;br /&gt;
* Issues: https://github.com/archivematica/Issues/issues?q=is%3Aopen+is%3Aissue+milestone%3A1.13.0+label%3A%22%3Asnake%3A%C2%B3+Python+3%22&lt;br /&gt;
&lt;br /&gt;
All Archivematica components are now running on Python 3.6.&lt;br /&gt;
&lt;br /&gt;
=== Archivematica Storage Service now uses MySQL by default ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/952&lt;br /&gt;
&lt;br /&gt;
MySQL is now the default database in Archivematica Storage Service. SQLite is still supported but we encourage users to migrate. We have documented the process: [https://www.archivematica.org/en/docs/storage-service-0.18/migration-sqlite-mysql/#migration-sqlite-mysql Migrating data from SQLite to MySQL].&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And more! Please see the 1.13 milestone in Github for all issues addressed in this release: https://github.com/archivematica/Issues/milestone/17&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Storage_Service_API&amp;diff=13579</id>
		<title>Storage Service API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Storage_Service_API&amp;diff=13579"/>
		<updated>2021-05-25T09:33:03Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Storage Service API&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 10px 10px; border: 1px solid black; background-color: #F79086;&amp;quot;&amp;gt;This page is no longer being maintained and may contain inaccurate information. Please see the [https://www.archivematica.org/en/docs/archivematica-1.13/dev-manual/ Archivematica documentation] for up-to-date information.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [[Storage Service]] API provides programmatic access to moving files around in storage areas that the Storage Service has access to.&lt;br /&gt;
&lt;br /&gt;
The API is written using [http://django-tastypie.readthedocs.io/en/latest/ TastyPie].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: TastyPie is less well supported than [http://www.django-rest-framework.org/ Django REST Framework], both in terms of docs &amp;amp; community. We should look at replacing TastyPie with DRF.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Endpoints require authentication with a username and API key.  This can be submitted as GET parameters (eg &amp;lt;code&amp;gt;?username=test&amp;amp;api_key=e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;) or as a header (eg &amp;lt;code&amp;gt;Authorization: ApiKey test:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== A note about browsing ==&lt;br /&gt;
&lt;br /&gt;
A detailed schema can be found for each of the resources by adding &amp;quot;schema&amp;quot; to the get all URL.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 $ curl -X GET -H&amp;quot;Authorization: ApiKey test:95141fc645ed97a95893f1f865d24687f89a27ad&amp;quot; 'http://localhost:8000/api/v2/location/schema/?format=json&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;allowed_detail_http_methods&amp;quot;: [&lt;br /&gt;
        &amp;quot;get&amp;quot;,&lt;br /&gt;
        &amp;quot;post&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;allowed_list_http_methods&amp;quot;: [&lt;br /&gt;
        &amp;quot;get&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;default_format&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
    &amp;quot;default_limit&amp;quot;: 20,&lt;br /&gt;
    &amp;quot;fields&amp;quot;: {&lt;br /&gt;
        &amp;quot;description&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unicode string data. Ex: \&amp;quot;Hello World\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: true,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;description&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;enabled&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: true,&lt;br /&gt;
            &amp;quot;default&amp;quot;: true,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;True if space can be accessed.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Enabled&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;path&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unicode string data. Ex: \&amp;quot;Hello World\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: true,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;path&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;pipeline&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Many related resources. Can be either a list of URIs or list of individually nested resource data.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;related_schema&amp;quot;: &amp;quot;/api/v2/pipeline/schema/&amp;quot;,&lt;br /&gt;
            &amp;quot;related_type&amp;quot;: &amp;quot;to_many&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;related&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;pipeline&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;purpose&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Purpose of the space.  Eg. AIP storage, Transfer source&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Purpose&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;quota&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: null,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Size, in bytes (optional)&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: true,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Quota&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relative_path&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Path to location, relative to the storage space's path.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Relative Path&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;resource_uri&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unicode string data. Ex: \&amp;quot;Hello World\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: true,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;resource uri&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;space&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;A single related resource. Can be either a URI or set of nested resource data.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;related_schema&amp;quot;: &amp;quot;/api/v2/space/schema/&amp;quot;,&lt;br /&gt;
            &amp;quot;related_type&amp;quot;: &amp;quot;to_one&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;related&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;space&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;used&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Amount used, in bytes.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Used&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;uuid&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: true,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unique identifier&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: true,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;uuid&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;filtering&amp;quot;: {&lt;br /&gt;
        &amp;quot;pipeline&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;purpose&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;quota&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;relative_path&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;space&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;used&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;uuid&amp;quot;: 1&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This schema, among other things, describes the fields in the resource (including the schema URI of related resource fields) and the fields that allow filtering. Valid filtering values are: Django ORM filters (e.g. startswith, exact, lte, etc.) or 1 or 2. If a filtering field is set to 2 it can be filtered over the related resource fields. For example, the locations could be filtered by their pipeline UUID setting it in a request parameter formatted with two underscore chars: &amp;lt;code&amp;gt;/api/v2/location/?pipeline__uuid=&amp;lt;uuid&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more info on how to interact with the API see:&lt;br /&gt;
&lt;br /&gt;
http://django-tastypie.readthedocs.io/en/v0.13.1/interacting.html&lt;br /&gt;
&lt;br /&gt;
== Pipeline ==&lt;br /&gt;
&lt;br /&gt;
=== Get all pipelines ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;: Description of the pipeline&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the pipeline&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;meta&amp;lt;/code&amp;gt;: Metadata on the response: number of hits, pagination information&lt;br /&gt;
** &amp;lt;code&amp;gt;objects&amp;lt;/code&amp;gt;: List of pipelines. See [[#Get pipeline details]] for format&lt;br /&gt;
&lt;br /&gt;
Returns information about all the pipelines in the system.  Can be [http://django-tastypie.readthedocs.io/en/latest/resources.html#basic-filtering filtered] by the description or uuid. Disabled pipelines are not returned.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 $ curl -X GET -H&amp;quot;Authorization: ApiKey test:95141fc645ed97a95893f1f865d24687f89a27ad&amp;quot; 'http://localhost:8000/api/v2/pipeline/?description__startswith=Archivematica' | python -m json.tool&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;meta&amp;quot;: {&lt;br /&gt;
         &amp;quot;limit&amp;quot;: 20,&lt;br /&gt;
         &amp;quot;next&amp;quot;: null,&lt;br /&gt;
         &amp;quot;offset&amp;quot;: 0,&lt;br /&gt;
         &amp;quot;previous&amp;quot;: null,&lt;br /&gt;
         &amp;quot;total_count&amp;quot;: 1&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;objects&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;description&amp;quot;: &amp;quot;Archivematica on alouette&amp;quot;,&lt;br /&gt;
             &amp;quot;remote_name&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
             &amp;quot;resource_uri&amp;quot;: &amp;quot;/api/v2/pipeline/dd354557-9e6e-4918-9fe3-a65b00ecb1af/&amp;quot;,&lt;br /&gt;
             &amp;quot;uuid&amp;quot;: &amp;quot;dd354557-9e6e-4918-9fe3-a65b00ecb1af&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Create new pipeline ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** Should contain fields for a new pipeline: &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;api_key&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;api_username&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;create_default_locations&amp;lt;/code&amp;gt;: If True, will associated default [[Storage Service#Locations | Locations]] with the newly created pipeline&lt;br /&gt;
** &amp;lt;code&amp;gt;shared_path&amp;lt;/code&amp;gt;: If default locations are created, create the [[Storage Service#Currently Processing | processing]] location at this path in the local filesystem&lt;br /&gt;
** &amp;lt;code&amp;gt;remote_name&amp;lt;/code&amp;gt;: URI of the pipeline.&lt;br /&gt;
*** Before v0.11.0: If &amp;lt;code&amp;gt;create_default_locations&amp;lt;/code&amp;gt; is set, SS will try to guess the value using the &amp;lt;code&amp;gt;REMOTE_ADDR&amp;lt;/code&amp;gt; header.&lt;br /&gt;
*** In v0.11.0 or newer: If not provided, SS will try to guess the value using the &amp;lt;code&amp;gt;REMOTE_ADDR&amp;lt;/code&amp;gt; header.&lt;br /&gt;
* '''Response''': JSON with data for the pipeline&lt;br /&gt;
&lt;br /&gt;
If the 'Pipelines disabled on creation' setting is set, the pipeline will be disabled by default, and will not respond to queries.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 $ curl -X POST \&lt;br /&gt;
    -H&amp;quot;Authorization: ApiKey test:95141fc645ed97a95893f1f865d24687f89a27ad&amp;quot; \&lt;br /&gt;
    -H&amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
    -d'{&amp;quot;uuid&amp;quot;: &amp;quot;99354557-9e6e-4918-9fe3-a65b00ecb199&amp;quot;, \&lt;br /&gt;
        &amp;quot;description&amp;quot;: &amp;quot;Test pipeline&amp;quot;, &amp;quot;create_default_locations&amp;quot;: true, \&lt;br /&gt;
        &amp;quot;api_username&amp;quot;: &amp;quot;demo&amp;quot;, \&lt;br /&gt;
        &amp;quot;api_key&amp;quot;: &amp;quot;03ecb307f5b8012f4771d245d534830378a87259&amp;quot;}' \&lt;br /&gt;
     'http://192.168.1.42:8000/api/v2/pipeline/'&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;create_default_locations&amp;quot;: true,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Test pipeline&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_name&amp;quot;: &amp;quot;192.168.1.42&amp;quot;,&lt;br /&gt;
    &amp;quot;resource_uri&amp;quot;: &amp;quot;/api/v2/pipeline/99354557-9e6e-4918-9fe3-a65b00ecb199/&amp;quot;,&lt;br /&gt;
    &amp;quot;uuid&amp;quot;: &amp;quot;99354557-9e6e-4918-9fe3-a65b00ecb199&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Get pipeline details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;: Pipeline description&lt;br /&gt;
** &amp;lt;code&amp;gt;remote_name&amp;lt;/code&amp;gt;: IP or hostname of the pipeline. For use in API calls&lt;br /&gt;
** &amp;lt;code&amp;gt;resource_uri&amp;lt;/code&amp;gt;: URI for this pipeline in the API&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the pipeline&lt;br /&gt;
&lt;br /&gt;
== Space ==&lt;br /&gt;
&lt;br /&gt;
=== Get all spaces ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/space/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;access_protocol&amp;lt;/code&amp;gt;: Protocol that the [[Storage Service#Space | Space]] uses. Must be searched based on the database code.&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Space's path&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Maximum size in bytes. Can use greater than (size__gt=1024), less than (size__lt=1024), and other Django [https://docs.djangoproject.com/en/1.8/ref/models/querysets/#field-lookups field lookups].&lt;br /&gt;
** &amp;lt;code&amp;gt;used&amp;lt;/code&amp;gt;: Bytes stored in this space. Can use greater than (size__gt=1024), less than (size__lt=1024), and other Django [https://docs.djangoproject.com/en/1.8/ref/models/querysets/#field-lookups field lookups].&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the Space&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;meta&amp;lt;/code&amp;gt;: Metadata on the response: number of hits, pagination information&lt;br /&gt;
** &amp;lt;code&amp;gt;objects&amp;lt;/code&amp;gt;: List of spaces. See [[#Get space details]] for format&lt;br /&gt;
&lt;br /&gt;
Returns information about all the spaces in the system.  Can be [http://django-tastypie.readthedocs.io/en/latest/resources.html#basic-filtering filtered] by several fields: access protocol, path, size, amount used, UUID and verified status. Disabled spaces are not returned.&lt;br /&gt;
&lt;br /&gt;
=== Get space details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/space/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;access_protocol&amp;lt;/code&amp;gt;: Database code for the access protocol&lt;br /&gt;
** &amp;lt;code&amp;gt;last_verified&amp;lt;/code&amp;gt;: Date of last verification. This is a stub feature&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Space's path&lt;br /&gt;
** &amp;lt;code&amp;gt;resource_uri&amp;lt;/code&amp;gt;: URI to the resource in the API&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Maximum size of the space in bytes.&lt;br /&gt;
** &amp;lt;code&amp;gt;used&amp;lt;/code&amp;gt;: Bytes stored in this space. &lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the space&lt;br /&gt;
** &amp;lt;code&amp;gt;verified&amp;lt;/code&amp;gt;: If the space is verified. This is a stub feature&lt;br /&gt;
** Other space-specific fields&lt;br /&gt;
&lt;br /&gt;
=== Browse space path ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/space/&amp;lt;UUID&amp;gt;/browse/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path inside the Space to look&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;entries&amp;lt;/code&amp;gt;: List of entries at path, files or directories&lt;br /&gt;
** &amp;lt;code&amp;gt;directories&amp;lt;/code&amp;gt;: List of directories in path. Subset of `entries`.&lt;br /&gt;
&lt;br /&gt;
=== Create space ===&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/archivematica/Issues/issues/36 Issue 36].&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/space&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** Should contain fields for a new space: See the [https://www.archivematica.org/en/docs/storage-service-0.11/administrators/#id2 Storage Service Documentation] or [https://wiki.archivematica.org/Storage_Service#Space Space] for fields relevant to each type of space. Basic fields for a local file system space are listed below. &lt;br /&gt;
** &amp;lt;code&amp;gt;access_protocol&amp;lt;/code&amp;gt;: this defines the type of space&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Absolute path to the Space on the local filesystem&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;:  (Optional) Maximum size allowed for this space. Set to 0 or leave blank for unlimited.&lt;br /&gt;
&lt;br /&gt;
Example (to create an S3 space):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl \&lt;br /&gt;
    -X POST \&lt;br /&gt;
    -d @payload.json \&lt;br /&gt;
    -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
    -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
        http://127.0.0.1:62081/api/v2/space/&lt;br /&gt;
&lt;br /&gt;
Where payload.json contains&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;access_protocol&amp;quot;: &amp;quot;S3&amp;quot;,&lt;br /&gt;
    &amp;quot;path&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;staging_path&amp;quot;: &amp;quot;/&amp;quot;,&lt;br /&gt;
    &amp;quot;endpoint_url&amp;quot;: &amp;quot;http://127.0.0.1:12345&amp;quot;,&lt;br /&gt;
    &amp;quot;access_key_id&amp;quot;: &amp;quot;_Cah4cae1_&amp;quot;,&lt;br /&gt;
    &amp;quot;secret_access_key&amp;quot;: &amp;quot;_Thu6Ahqu_&amp;quot;,&lt;br /&gt;
    &amp;quot;region&amp;quot;: &amp;quot;us-west-2&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Version 1: Returns paths as strings&lt;br /&gt;
Version 2: Returns all paths base64 encoded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
&lt;br /&gt;
=== Get all locations ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Create new location ===&lt;br /&gt;
&lt;br /&gt;
Added in v0.12 - see [https://github.com/artefactual/archivematica-storage-service/issues/367 issue 367] and [https://github.com/archivematica/Issues/issues/37 issue 37].&lt;br /&gt;
&lt;br /&gt;
This endpoint creates a location in the storage service, but it doesn't actually create the directory that the location points to.  &lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: URI of the pipeline.&lt;br /&gt;
** &amp;lt;code&amp;gt;space&amp;lt;/code&amp;gt;: URI of the space.&lt;br /&gt;
** &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;: If 'true' this location will be the default for it's purpose. &lt;br /&gt;
** &amp;lt;code&amp;gt;purpose&amp;lt;/code&amp;gt;: (below is a list of possible values)&lt;br /&gt;
*** &amp;lt;code&amp;gt;AR&amp;lt;/code&amp;gt; (AIP_RECOVERY)&lt;br /&gt;
*** &amp;lt;code&amp;gt;AS&amp;lt;/code&amp;gt; (AIP_STORAGE)&lt;br /&gt;
*** &amp;lt;code&amp;gt;CP&amp;lt;/code&amp;gt; (CURRENTLY_PROCESSING)&lt;br /&gt;
*** &amp;lt;code&amp;gt;DS&amp;lt;/code&amp;gt; (DIP_STORAGE)&lt;br /&gt;
*** &amp;lt;code&amp;gt;SD&amp;lt;/code&amp;gt; (SWORD_DEPOSIT)&lt;br /&gt;
*** &amp;lt;code&amp;gt;SS&amp;lt;/code&amp;gt; (STORAGE_SERVICE_INTERNAL)&lt;br /&gt;
*** &amp;lt;code&amp;gt;BL&amp;lt;/code&amp;gt; (BACKLOG)&lt;br /&gt;
*** &amp;lt;code&amp;gt;TS&amp;lt;/code&amp;gt; (TRANSFER_SOURCE)&lt;br /&gt;
*** &amp;lt;code&amp;gt;RP&amp;lt;/code&amp;gt; (REPLICATOR)&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative to the space's path.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -s -d '{&lt;br /&gt;
    &amp;quot;pipeline&amp;quot;: [&amp;quot;/api/v2/pipeline/90707555-244f-47af-8271-66496a6a965b/&amp;quot;],&lt;br /&gt;
    &amp;quot;purpose&amp;quot;: &amp;quot;TS&amp;quot;,&lt;br /&gt;
    &amp;quot;relative_path&amp;quot;: &amp;quot;foo/bar&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;foobar&amp;quot;,&lt;br /&gt;
    &amp;quot;space&amp;quot;: &amp;quot;/api/v2/space/141593ff-2a27-44a1-9de1-917573fa0f4a/&amp;quot;&lt;br /&gt;
}' \&lt;br /&gt;
    -X POST \&lt;br /&gt;
    -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
    -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
        &amp;quot;http://127.0.0.1:62081/api/v2/location/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Get location details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Move files to this location ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_location&amp;lt;/code&amp;gt;: URI of the Location the files should be moved from&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: URI of the [[Storage Service#Pipeline | pipeline]]. Both Locations must be associated with this pipeline.&lt;br /&gt;
** &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;: List of dicts containing &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;destination&amp;lt;/code&amp;gt;.  The source and destination are paths relative to their Location of the files to be moved.&lt;br /&gt;
&lt;br /&gt;
Intended for use with creating Transfers, SIPs, etc and other cases where files need to be moved but not tracked by the storage service.&lt;br /&gt;
&lt;br /&gt;
=== Browse location path ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/browse/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path inside the Location to look&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;entries&amp;lt;/code&amp;gt;: List of entries in `path`, files or directories&lt;br /&gt;
** &amp;lt;code&amp;gt;directories&amp;lt;/code&amp;gt;: List of directories in `path`. Subset of `entries`.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Version 1: Returns paths as strings&lt;br /&gt;
Version 2: Returns all paths base64 encoded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SWORD collection ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/sword/collection/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
&lt;br /&gt;
See [[Sword API]] for details&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Package ==&lt;br /&gt;
&lt;br /&gt;
=== Get all packages ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Create new package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON. Fields for a new package:&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the new package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_location&amp;lt;/code&amp;gt;: URI of the Location where the package is currently&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_path&amp;lt;/code&amp;gt;: Path to the package, relative to the origin_location&lt;br /&gt;
** &amp;lt;code&amp;gt;current_location&amp;lt;/code&amp;gt;: URI of the Location where the package should be stored&lt;br /&gt;
** &amp;lt;code&amp;gt;current_path&amp;lt;/code&amp;gt;: Path where the package should be stored, relative to the current_location&lt;br /&gt;
** &amp;lt;code&amp;gt;package_type&amp;lt;/code&amp;gt;: Type of package this is. One of: &amp;lt;code&amp;gt;AIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AIC&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transfer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;deposit&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Size of the package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_pipeline&amp;lt;/code&amp;gt;: URI of the pipeline the package is from&lt;br /&gt;
** &amp;lt;code&amp;gt;related_package_uuid&amp;lt;/code&amp;gt;: UUID of a package that is related to this one. E.g. UUID of a DIP when storing an AIP&lt;br /&gt;
&lt;br /&gt;
Creates a database entry tracking the package (AIP, transfer, etc).  If the package is an AIP, DIP or AIC and the current_location is an AIP or DIP storage location it also moves the files from the source to destination location.  If the package is a Transfer and the current_location is transfer backlog, it is also moved.&lt;br /&gt;
&lt;br /&gt;
This is handled through the modified &amp;lt;code&amp;gt;obj_create&amp;lt;/code&amp;gt; function, which calls &amp;lt;code&amp;gt;Package.store_aip&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Package.backlog_transfer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Get package details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Update package contents ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': PUT&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest&amp;lt;/code&amp;gt;: Flag to mark that this is reingest. Reduces chance to accidentally modify an AIP.&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the existing package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_location&amp;lt;/code&amp;gt;: URI of the Location where the package is currently&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_path&amp;lt;/code&amp;gt;: Path to the package, relative to the origin_location&lt;br /&gt;
** &amp;lt;code&amp;gt;current_location&amp;lt;/code&amp;gt;: URI of the Location where the package should be stored&lt;br /&gt;
** &amp;lt;code&amp;gt;current_path&amp;lt;/code&amp;gt;: Path where the package should be stored, relative to the current_location&lt;br /&gt;
** &amp;lt;code&amp;gt;package_type&amp;lt;/code&amp;gt;: Type of package this is. One of: &amp;lt;code&amp;gt;AIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AIC&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Size of the package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_pipeline&amp;lt;/code&amp;gt;: URI of the pipeline the package is from.  This must be the same pipeline reingest was started on (tracked through &amp;lt;code&amp;gt;Package.misc_attributes.reingest_pipeline&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Updates the contents of a package during reingest.  If the package is an AIP or AIC, currently stored in an AIP storage location, and the 'reingest' parameter is set, it will call &amp;lt;code&amp;gt;Package.finish_reingest&amp;lt;/code&amp;gt; and merge the new AIP with the existing one.&lt;br /&gt;
&lt;br /&gt;
This is implemented using a modified &amp;lt;code&amp;gt;obj_update&amp;lt;/code&amp;gt; which calls &amp;lt;code&amp;gt;obj_update_hook&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Update package metadata ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': PATCH&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest&amp;lt;/code&amp;gt;: Pipeline UUID or None.&lt;br /&gt;
&lt;br /&gt;
Used to update metadata stored in the database for the package.  Currently, this is used to update the reingest status.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: Currently, this always sets Package.misc_attributes.reingest to None, regardless of what value was actually passed in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is implemented using a modified &amp;lt;code&amp;gt;obj_update&amp;lt;/code&amp;gt; which calls &amp;lt;code&amp;gt;obj_update_hook&amp;lt;/code&amp;gt;.  &amp;lt;code&amp;gt;update_in_place&amp;lt;/code&amp;gt; also helps.&lt;br /&gt;
&lt;br /&gt;
=== Delete package request ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/delete_aip/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;event_reason&amp;lt;/code&amp;gt;: Reason for deleting the AIP&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: UUID of the pipeline the delete request is from&lt;br /&gt;
** &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt;: User ID requesting the deletion. This is the ID of the user on the pipeline, and must be an integer greater than 0.&lt;br /&gt;
** &amp;lt;code&amp;gt;user_email&amp;lt;/code&amp;gt;:  Email of the user requesting the deletion.&lt;br /&gt;
&lt;br /&gt;
=== Recover AIP request ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/recover_aip/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;event_reason&amp;lt;/code&amp;gt;: Reason for recovering the AIP&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: URI of the pipeline the recovery request is from&lt;br /&gt;
** &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt;: User ID requesting the recovery. This is the ID of the user on the pipeline, and must be an integer greater than 0.&lt;br /&gt;
** &amp;lt;code&amp;gt;user_email&amp;lt;/code&amp;gt;:  Email of the user requesting the recovery.&lt;br /&gt;
&lt;br /&gt;
=== Download single file ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/extract_file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, HEAD&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path_to_file&amp;lt;/code&amp;gt;: Path to the file to download, relative to the location where is stored down to the lowest level.&amp;lt;br /&amp;gt;E.g.: &amp;lt;code&amp;gt;test01-36d4efb7-83ba-46bf-a171-8c7b965d9dcb/data/objects/MARBLES.TGA&amp;lt;/code&amp;gt;, where &amp;lt;code&amp;gt;test01-36d4efb7-83ba-46bf-a171-8c7b965d9dcb&amp;lt;/code&amp;gt; contains both the UUID of the package and the name of the transfer which you can find using [[#Get package details | Get package details]] (see &amp;lt;code&amp;gt;current_path&amp;lt;/code&amp;gt; attribute).&lt;br /&gt;
* '''Response''': Stream of the requested file&lt;br /&gt;
&lt;br /&gt;
Returns a single file from the Package.  If the package is compressed, it downloads the whole AIP and extracts it.&lt;br /&gt;
&lt;br /&gt;
This responds to HEAD because AtoM uses HEAD to check for the existence of a file. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: HEAD and GET should not perform the same functions. HEAD should be updated to not return the file, and to only check for existence.  Currently, the storage service has no way to check if a file exists except by downloading and extracting this AIP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the package is in [[Storage Service#Arkivum | Arkivum]], the package may not actually be available.  This endpoint checks if the package is locally available. If it is, it is returned as normal. If not, it returns &amp;lt;code&amp;gt;202&amp;lt;/code&amp;gt; and emails the administrator about the attempted access.&lt;br /&gt;
&lt;br /&gt;
=== Download package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/download/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/download/&amp;lt;chunk number&amp;gt;/&amp;lt;/code&amp;gt; (for [[Storage Service#LOCKSS-o-matic | LOCKSS]] harvesting)&lt;br /&gt;
* '''Verb''': GET, HEAD&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': Stream of the package&lt;br /&gt;
&lt;br /&gt;
Returns the entire package as a single file.  If the AIP is uncompressed, create one file by using `tar`.&lt;br /&gt;
&lt;br /&gt;
If the download URL has a chunk number, it will attempt to serve the LOCKSS chunk specified for that package. If the package is not in LOCKSS, it will return the the whole package.&lt;br /&gt;
&lt;br /&gt;
This responds to HEAD because AtoM uses HEAD to check for the existence of a file. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: HEAD and GET should not perform the same functions. HEAD should be updated to not return the file, and to only check for existence.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the package is in [[Storage Service#Arkivum | Arkivum]], the package may not actually be available.  This endpoint checks if the package is locally available. If it is, it is returned as normal. If not, it returns &amp;lt;code&amp;gt;202&amp;lt;/code&amp;gt; and emails the administrator about the attempted access.&lt;br /&gt;
&lt;br /&gt;
=== Get pointer file ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/pointer_file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': Stream of the pointer file.&lt;br /&gt;
&lt;br /&gt;
=== Check fixity ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/check_fixity/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;force_local&amp;lt;/code&amp;gt;: If true, download and run fixity on the AIP locally, instead of using the Space-provided fixity if available.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True if the verification succeeded, False if the verification failed, None if the scan could not start&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: Human-readable string explaining the report; it will be empty for successful scans.&lt;br /&gt;
** &amp;lt;code&amp;gt;failures&amp;lt;/code&amp;gt;: List of 0 or more errors&lt;br /&gt;
** &amp;lt;code&amp;gt;timestamp&amp;lt;/code&amp;gt;: ISO-formated string with the datetime of the last fixity check. If the check was performed by an external system, this will be provided by that system. If not provided,or on error, it will be None.&lt;br /&gt;
&lt;br /&gt;
=== AIP storage callback request ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/send_callback/post_store/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
Request to call any Callbacks configured to run post-storage for this AIP.&lt;br /&gt;
&lt;br /&gt;
In SS0.15 and above, this endpoint has been extended to support callbacks for AIP, AIC and DIP stored events.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Event''': Post-store AIP, AIC, or DIP  &lt;br /&gt;
* '''URI''': &amp;lt;code&amp;gt;https://scope.com/api/v1/dip/&amp;lt;package_uuid&amp;gt;/stored&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Method''': POST  &lt;br /&gt;
* '''Headers''':  &lt;br /&gt;
* - Authorization -&amp;gt; &amp;lt;code&amp;gt;Token &amp;lt;token&amp;gt;&amp;lt;/code&amp;gt;  &lt;br /&gt;
* - Origin -&amp;gt; &amp;lt;code&amp;gt;https://ss.com&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Expected Status''': 202  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: This only works on locally available AIPs (AIPs stored in Spaces that are available via a UNIX filesystem layer).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Get file information for package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/contents/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True&lt;br /&gt;
** &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;: UUID of the package&lt;br /&gt;
** &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;: List of dictionaries with file information. Each dictionary has:&lt;br /&gt;
*** &amp;lt;code&amp;gt;source_id&amp;lt;/code&amp;gt;: UUID of the file to index&lt;br /&gt;
*** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
*** &amp;lt;code&amp;gt;source_package&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
*** &amp;lt;code&amp;gt;checksum&amp;lt;/code&amp;gt;: Checksum of the file, or an empty string&lt;br /&gt;
*** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number, or an empty string&lt;br /&gt;
*** &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;: UUID of the Archivematica dashboard this is from&lt;br /&gt;
&lt;br /&gt;
Returns metadata about every file within the package.&lt;br /&gt;
&lt;br /&gt;
=== Update file information for package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/contents/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': PUT&lt;br /&gt;
* '''Parameters''': JSON list of dictionaries with information on the files to be added. Each dict must have the following attributes:&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
** &amp;lt;code&amp;gt;fileuuid&amp;lt;/code&amp;gt;: UUID of the file to index&lt;br /&gt;
** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number, or an empty string&lt;br /&gt;
** &amp;lt;code&amp;gt;sipuuid&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
** &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;: UUID of the Archivematica dashboard this is from&lt;br /&gt;
&lt;br /&gt;
Adds a set of files to a package.&lt;br /&gt;
&lt;br /&gt;
=== Delete file information for package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/contents/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
&lt;br /&gt;
Removes all file records associated with this package.&lt;br /&gt;
&lt;br /&gt;
=== Query file information on packages ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/metadata/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
* '''Parameters''': Query string parameters.  Must have at least one, but not all are required&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
** &amp;lt;code&amp;gt;fileuuid&amp;lt;/code&amp;gt;: UUID of the file&lt;br /&gt;
** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number&lt;br /&gt;
** &amp;lt;code&amp;gt;sipuuid&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
* '''Response''': JSON. List of dicts with file information about the files that match the query.&lt;br /&gt;
** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number, or an empty string&lt;br /&gt;
** &amp;lt;code&amp;gt;file_extension&amp;lt;/code&amp;gt;: File extension&lt;br /&gt;
** &amp;lt;code&amp;gt;filename&amp;lt;/code&amp;gt;: Name of the file, sans path.&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
** &amp;lt;code&amp;gt;fileuuid&amp;lt;/code&amp;gt;: UUID of the file to index&lt;br /&gt;
** &amp;lt;code&amp;gt;sipuuid&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
** &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;: UUID of the Archivematica dashboard this is from&lt;br /&gt;
&lt;br /&gt;
=== Reingest AIP ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/reingest/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: UUID of the pipeline to reingest on&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_type&amp;lt;/code&amp;gt;: Type of reingest to start. One of &amp;lt;code&amp;gt;METADATA_ONLY&amp;lt;/code&amp;gt; (metadata-only reingest), &amp;lt;code&amp;gt;OBJECTS&amp;lt;/code&amp;gt; (partial reingest), &amp;lt;code&amp;gt;FULL&amp;lt;/code&amp;gt; (full reingest)&lt;br /&gt;
** &amp;lt;code&amp;gt;processing_config&amp;lt;/code&amp;gt;: Optional. Name of the processing configuration to use on full reingest&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Move Package ===&lt;br /&gt;
&lt;br /&gt;
This endpoint is introduced in v0.14.&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/move/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;location_uuid&amp;lt;/code&amp;gt;: UUID of the location to send the package. The location must have the same Purpose as the package's current location (e.g. AIP Storage, DIP Storage).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 $ curl -d 'location_uuid=7c5c48d4-50db-4018-b4b1-7ed29d1ef9d3	' -H&amp;quot;Authorization: ApiKey test:4525fd5272275caeac04a28447698c51&amp;quot; 'http://mysite.archivematica.org:8000/api/v2/file/8b8aa1a2-79c9-490e-b630-28f90bb7e654/move/'&lt;br /&gt;
&lt;br /&gt;
=== SWORD endpoints ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/sword/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/sword/media/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/sword/state/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[Sword API]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13578</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13578"/>
		<updated>2021-05-25T09:32:58Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Archivematica API&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 10px 10px; border: 1px solid black; background-color: #F79086;&amp;quot;&amp;gt;This page is no longer being maintained and may contain inaccurate information. Please see the [https://www.archivematica.org/en/docs/archivematica-1.13/dev-manual/ Archivematica documentation] for up-to-date information.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Endpoints require authentication with a username and API key.  This can be submitted as GET parameters (eg &amp;lt;code&amp;gt;?username=demo&amp;amp;api_key=e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;) or as a header (eg &amp;lt;code&amp;gt;Authorization: ApiKey demo:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;br \&amp;gt;&amp;lt;br \&amp;gt;&lt;br /&gt;
''As GET parameters, format is:''&amp;lt;br \&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;?username=&amp;lt;''username''&amp;gt;&amp;amp;api_key=&amp;lt;''api_key''&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br \&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''As a header, format is:''&amp;lt;br \&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;ApiKey &amp;lt;username&amp;gt;:&amp;lt;api_key&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br \&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The 'ApiKey' prefix is a requirement of the Tastypie library in use. See the Tastypie docs for [https://django-tastypie.readthedocs.io/en/latest/authentication.html#apikeyauthentication ApiKeyAuthentication].''&amp;lt;br \&amp;gt;&amp;lt;br \&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Endpoints return JSON.  If there's an error, they will return a 4xx or 5xx HTTP error code and a JSON body &amp;lt;code&amp;gt;{'error': True, 'message': 'message describing error'}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Transfer ==&lt;br /&gt;
&lt;br /&gt;
=== Start Transfer ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/start_transfer/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a transfer.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of new transfer&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Type of the new transfer. One of: standard, unzipped bag, zipped bag, dspace&lt;br /&gt;
** &amp;lt;code&amp;gt;accession&amp;lt;/code&amp;gt;: Accession number of new transfer&lt;br /&gt;
** &amp;lt;code&amp;gt;paths[]&amp;lt;/code&amp;gt;: List of base64-encoded &amp;quot;&amp;lt;location_uuid&amp;gt;:&amp;lt;relative_path&amp;gt;&amp;quot; to be copied into the new transfer. Location UUIDs should be associated with this pipeline, and relative path should be relative to the location (TODO confirm relative vs absolute path).  E.g. NWJiYWJjMTMtMTIyNy00MWE3LWIwY2QtZjJhYzM1MjkxZTdmOi92YWdyYW50L3NhbXBsZWRhdGEvQ1NWbWV0YWRhdGE= (decoded: 5bbabc13-1227-41a7-b0cd-f2ac35291e7f:/vagrant/sampledata/CSVmetadata)&lt;br /&gt;
** &amp;lt;code&amp;gt;row_ids[]&amp;lt;/code&amp;gt;: ID of the associated TransferMetadataSet for disk image ingest.  Can be provided as [&amp;quot;&amp;quot;]&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Copy successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path the transfer was copied to on start?&lt;br /&gt;
&lt;br /&gt;
=== List Unapproved Transfers ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/unapproved&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns a list of transfers waiting for approval.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched unapproved transfers successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of dicts with keys:&lt;br /&gt;
*** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Transfer type. One of: standard, unzipped bag, zipped bag, dspace&lt;br /&gt;
*** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Directory the transfer is in currently&lt;br /&gt;
*** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the transfer&lt;br /&gt;
&lt;br /&gt;
=== Approve Transfer ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/approve&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Approve a transfer waiting to be started.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Type of the transfer to approved. One of: standard, unzipped bag, zipped bag, dspace.&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory for the transfer to approve&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the approved transfer&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/status/&amp;lt;transfer UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns the status of the transfer.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the transfer, e.g. &amp;quot;imgs&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: If status is COMPLETE, this field will exist with either the UUID of the SIP or 'BACKLOG'&lt;br /&gt;
** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory, e.g. &amp;quot;imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Full path to the transfer, e.g. &amp;quot;/var/archivematica/sharedDirectory/watchedDirectories/SIPCreation/completedTransfers/imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c/&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched status for &amp;lt;transfer UUID&amp;gt; successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: &amp;quot;transfer&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the transfer, e.g. &amp;quot;52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
'''Note:''' for consumers of this endpoint, it is possible for Archivematica to return a &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;COMPLETE&amp;lt;/code&amp;gt; without a &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;. Consumers looking to use the UUID of the AIP that will be created following Ingest should therefore test for both a &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;COMPLETE&amp;lt;/code&amp;gt; and the existence of &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt; that does not also equal &amp;lt;code&amp;gt;BACKLOG&amp;lt;/code&amp;gt; to ensure that they retrieve it. This might mean an additional call to the status endpoint while this data becomes available.&lt;br /&gt;
&lt;br /&gt;
=== Hide ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/&amp;lt;transfer UUID&amp;gt;/delete/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
* Hide a transfer&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;removed&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/completed/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return list of Transfers that are completed&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched completed transfers successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of UUIDs of completed Transfers&lt;br /&gt;
* Added in Archivematica 1.6&lt;br /&gt;
&lt;br /&gt;
=== Start Reingest ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/reingest&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a full reingest.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the AIP. The AIP should also be found at &amp;lt;code&amp;gt;%sharedDirectory%/tmp/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the AIP to reingest&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_uuid&amp;lt;/code&amp;gt;: UUID of the reingested transfer&lt;br /&gt;
&lt;br /&gt;
== Ingest ==&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/ingest/status/&amp;lt;unit UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns the status of the SIP&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the SIP, e.g. &amp;quot;imgs&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory, e.g. &amp;quot;imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Full path to the transfer, e.g. &amp;quot;/var/archivematica/sharedDirectory/currentlyProcessing/imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c/&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched status for &amp;lt;SIP UUID&amp;gt; successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: &amp;quot;SIP&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the SIP, e.g. &amp;quot;52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Hide ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/&amp;lt;SIP UUID&amp;gt;/delete/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
* Hide a SIP&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;removed&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== List SIPS Waiting for User Input ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/waiting&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns a list of SIPs waiting for user input.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched units successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of dicts with keys:&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_directory&amp;lt;/code&amp;gt;: Directory the SIP is in currently&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: UUID of the SIP&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_name&amp;lt;/code&amp;gt;: Name of the SIP&lt;br /&gt;
*** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: Despite the URL, this currently returns both SIPs &amp;amp; transfers that are waiting for user input. A separate &amp;lt;code&amp;gt;/api/transfer/waiting&amp;lt;/code&amp;gt; should be added for transfers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/completed/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return list of SIPs that are completed&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched completed ingests successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of UUIDs of completed SIPs&lt;br /&gt;
* Added in Archivematica 1.6&lt;br /&gt;
&lt;br /&gt;
=== Reingest ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/reingest&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a partial or metadata-only reingest.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the AIP. The AIP should also be found at &amp;lt;code&amp;gt;%sharedDirectory%/tmp/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the AIP to reingest&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_uuid&amp;lt;/code&amp;gt;: UUID of the reingested SIP&lt;br /&gt;
&lt;br /&gt;
=== Copy Metadata ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/copy_metadata_files/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Add metadata files to a SIP.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: UUID of the SIP to put files in&lt;br /&gt;
** &amp;lt;code&amp;gt;source_paths[]&amp;lt;/code&amp;gt;: List of files to be copied, base64 encoded, in the format 'source_location_uuid:full_path'&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt;: False&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Files added successfully.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Levels of Description ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/administration/dips/atom/levels/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Return a JSON-encoded set of the configured levels of description.&lt;br /&gt;
* ''Response'': JSON. List of AtoM Levels of description with key 'UUID' and value 'name of level of description'.&lt;br /&gt;
&lt;br /&gt;
=== Fetch Levels of Description ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/administration/dips/atom/fetch_levels/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Fetch all levels of description from an AtoM database, replacing any previously existing.&lt;br /&gt;
* '''Response''': JSON. Updated list of AtoM Levels of description with key 'UUID' and value 'name of level of description'.&lt;br /&gt;
&lt;br /&gt;
== Unit ==&lt;br /&gt;
&lt;br /&gt;
''Note: Currently, you can only query strings in English.''&lt;br /&gt;
&lt;br /&gt;
=== List jobs ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2beta/jobs/&amp;lt;unit UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return a list of jobs for the passed unit (transfer or ingest).&lt;br /&gt;
* '''Parameters''':&lt;br /&gt;
* '''Optional filters''':&lt;br /&gt;
*** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the microservice the jobs belong to&lt;br /&gt;
*** &amp;lt;code&amp;gt;link_uuid&amp;lt;/code&amp;gt;: UUID of the job chain link&lt;br /&gt;
*** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the job&lt;br /&gt;
* '''Response''': JSON body&lt;br /&gt;
** '''List of dicts with keys''':&lt;br /&gt;
*** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the job&lt;br /&gt;
*** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the job&lt;br /&gt;
*** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of USER_INPUT, PROCESSING, COMPLETE, FAILED or UNKNOWN&lt;br /&gt;
*** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Microservice the job belongs to&lt;br /&gt;
*** &amp;lt;code&amp;gt;link_uuid&amp;lt;/code&amp;gt;: UUID of the job chain link&lt;br /&gt;
*** &amp;lt;code&amp;gt;tasks&amp;lt;/code&amp;gt;: List of dicts with information about the microservice's tasks:&lt;br /&gt;
*** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the task&lt;br /&gt;
*** &amp;lt;code&amp;gt;exit_code&amp;lt;/code&amp;gt;: Exit code of the task&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2beta/task/&amp;lt;task UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return information about a task.&lt;br /&gt;
* '''Response''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the task&lt;br /&gt;
** &amp;lt;code&amp;gt;exit_code&amp;lt;/code&amp;gt;: Exit code of the task&lt;br /&gt;
** &amp;lt;code&amp;gt;file_uuid&amp;lt;/code&amp;gt;: UUID of the file used for the task&lt;br /&gt;
** &amp;lt;code&amp;gt;file_name&amp;lt;/code&amp;gt;: File used for the task,&lt;br /&gt;
** &amp;lt;code&amp;lt;time_created&amp;lt;/code&amp;gt;: String (YYYY-MM-DD HH:MM:SS) representing when the task was created&lt;br /&gt;
** &amp;lt;code&amp;gt;time_started&amp;lt;/code&amp;gt;: String (YYYY-MM-DD HH:MM:SS) representing when the task started&lt;br /&gt;
** &amp;lt;code&amp;gt;time_ended&amp;lt;/code&amp;gt;: String (YYYY-MM-DD HH:MM:SS) representing when the task finished&lt;br /&gt;
** &amp;lt;code&amp;gt;duration&amp;lt;/code&amp;gt;: Task duration in seconds (integer). If the duration is less than a second, this will be a &amp;lt; 1 string&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
=== Path Metadata ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/filesystem/metadata/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
* Fetch (GET) or update (POST) metadata for a path (currently only level of description).&lt;br /&gt;
* '''Parameters''': Query string parameters (GET) or JSON body (POST)&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Arranged path to get metadata on&lt;br /&gt;
* '''GET response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;level_of_description&amp;lt;/code&amp;gt;: Level of description&lt;br /&gt;
* '''POST response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== Processing Configuration ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/processing-configuration/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Return processing configuration with &amp;lt;name&amp;gt;&lt;br /&gt;
* '''Response''': The processing config file as a stream.&lt;br /&gt;
* '''Content type''': text/xml&lt;br /&gt;
&lt;br /&gt;
== Beta endpoints ==&lt;br /&gt;
&lt;br /&gt;
API endpoints which are still in-flux and that could potentially change. &lt;br /&gt;
&lt;br /&gt;
=== Package ===&lt;br /&gt;
&lt;br /&gt;
Provides additional functionality over the start and approve transfer endpoints, for example, wrapping both those steps into a single call.&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2beta/package&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a new transfer type.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** Mandatory&lt;br /&gt;
*** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Transfer name&lt;br /&gt;
*** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path relative, or absolute to a storage service transfer source&lt;br /&gt;
**Optional&lt;br /&gt;
*** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Transfer type, e.g. standard, dataverse, zipped bag, default: &amp;lt;code&amp;gt;standard&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;processing_config&amp;lt;/code&amp;gt;: [https://www.archivematica.org/en/docs/latest/user-manual/administer/dashboard-admin/#processing-configuration Processing configuration], e.g. default, automated,  default: &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;accession&amp;lt;/code&amp;gt;: Accession ID&lt;br /&gt;
*** &amp;lt;code&amp;gt;access_system_id&amp;lt;/code&amp;gt;: Access system ID (see [https://www.archivematica.org/en/docs/latest/user-manual/access/access docs])&lt;br /&gt;
*** &amp;lt;code&amp;gt;metadata_set_id&amp;lt;/code&amp;gt;: Used to link to metadata sets added via the user interface. It's safe to ignore this for now since metadata can't be associated to transfer via the API at the moment.&lt;br /&gt;
*** &amp;lt;code&amp;gt;auto_approve&amp;lt;/code&amp;gt;: Boolean &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; to set the transfer to auto-approve, default: &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;: Transfer UUID ('''Note:''' as the package endpoint allows the caller to interact with Archivematica asynchronously it doesn't guarantee a transfer has started. The caller must use the UUID in the response to verify it has begun or any errors that were encountered initiating one.)&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Only a subset of these options might be needed for most use-cases. A fundamental difference between the &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt; endpoint and others from which a transfer can be initiated is that a storage service transfer location UUID isnt always required. In some cases that might still be ideal.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
''Starting a transfer using an absolute path:''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   curl -v POST \&lt;br /&gt;
     -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
     -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
     -d &amp;quot;{\&lt;br /&gt;
         \&amp;quot;path\&amp;quot;: \&amp;quot;$(echo -n '/home/archivematica/archivematica-sampledata/SampleTransfers/DemoTransferCSV' | base64 -w 0)\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;name\&amp;quot;: \&amp;quot;demo_transfer_absolute\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;processing_config\&amp;quot;: \&amp;quot;automated\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;type\&amp;quot;: \&amp;quot;standard\&amp;quot; \&lt;br /&gt;
         }&amp;quot; \&lt;br /&gt;
    &amp;quot;http://&amp;lt;archivematica-uri&amp;gt;/api/v2beta/package&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
''Starting a transfer using an relative path with a transfer source UUID:''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   curl -v POST \&lt;br /&gt;
     -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
     -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
     -d &amp;quot;{\&lt;br /&gt;
         \&amp;quot;path\&amp;quot;: \&amp;quot;$(echo -n 'd1184f7f-d755-4c8d-831a-a3793b88f760:/archivematica/archivematica-sampledata/SampleTransfers/DemoTransferCSV' | base64 -w 0)\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;name\&amp;quot;: \&amp;quot;demo_transfer_relative\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;processing_config\&amp;quot;: \&amp;quot;automated\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;type\&amp;quot;: \&amp;quot;standard\&amp;quot; \&lt;br /&gt;
         }&amp;quot; \&lt;br /&gt;
    &amp;quot;http://&amp;lt;archivematica-uri&amp;gt;/api/v2beta/package&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Validate ===&lt;br /&gt;
&lt;br /&gt;
Available in Archivematica 1.10+. This endpoint can be used to validate CSVs against embedded sets of rules. Currently works with Avalon Media System Manifest files.&lt;br /&gt;
&lt;br /&gt;
In the future, this endpoint can be extended to support validation for &amp;lt;code&amp;gt;metadata.csv&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;rights.csv&amp;lt;/code&amp;gt;, or other institutionally-based rules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2beta/validate/avalon&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Content-Type''': text/csv; charset=utf-8&lt;br /&gt;
* '''Parameters''': &amp;lt;code&amp;gt;&amp;lt;document&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage example: (assuming that &amp;lt;code&amp;gt;avalon.csv&amp;lt;/code&amp;gt; exists)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl http://127.0.0.1:62080/api/v2beta/validate/avalon \&lt;br /&gt;
  --data-binary &amp;quot;@avalon.csv&amp;quot; \&lt;br /&gt;
  --header &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
  --header &amp;quot;Content-Type: text/csv; charset=utf-8&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Response examples:&lt;br /&gt;
&lt;br /&gt;
200 OK&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;valid&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
400 Bad Request (expect reason to include different validation errors)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;valid&amp;quot;: false,&lt;br /&gt;
  &amp;quot;reason&amp;quot;: &amp;quot;Administrative data must include reference name and author.&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
404 Not Found&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;error&amp;quot;: true,&lt;br /&gt;
  &amp;quot;message&amp;quot;: &amp;quot;Unknown validator. Accepted values: avalon&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.13.0_and_Storage_Service_0.18.0_release_notes&amp;diff=13577</id>
		<title>Archivematica 1.13.0 and Storage Service 0.18.0 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.13.0_and_Storage_Service_0.18.0_release_notes&amp;diff=13577"/>
		<updated>2021-05-12T11:27:55Z</updated>

		<summary type="html">&lt;p&gt;Sevein: Add skeleton with notes on Storage Service + MySQL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.13.0 and Storage Service 0.18.0&lt;br /&gt;
&lt;br /&gt;
'''Release date: ???'''&lt;br /&gt;
&lt;br /&gt;
== Environments ==&lt;br /&gt;
&lt;br /&gt;
Please see the [https://www.archivematica.org/en/docs/archivematica-1.13/admin-manual/installation-setup/installation/installation/#installation installation instructions].&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.13.0 and Storage Service 0.18.0 have been tested in the following environments:&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 18.04 64-bit Server Edition&lt;br /&gt;
* CentOS 7 64-bit&lt;br /&gt;
&lt;br /&gt;
For development purposes, most of our developers prefer to use Docker containers. These and all above environments are linked from the installation instructions above.&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changed ==&lt;br /&gt;
&lt;br /&gt;
=== Python 3 ===&lt;br /&gt;
&lt;br /&gt;
\o/&lt;br /&gt;
&lt;br /&gt;
=== Archivematica Storage Service now uses MySQL by default ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/952&lt;br /&gt;
&lt;br /&gt;
MySQL is now the default database in Archivematica Storage Service. SQLite is still supported but we encourage users to migrate. We have documented the process: [https://www.archivematica.org/en/docs/storage-service-0.18/migration-sqlite-mysql/#migration-sqlite-mysql Migrating data from SQLite to MySQL]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And more! Please see the 1.13 milestone in Github for all issues addressed in this release: https://github.com/archivematica/Issues/milestone/17&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13540</id>
		<title>Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13540"/>
		<updated>2021-01-26T18:09:57Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Archivematica 1.x releases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; Release Notes&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
&lt;br /&gt;
Release notes are prepared by Artefactual for each release of Archivematica. Most releases also have a corresponding release of the Storage System, and may also include corresponding releases for various dependencies and libraries (i.e. FIDO, Automation Tools) - be sure to check the release notes for more information.&lt;br /&gt;
&lt;br /&gt;
Major releases are '''bolded''', minor releases are not.&lt;br /&gt;
&lt;br /&gt;
Features, enhancements, and bug fixes are often sponsored by members of the Archivematica community who are dedicated to funding Archivematica's ongoing development and maintenance. Code contributors are individuals who write Archivematica code and [https://github.com/artefactual/archivematica/blob/stable/1.6.x/CONTRIBUTING.md| contribute it] back to the project. Archivematica couldn't continue to grow without sponsors and contributors - thank you!&lt;br /&gt;
&lt;br /&gt;
Questions about a release or the release notes? Ask on the [https://groups.google.com/forum/#!forum/archivematica| Archivematica Google Group!]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 1.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_1.13.0_and_Storage_Service_0.18.0_release_notes|Archivematica 1.13.0 and Storage Service 0.18.0 Release Notes]] (Upcoming release)&lt;br /&gt;
* [[Archivematica_1.12.1_and_Storage_Service_0.17.1_release_notes|Archivematica 1.12.1 and Storage Service 0.17.1 Release Notes]] (Current release)&lt;br /&gt;
* [[Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes|'''Archivematica 1.12.0 and Storage Service 0.17.0 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.11.2_and_Storage_Service_0.16.1_release_notes|Archivematica 1.11.2 and Storage Service 0.16.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.11.1|Archivematica 1.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.11_and_Storage_Service_0.16_release_notes|'''Archivematica 1.11 and Storage Service 0.16 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.10.2|Archivematica 1.10.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10.1_release_notes|Archivematica 1.10.1 and Storage Service 0.15.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10_and_Storage_Service_0.15_release_notes|'''Archivematica 1.10 and Storage Service 0.15 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.9.3|Archivematica 1.9.3 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.9.2_release_notes|Archivematica 1.9.2 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9.1_and_Storage_Service_0.14.1_release_notes|Archivematica 1.9.1 and Storage Service 0.14.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9_and_Storage_Service_0.14_release_notes|'''Archivematica 1.9 and Storage Service 0.14 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.8.1_release_notes|Archivematica 1.8.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.8_and_Storage_Service_0.13_release_notes|'''Archivematica 1.8 and Storage Service 0.13 Release Notes''']]&lt;br /&gt;
*[[Archivematica 1.7.2_release_notes|Archivematica 1.7.2 Release Notes]] &lt;br /&gt;
*[[Storage Service 0.12 Release Notes|'''Storage Service 0.12 Release Notes''']] &lt;br /&gt;
*[[Archivematica 1.7.1_release_notes|Archivematica 1.7.1 Release Notes]]&lt;br /&gt;
*[[Storage Service 0.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.7_and_Storage_Service_0.11_release_notes|'''Archivematica 1.7 and Storage Service 0.11 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.6.1_release_notes|Archivematica 1.6.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.6_release_notes|'''Archivematica 1.6 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.5.1_Release_Notes|Archivematica 1.5.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.5_Release_Notes|'''Archivematica 1.5 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.4.1_Release_Notes|Archivematica 1.4.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.4_Release_Notes|'''Archivematica 1.4 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.3.2_Release_Notes|Archivematica 1.3.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3.1_Release_Notes|Archivematica 1.3.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3_Release_Notes|'''Archivematica 1.3 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.2_Release_Notes|'''Archivematica 1.2 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.1_Release_Notes|'''Archivematica 1.1 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.0_Release_Notes|'''Archivematica 1.0 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 0.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_0.10-beta_Release_Notes|'''Archivematica 0.10 Release Notes''']] &lt;br /&gt;
* [[Archivematica_0.9_Release_Notes|'''Archivematica 0.9 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.8 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.7.1_Release_Notes|Archivematica 0.7.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_0.7_Release_Notes|'''Archivematica 0.7 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.6 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
&lt;br /&gt;
* [[Major_release_notes|Template for major releases]]&lt;br /&gt;
* [[Minor_release_notes|Template for minor releases]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Update_mapping_and_reindex_Elasticsearch_indices&amp;diff=13539</id>
		<title>Update mapping and reindex Elasticsearch indices</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Update_mapping_and_reindex_Elasticsearch_indices&amp;diff=13539"/>
		<updated>2021-01-19T10:15:44Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is now part of our official upgrading docs: https://www.archivematica.org/en/docs/latest/admin-manual/installation-setup/upgrading/upgrading/.'''&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
= Backup Elasticsearch data =&lt;br /&gt;
&lt;br /&gt;
The easiest way to backup the Elasticsearch data is copying the data directory:&lt;br /&gt;
&lt;br /&gt;
  sudo service elasticsearch stop&lt;br /&gt;
  tar cvfz var_lib_elasticsearch.tgz /var/lib/elasticsearch&lt;br /&gt;
  sudo service elasticsearch start&lt;br /&gt;
&lt;br /&gt;
= List indices to resize the Elasticsearch heap size when needed =&lt;br /&gt;
&lt;br /&gt;
Use the following command to list indices:&lt;br /&gt;
&lt;br /&gt;
  curl -s -X GET 'http://localhost:9200/_cat/indices/%2A?v=&amp;amp;s=index:desc'&lt;br /&gt;
&lt;br /&gt;
The output should show something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  root@archivematica-test-server:~# curl -s -X GET 'http://localhost:9200/_cat/indices/%2A?v=&amp;amp;s=index:desc'&lt;br /&gt;
  health status index         uuid                   pri rep docs.count docs.deleted store.size pri.store.size&lt;br /&gt;
  yellow open   transfers     lYqkYjwZRy2XG8CP_3S3PQ   5   1          0            0      1.2kb          1.2kb&lt;br /&gt;
  yellow open   transferfiles K5gnDZyOQz2JdIeZ6adJsQ   5   1          0            0      1.2kb          1.2kb&lt;br /&gt;
  yellow open   aips          yAyK_koXThaZcWsBYfzN7w   5   1         17            0    101.4mb        101.4mb&lt;br /&gt;
  yellow open   aipfiles      TVrrX8jkRhWWxGfvK_M6zg   5   1      11987            0      2.9gb          2.9gb&lt;br /&gt;
&lt;br /&gt;
Take the elasticsearch heap size from ''/etc/default/elasticsearch'' (Ubuntu) or ''/etc/sysconfig/elasticsearch'' (CentOS):&lt;br /&gt;
&lt;br /&gt;
  root@ny-gclibrary-test-release-1:~# grep ES_JAVA_OPTS= /etc/default/elasticsearch &lt;br /&gt;
  #ES_JAVA_OPTS=&lt;br /&gt;
  ES_JAVA_OPTS=&amp;quot;-Xms2g -Xmx2g&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The heap size for the example is 2G.&lt;br /&gt;
&lt;br /&gt;
Ensure your Elasticsearch heap size is greater than the max ''store.size'' in the indices list. For our example, it should be greater than 3GB. &lt;br /&gt;
&lt;br /&gt;
* Edit ''/etc/default/elasticsearch'' or ''/etc/sysconfig/elasticsearch''.&lt;br /&gt;
* Change ''ES_JAVA_OPTS'' to a bigger value, in our example: &lt;br /&gt;
  ES_JAVA_OPTS=&amp;quot;-Xms3g -Xmx3g&amp;quot;.&lt;br /&gt;
* Restart Elasticsearch service for the changes to take effect (''sudo service elasticsearch restart'')&lt;br /&gt;
&lt;br /&gt;
= Run script to reindex and use new mappings =&lt;br /&gt;
&lt;br /&gt;
Use the following script:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
es_url=&amp;quot;http://localhost:9200&amp;quot;&lt;br /&gt;
&lt;br /&gt;
index_list='aips aipfiles transfers transferfiles'&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\nIndex list before reindexing:\n&amp;quot;&lt;br /&gt;
curl -s -X GET &amp;quot;${es_url}/_cat/indices/%2A?v=&amp;amp;s=index:desc&amp;quot;&lt;br /&gt;
echo -e &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#Clone indices with _reindex API call:&lt;br /&gt;
for index in $index_list;do &lt;br /&gt;
    echo &amp;quot;Reindex ${index} in ${index}_new...&amp;quot;&lt;br /&gt;
    curl -s -X POST \&lt;br /&gt;
      ${es_url}/_reindex \&lt;br /&gt;
      -H 'Content-Type: application/json' \&lt;br /&gt;
      -d '{&lt;br /&gt;
      &amp;quot;source&amp;quot;: {&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;'&amp;quot;${index}&amp;quot;'&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;dest&amp;quot;: {&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;'&amp;quot;${index}_new&amp;quot;'&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }' &amp;gt; /dev/null&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Index list after tmp indices creation\n&amp;quot;&lt;br /&gt;
indices_output=$(curl -s -X GET &amp;quot;${es_url}/_cat/indices/%2A?v=&amp;amp;s=index:desc&amp;quot;)&lt;br /&gt;
curl -s -X GET &amp;quot;${es_url}/_cat/indices/%2A?v=&amp;amp;s=index:desc&amp;quot;&lt;br /&gt;
echo -e &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#Delete old indices&lt;br /&gt;
for index in $index_list;do&lt;br /&gt;
  echo &amp;quot;Deleting ${index}...&amp;quot;&lt;br /&gt;
  curl -s -X DELETE ${es_url}/${index} &amp;gt; /dev/null&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
#Restart archivematica-dashboard to create indices with new mappings&lt;br /&gt;
echo -e &amp;quot;\nRestarting archivematica-dashboard&amp;quot;&lt;br /&gt;
sudo service archivematica-dashboard restart&lt;br /&gt;
&lt;br /&gt;
#Wait 30 seconds&lt;br /&gt;
echo &amp;quot;Wait 30 seconds to ensure dashboard has created the empty indices with new mapping&amp;quot;&lt;br /&gt;
sleep 30&lt;br /&gt;
echo -e &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#When index has no docs the reindex doesn't create the new index (typically transferfiles index)&lt;br /&gt;
#There's a check to ensure the new index has been create before reindexing. &lt;br /&gt;
#Reindex fron *_new indices:&lt;br /&gt;
for index in $index_list;do&lt;br /&gt;
  if echo &amp;quot;$indices_output&amp;quot; | grep ${index}_new &amp;gt;/dev/null; then&lt;br /&gt;
    echo &amp;quot;Indexing ${index} using ${index}_new ...&amp;quot;&lt;br /&gt;
    curl -s -X POST \&lt;br /&gt;
      ${es_url}/_reindex \&lt;br /&gt;
      -H 'Content-Type: application/json' \&lt;br /&gt;
      -d '{&lt;br /&gt;
      &amp;quot;source&amp;quot;: {&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;'&amp;quot;${index}_new&amp;quot;'&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;dest&amp;quot;: {&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;'&amp;quot;${index}&amp;quot;'&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }' &amp;gt; /dev/null&lt;br /&gt;
  fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#Delete tmp indices&lt;br /&gt;
for index in $index_list;do&lt;br /&gt;
  if echo &amp;quot;$indices_output&amp;quot; | grep ${index}_new &amp;gt;/dev/null; then&lt;br /&gt;
     echo &amp;quot;Deleting ${index}_new...&amp;quot;&lt;br /&gt;
     curl -s -X DELETE ${es_url}/${index}_new &amp;gt; /dev/null&lt;br /&gt;
  fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\nReindexing done:\n&amp;quot;&lt;br /&gt;
curl -s -X GET &amp;quot;${es_url}/_cat/indices/%2A?v=&amp;amp;s=index:desc&amp;quot;&lt;br /&gt;
echo -e &amp;quot;\n&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For our example it takes 11 minutes, and this is the output:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@archivematica-test-server:~# time ./script_reindex_new_map.sh &lt;br /&gt;
&lt;br /&gt;
Index list before reindexing:&lt;br /&gt;
&lt;br /&gt;
health status index         uuid                   pri rep docs.count docs.deleted store.size pri.store.size&lt;br /&gt;
yellow open   transfers     lYqkYjwZRy2XG8CP_3S3PQ   5   1          3            0     11.6kb         11.6kb&lt;br /&gt;
yellow open   transferfiles K5gnDZyOQz2JdIeZ6adJsQ   5   1          0            0      1.2kb          1.2kb&lt;br /&gt;
yellow open   aips          yAyK_koXThaZcWsBYfzN7w   5   1         17            0    101.4mb        101.4mb&lt;br /&gt;
yellow open   aipfiles      TVrrX8jkRhWWxGfvK_M6zg   5   1      12905            0      2.6gb          2.6gb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reindex aips in aips_new...&lt;br /&gt;
Reindex aipfiles in aipfiles_new...&lt;br /&gt;
Reindex transfers in transfers_new...&lt;br /&gt;
Reindex transferfiles in transferfiles_new...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Index list after tmp indices creation&lt;br /&gt;
&lt;br /&gt;
health status index         uuid                   pri rep docs.count docs.deleted store.size pri.store.size&lt;br /&gt;
yellow open   transfers_new gdFevH8yRdiNTdrPcfo8Lg   5   1          0            0       460b           460b&lt;br /&gt;
yellow open   transfers     lYqkYjwZRy2XG8CP_3S3PQ   5   1          3            0     11.6kb         11.6kb&lt;br /&gt;
yellow open   transferfiles K5gnDZyOQz2JdIeZ6adJsQ   5   1          0            0      1.2kb          1.2kb&lt;br /&gt;
yellow open   aips_new      uJ-ehaYLTfe_1lOSErfu3Q   5   1         17            0     96.8mb         96.8mb&lt;br /&gt;
yellow open   aips          yAyK_koXThaZcWsBYfzN7w   5   1         17            0    101.4mb        101.4mb&lt;br /&gt;
yellow open   aipfiles_new  00Xxu7v2QvWsq92gM247xQ   5   1      12905            0      3.1gb          3.1gb&lt;br /&gt;
yellow open   aipfiles      TVrrX8jkRhWWxGfvK_M6zg   5   1      12905            0      2.6gb          2.6gb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deleting aips...&lt;br /&gt;
Deleting aipfiles...&lt;br /&gt;
Deleting transfers...&lt;br /&gt;
Deleting transferfiles...&lt;br /&gt;
&lt;br /&gt;
Restarting archivematica-dashboard&lt;br /&gt;
Wait 30 seconds to ensure dashboard has created the empty indices with new mapping&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Indexing aips using aips_new ...&lt;br /&gt;
Indexing aipfiles using aipfiles_new ...&lt;br /&gt;
Indexing transfers using transfers_new ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deleting aips_new...&lt;br /&gt;
Deleting aipfiles_new...&lt;br /&gt;
Deleting transfers_new...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reindexing done:&lt;br /&gt;
&lt;br /&gt;
health status index         uuid                   pri rep docs.count docs.deleted store.size pri.store.size&lt;br /&gt;
yellow open   transfers     FC7aSVPmSmmCc_LTv1AQRA   5   1          3            0      1.2kb          1.2kb&lt;br /&gt;
yellow open   transferfiles 5JMAft3FQwmosZQFi7eJNw   5   1          0            0      1.2kb          1.2kb&lt;br /&gt;
yellow open   aips          EtwXG3-4SO2Px-4QMRufXA   5   1         17            0    102.1mb        102.1mb&lt;br /&gt;
yellow open   aipfiles      -PFuzslgTeWJ4CWny8VZoA   5   1      12905            0        3gb            3gb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
real	10m47.114s&lt;br /&gt;
user	0m0.068s&lt;br /&gt;
sys	0m0.032s&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE''':  The script could fail because JAVA heap size out of memory (please, check /var/log/elascticsearch.log). In this case the indices will be empty, so restore /var/lib/elasticsearch from backup, increase Elasticsearch JAVA heap size and try again.&lt;br /&gt;
&lt;br /&gt;
The script uses the elasticsearch API and makes the following actions:&lt;br /&gt;
&lt;br /&gt;
* Reindex the ''transfers'', ''transferfiles'', ''aips'' and ''aipfiles'' indices in new temporary indices&lt;br /&gt;
* Delete original indices&lt;br /&gt;
* Restart ''archivematica-dashboard'' service to create empty indices with new mappings&lt;br /&gt;
* Reindex from temporary indices&lt;br /&gt;
* Delete temporary indices&lt;br /&gt;
&lt;br /&gt;
= Restore Elasticsearch heap size when needed=&lt;br /&gt;
&lt;br /&gt;
* Edit ''/etc/default/elasticsearch'' or ''/etc/sysconfig/elasticsearch'' when needed.&lt;br /&gt;
* Change ''ES_JAVA_OPTS'' when needed.&lt;br /&gt;
* Restart Elasticsearch service when needed (''sudo service elasticsearch restart'')&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Update_mapping_and_reindex_Elasticsearch_indices&amp;diff=13538</id>
		<title>Update mapping and reindex Elasticsearch indices</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Update_mapping_and_reindex_Elasticsearch_indices&amp;diff=13538"/>
		<updated>2021-01-13T16:06:55Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''This is now part of our official upgrading docs: https://www.archivematica.org/en/docs/archivematica-1.12/admin-manual/installation-setup/upgrading/upgrading/.'''&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
= Backup Elasticsearch data =&lt;br /&gt;
&lt;br /&gt;
The easiest way to backup the Elasticsearch data is copying the data directory:&lt;br /&gt;
&lt;br /&gt;
  sudo service elasticsearch stop&lt;br /&gt;
  tar cvfz var_lib_elasticsearch.tgz /var/lib/elasticsearch&lt;br /&gt;
  sudo service elasticsearch start&lt;br /&gt;
&lt;br /&gt;
= List indices to resize the Elasticsearch heap size when needed =&lt;br /&gt;
&lt;br /&gt;
Use the following command to list indices:&lt;br /&gt;
&lt;br /&gt;
  curl -s -X GET 'http://localhost:9200/_cat/indices/%2A?v=&amp;amp;s=index:desc'&lt;br /&gt;
&lt;br /&gt;
The output should show something like this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  root@archivematica-test-server:~# curl -s -X GET 'http://localhost:9200/_cat/indices/%2A?v=&amp;amp;s=index:desc'&lt;br /&gt;
  health status index         uuid                   pri rep docs.count docs.deleted store.size pri.store.size&lt;br /&gt;
  yellow open   transfers     lYqkYjwZRy2XG8CP_3S3PQ   5   1          0            0      1.2kb          1.2kb&lt;br /&gt;
  yellow open   transferfiles K5gnDZyOQz2JdIeZ6adJsQ   5   1          0            0      1.2kb          1.2kb&lt;br /&gt;
  yellow open   aips          yAyK_koXThaZcWsBYfzN7w   5   1         17            0    101.4mb        101.4mb&lt;br /&gt;
  yellow open   aipfiles      TVrrX8jkRhWWxGfvK_M6zg   5   1      11987            0      2.9gb          2.9gb&lt;br /&gt;
&lt;br /&gt;
Take the elasticsearch heap size from ''/etc/default/elasticsearch'' (Ubuntu) or ''/etc/sysconfig/elasticsearch'' (CentOS):&lt;br /&gt;
&lt;br /&gt;
  root@ny-gclibrary-test-release-1:~# grep ES_JAVA_OPTS= /etc/default/elasticsearch &lt;br /&gt;
  #ES_JAVA_OPTS=&lt;br /&gt;
  ES_JAVA_OPTS=&amp;quot;-Xms2g -Xmx2g&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The heap size for the example is 2G.&lt;br /&gt;
&lt;br /&gt;
Ensure your Elasticsearch heap size is greater than the max ''store.size'' in the indices list. For our example, it should be greater than 3GB. &lt;br /&gt;
&lt;br /&gt;
* Edit ''/etc/default/elasticsearch'' or ''/etc/sysconfig/elasticsearch''.&lt;br /&gt;
* Change ''ES_JAVA_OPTS'' to a bigger value, in our example: &lt;br /&gt;
  ES_JAVA_OPTS=&amp;quot;-Xms3g -Xmx3g&amp;quot;.&lt;br /&gt;
* Restart Elasticsearch service for the changes to take effect (''sudo service elasticsearch restart'')&lt;br /&gt;
&lt;br /&gt;
= Run script to reindex and use new mappings =&lt;br /&gt;
&lt;br /&gt;
Use the following script:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
es_url=&amp;quot;http://localhost:9200&amp;quot;&lt;br /&gt;
&lt;br /&gt;
index_list='aips aipfiles transfers transferfiles'&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\nIndex list before reindexing:\n&amp;quot;&lt;br /&gt;
curl -s -X GET &amp;quot;${es_url}/_cat/indices/%2A?v=&amp;amp;s=index:desc&amp;quot;&lt;br /&gt;
echo -e &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#Clone indices with _reindex API call:&lt;br /&gt;
for index in $index_list;do &lt;br /&gt;
    echo &amp;quot;Reindex ${index} in ${index}_new...&amp;quot;&lt;br /&gt;
    curl -s -X POST \&lt;br /&gt;
      ${es_url}/_reindex \&lt;br /&gt;
      -H 'Content-Type: application/json' \&lt;br /&gt;
      -d '{&lt;br /&gt;
      &amp;quot;source&amp;quot;: {&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;'&amp;quot;${index}&amp;quot;'&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;dest&amp;quot;: {&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;'&amp;quot;${index}_new&amp;quot;'&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }' &amp;gt; /dev/null&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Index list after tmp indices creation\n&amp;quot;&lt;br /&gt;
indices_output=$(curl -s -X GET &amp;quot;${es_url}/_cat/indices/%2A?v=&amp;amp;s=index:desc&amp;quot;)&lt;br /&gt;
curl -s -X GET &amp;quot;${es_url}/_cat/indices/%2A?v=&amp;amp;s=index:desc&amp;quot;&lt;br /&gt;
echo -e &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#Delete old indices&lt;br /&gt;
for index in $index_list;do&lt;br /&gt;
  echo &amp;quot;Deleting ${index}...&amp;quot;&lt;br /&gt;
  curl -s -X DELETE ${es_url}/${index} &amp;gt; /dev/null&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
#Restart archivematica-dashboard to create indices with new mappings&lt;br /&gt;
echo -e &amp;quot;\nRestarting archivematica-dashboard&amp;quot;&lt;br /&gt;
sudo service archivematica-dashboard restart&lt;br /&gt;
&lt;br /&gt;
#Wait 30 seconds&lt;br /&gt;
echo &amp;quot;Wait 30 seconds to ensure dashboard has created the empty indices with new mapping&amp;quot;&lt;br /&gt;
sleep 30&lt;br /&gt;
echo -e &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#When index has no docs the reindex doesn't create the new index (typically transferfiles index)&lt;br /&gt;
#There's a check to ensure the new index has been create before reindexing. &lt;br /&gt;
#Reindex fron *_new indices:&lt;br /&gt;
for index in $index_list;do&lt;br /&gt;
  if echo &amp;quot;$indices_output&amp;quot; | grep ${index}_new &amp;gt;/dev/null; then&lt;br /&gt;
    echo &amp;quot;Indexing ${index} using ${index}_new ...&amp;quot;&lt;br /&gt;
    curl -s -X POST \&lt;br /&gt;
      ${es_url}/_reindex \&lt;br /&gt;
      -H 'Content-Type: application/json' \&lt;br /&gt;
      -d '{&lt;br /&gt;
      &amp;quot;source&amp;quot;: {&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;'&amp;quot;${index}_new&amp;quot;'&amp;quot;&lt;br /&gt;
      },&lt;br /&gt;
      &amp;quot;dest&amp;quot;: {&lt;br /&gt;
        &amp;quot;index&amp;quot;: &amp;quot;'&amp;quot;${index}&amp;quot;'&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
    }' &amp;gt; /dev/null&lt;br /&gt;
  fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#Delete tmp indices&lt;br /&gt;
for index in $index_list;do&lt;br /&gt;
  if echo &amp;quot;$indices_output&amp;quot; | grep ${index}_new &amp;gt;/dev/null; then&lt;br /&gt;
     echo &amp;quot;Deleting ${index}_new...&amp;quot;&lt;br /&gt;
     curl -s -X DELETE ${es_url}/${index}_new &amp;gt; /dev/null&lt;br /&gt;
  fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;\n\nReindexing done:\n&amp;quot;&lt;br /&gt;
curl -s -X GET &amp;quot;${es_url}/_cat/indices/%2A?v=&amp;amp;s=index:desc&amp;quot;&lt;br /&gt;
echo -e &amp;quot;\n&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For our example it takes 11 minutes, and this is the output:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
root@archivematica-test-server:~# time ./script_reindex_new_map.sh &lt;br /&gt;
&lt;br /&gt;
Index list before reindexing:&lt;br /&gt;
&lt;br /&gt;
health status index         uuid                   pri rep docs.count docs.deleted store.size pri.store.size&lt;br /&gt;
yellow open   transfers     lYqkYjwZRy2XG8CP_3S3PQ   5   1          3            0     11.6kb         11.6kb&lt;br /&gt;
yellow open   transferfiles K5gnDZyOQz2JdIeZ6adJsQ   5   1          0            0      1.2kb          1.2kb&lt;br /&gt;
yellow open   aips          yAyK_koXThaZcWsBYfzN7w   5   1         17            0    101.4mb        101.4mb&lt;br /&gt;
yellow open   aipfiles      TVrrX8jkRhWWxGfvK_M6zg   5   1      12905            0      2.6gb          2.6gb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reindex aips in aips_new...&lt;br /&gt;
Reindex aipfiles in aipfiles_new...&lt;br /&gt;
Reindex transfers in transfers_new...&lt;br /&gt;
Reindex transferfiles in transferfiles_new...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Index list after tmp indices creation&lt;br /&gt;
&lt;br /&gt;
health status index         uuid                   pri rep docs.count docs.deleted store.size pri.store.size&lt;br /&gt;
yellow open   transfers_new gdFevH8yRdiNTdrPcfo8Lg   5   1          0            0       460b           460b&lt;br /&gt;
yellow open   transfers     lYqkYjwZRy2XG8CP_3S3PQ   5   1          3            0     11.6kb         11.6kb&lt;br /&gt;
yellow open   transferfiles K5gnDZyOQz2JdIeZ6adJsQ   5   1          0            0      1.2kb          1.2kb&lt;br /&gt;
yellow open   aips_new      uJ-ehaYLTfe_1lOSErfu3Q   5   1         17            0     96.8mb         96.8mb&lt;br /&gt;
yellow open   aips          yAyK_koXThaZcWsBYfzN7w   5   1         17            0    101.4mb        101.4mb&lt;br /&gt;
yellow open   aipfiles_new  00Xxu7v2QvWsq92gM247xQ   5   1      12905            0      3.1gb          3.1gb&lt;br /&gt;
yellow open   aipfiles      TVrrX8jkRhWWxGfvK_M6zg   5   1      12905            0      2.6gb          2.6gb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deleting aips...&lt;br /&gt;
Deleting aipfiles...&lt;br /&gt;
Deleting transfers...&lt;br /&gt;
Deleting transferfiles...&lt;br /&gt;
&lt;br /&gt;
Restarting archivematica-dashboard&lt;br /&gt;
Wait 30 seconds to ensure dashboard has created the empty indices with new mapping&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Indexing aips using aips_new ...&lt;br /&gt;
Indexing aipfiles using aipfiles_new ...&lt;br /&gt;
Indexing transfers using transfers_new ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deleting aips_new...&lt;br /&gt;
Deleting aipfiles_new...&lt;br /&gt;
Deleting transfers_new...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reindexing done:&lt;br /&gt;
&lt;br /&gt;
health status index         uuid                   pri rep docs.count docs.deleted store.size pri.store.size&lt;br /&gt;
yellow open   transfers     FC7aSVPmSmmCc_LTv1AQRA   5   1          3            0      1.2kb          1.2kb&lt;br /&gt;
yellow open   transferfiles 5JMAft3FQwmosZQFi7eJNw   5   1          0            0      1.2kb          1.2kb&lt;br /&gt;
yellow open   aips          EtwXG3-4SO2Px-4QMRufXA   5   1         17            0    102.1mb        102.1mb&lt;br /&gt;
yellow open   aipfiles      -PFuzslgTeWJ4CWny8VZoA   5   1      12905            0        3gb            3gb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
real	10m47.114s&lt;br /&gt;
user	0m0.068s&lt;br /&gt;
sys	0m0.032s&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE''':  The script could fail because JAVA heap size out of memory (please, check /var/log/elascticsearch.log). In this case the indices will be empty, so restore /var/lib/elasticsearch from backup, increase Elasticsearch JAVA heap size and try again.&lt;br /&gt;
&lt;br /&gt;
The script uses the elasticsearch API and makes the following actions:&lt;br /&gt;
&lt;br /&gt;
* Reindex the ''transfers'', ''transferfiles'', ''aips'' and ''aipfiles'' indices in new temporary indices&lt;br /&gt;
* Delete original indices&lt;br /&gt;
* Restart ''archivematica-dashboard'' service to create empty indices with new mappings&lt;br /&gt;
* Reindex from temporary indices&lt;br /&gt;
* Delete temporary indices&lt;br /&gt;
&lt;br /&gt;
= Restore Elasticsearch heap size when needed=&lt;br /&gt;
&lt;br /&gt;
* Edit ''/etc/default/elasticsearch'' or ''/etc/sysconfig/elasticsearch'' when needed.&lt;br /&gt;
* Change ''ES_JAVA_OPTS'' when needed.&lt;br /&gt;
* Restart Elasticsearch service when needed (''sudo service elasticsearch restart'')&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13526</id>
		<title>Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13526"/>
		<updated>2020-12-01T18:13:12Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; Release Notes&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
&lt;br /&gt;
Release notes are prepared by Artefactual for each release of Archivematica. Most releases also have a corresponding release of the Storage System, and may also include corresponding releases for various dependencies and libraries (i.e. FIDO, Automation Tools) - be sure to check the release notes for more information.&lt;br /&gt;
&lt;br /&gt;
Major releases are '''bolded''', minor releases are not.&lt;br /&gt;
&lt;br /&gt;
Features, enhancements, and bug fixes are often sponsored by members of the Archivematica community who are dedicated to funding Archivematica's ongoing development and maintenance. Code contributors are individuals who write Archivematica code and [https://github.com/artefactual/archivematica/blob/stable/1.6.x/CONTRIBUTING.md| contribute it] back to the project. Archivematica couldn't continue to grow without sponsors and contributors - thank you!&lt;br /&gt;
&lt;br /&gt;
Questions about a release or the release notes? Ask on the [https://groups.google.com/forum/#!forum/archivematica| Archivematica Google Group!]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 1.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_1.12.1_and_Storage_Service_0.17.1_release_notes|'''Archivematica 1.12.1 and Storage Service 0.17.1 Release Notes''']] (Upcoming release)&lt;br /&gt;
* [[Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes|'''Archivematica 1.12.0 and Storage Service 0.17.0 Release Notes''']] (Current release)&lt;br /&gt;
* [[Archivematica_1.11.2_and_Storage_Service_0.16.1_release_notes|Archivematica 1.11.2 and Storage Service 0.16.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.11.1|Archivematica 1.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.11_and_Storage_Service_0.16_release_notes|'''Archivematica 1.11 and Storage Service 0.16 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.10.2|Archivematica 1.10.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10.1_release_notes|Archivematica 1.10.1 and Storage Service 0.15.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10_and_Storage_Service_0.15_release_notes|'''Archivematica 1.10 and Storage Service 0.15 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.9.3|Archivematica 1.9.3 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.9.2_release_notes|Archivematica 1.9.2 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9.1_and_Storage_Service_0.14.1_release_notes|Archivematica 1.9.1 and Storage Service 0.14.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9_and_Storage_Service_0.14_release_notes|'''Archivematica 1.9 and Storage Service 0.14 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.8.1_release_notes|Archivematica 1.8.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.8_and_Storage_Service_0.13_release_notes|'''Archivematica 1.8 and Storage Service 0.13 Release Notes''']]&lt;br /&gt;
*[[Archivematica 1.7.2_release_notes|Archivematica 1.7.2 Release Notes]] &lt;br /&gt;
*[[Storage Service 0.12 Release Notes|'''Storage Service 0.12 Release Notes''']] &lt;br /&gt;
*[[Archivematica 1.7.1_release_notes|Archivematica 1.7.1 Release Notes]]&lt;br /&gt;
*[[Storage Service 0.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.7_and_Storage_Service_0.11_release_notes|'''Archivematica 1.7 and Storage Service 0.11 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.6.1_release_notes|Archivematica 1.6.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.6_release_notes|'''Archivematica 1.6 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.5.1_Release_Notes|Archivematica 1.5.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.5_Release_Notes|'''Archivematica 1.5 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.4.1_Release_Notes|Archivematica 1.4.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.4_Release_Notes|'''Archivematica 1.4 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.3.2_Release_Notes|Archivematica 1.3.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3.1_Release_Notes|Archivematica 1.3.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3_Release_Notes|'''Archivematica 1.3 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.2_Release_Notes|'''Archivematica 1.2 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.1_Release_Notes|'''Archivematica 1.1 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.0_Release_Notes|'''Archivematica 1.0 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 0.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_0.10-beta_Release_Notes|'''Archivematica 0.10 Release Notes''']] &lt;br /&gt;
* [[Archivematica_0.9_Release_Notes|'''Archivematica 0.9 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.8 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.7.1_Release_Notes|Archivematica 0.7.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_0.7_Release_Notes|'''Archivematica 0.7 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.6 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
&lt;br /&gt;
* [[Major_release_notes|Template for major releases]]&lt;br /&gt;
* [[Minor_release_notes|Template for minor releases]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes&amp;diff=13520</id>
		<title>Archivematica 1.12.0 and Storage Service 0.17.0 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes&amp;diff=13520"/>
		<updated>2020-10-07T06:35:28Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Environments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.12.0 and Storage Service 0.17.0&lt;br /&gt;
&lt;br /&gt;
'''Release date: still in progress!'''&lt;br /&gt;
&lt;br /&gt;
==Environments==&lt;br /&gt;
&lt;br /&gt;
Please see the [https://www.archivematica.org/en/docs/archivematica-1.12/admin-manual/installation-setup/installation/installation/#installation installation instructions].&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.12.0 and Storage Service 0.17.0 have been tested in the following environments:&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 18.04 64-bit Server Edition&lt;br /&gt;
* CentOS 7 64-bit&lt;br /&gt;
&lt;br /&gt;
For development purposes, most of our developers prefer to use Docker containers. These and all above environments are linked from the installation instructions above.&lt;br /&gt;
&lt;br /&gt;
Please note due to a dependency issue we have not provided RPMs for the 1.12 release. We plan to address this issue in a point release and provide RPMs then. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 10px 10px; border: 1px solid black; background-color: #F79086;&amp;quot;&amp;gt;Note: if you are upgrading from Archivematica 1.10.x or earlier, please be sure to clean up the completed transfers watched directory before upgrading. Instructions can be found on the [https://www.archivematica.org/en/docs/archivematica-1.11/admin-manual/installation-setup/upgrading/upgrading/#upgrade Upgrading] page in the documentation. &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
=== Processing configuration selector ===&lt;br /&gt;
&lt;br /&gt;
This feature allows the user to choose a processing configuration at the time of transfer by way of a drop down in the &amp;quot;Start transfer&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1166&lt;br /&gt;
* Documentation: https://www.archivematica.org/en/docs/archivematica-1.12/user-manual/transfer/transfer.rst&lt;br /&gt;
&lt;br /&gt;
This feature has been sponsored by Simon Fraser University Archives. Thank you!&lt;br /&gt;
&lt;br /&gt;
=== Column selectors for the Backlog and Archival Storage tab ===&lt;br /&gt;
&lt;br /&gt;
Users can now choose the columns displayed while browsing the Backlog and Archival Storage tabs so they can see the information most relevant to them.&lt;br /&gt;
&lt;br /&gt;
* Issue (Archival Storage): https://github.com/archivematica/Issues/issues/1168&lt;br /&gt;
* Documentation (Archival Storage): https://www.archivematica.org/en/docs/archivematica-1.12/user-manual/archival-storage/archival-storage/#archival-storage&lt;br /&gt;
&lt;br /&gt;
* Issue (Backlog): https://github.com/archivematica/Issues/issues/1167&lt;br /&gt;
* Documentation (Backlog): https://www.archivematica.org/en/docs/archivematica-1.12/user-manual/backlog/backlog/#backlog&lt;br /&gt;
&lt;br /&gt;
These features have been sponsored by Simon Fraser University Archives. Thank you!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== AIP location column on Archival Storage tab ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1214&lt;br /&gt;
* Documentation: https://www.archivematica.org/en/docs/archivematica-1.12/user-manual/archival-storage/archival-storage/#archival-storage&lt;br /&gt;
&lt;br /&gt;
This feature has been sponsored by Picturae. Thank you!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Downloadable CSV from Archival Storage search ===&lt;br /&gt;
&lt;br /&gt;
Users can now download a CSV containing all entries in Archival Storage, containing these columns: AIP name, Size, UUID, Number of files, Date stored, Status, Encrypted, and Storage Location &lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1213&lt;br /&gt;
* Documentation: https://www.archivematica.org/en/docs/archivematica-1.12/user-manual/archival-storage/archival-storage/#archival-storage&lt;br /&gt;
&lt;br /&gt;
This feature has been sponsored by Picturae. Thank you!&lt;br /&gt;
&lt;br /&gt;
=== Central Authorization Service (CAS) for Archivematica and Storage Service ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1211&lt;br /&gt;
* Documentation: https://www.archivematica.org/en/docs/archivematica-1.12/admin-manual/security/security/#cas-setup&lt;br /&gt;
&lt;br /&gt;
This feature has been sponsored by Simon Fraser University Archives. Thank you!&lt;br /&gt;
&lt;br /&gt;
=== OpenID Connect (OIDC) support for Archivematica and Storage Service ===&lt;br /&gt;
&lt;br /&gt;
'''Experimental! Please share your feedback.'''&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1053&lt;br /&gt;
* Instructions: https://www.archivematica.org/en/docs/archivematica-1.12/admin-manual/security/security/#oidc-setup&lt;br /&gt;
&lt;br /&gt;
OIDC support is a community contribution by Wellcome Collection. Thank you!&lt;br /&gt;
&lt;br /&gt;
== Changed ==&lt;br /&gt;
&lt;br /&gt;
=== Django 1.12 support ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/artefactual/archivematica/issues/1016&lt;br /&gt;
&lt;br /&gt;
Archivematica has been upgraded to Django 1.12 LTS. Our next target is Django 2.2 LTS!&lt;br /&gt;
&lt;br /&gt;
There are a couple of things to be aware of during the Archivematica upgrade in this respect:&lt;br /&gt;
* For a seamless experience for your users make sure that all active user sessions are deleted. We explain how here: [https://www.archivematica.org/en/docs/archivematica-1.12/admin-manual/maintenance/maintenance/#clear-user-sessions Maintenance &amp;gt; Clear user sessions].&lt;br /&gt;
* Django's User model now comes with a character limit of 150 characters. In Archivematica v1.11.x or older we had that limit set to 250 characters via a third-party app that we have now deleted. During the database migration (i.e. when running manage.py migrate), users may be required to fix the problem manually. See the [https://github.com/artefactual/archivematica/blob/f87d2f39acce9a59bf49f72fd7e57f9eced2dbe5/src/dashboard/src/main/migrations/0078_username_check.py#L1-L20 migration module documentation] for more details. We expect this to be highly unlikely to happen since the exception is only triggered when the 150 character limit in the username field is exceeded.&lt;br /&gt;
&lt;br /&gt;
=== Replace whitelist with allowlist ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1226&lt;br /&gt;
&lt;br /&gt;
We have changed &amp;quot;whitelist&amp;quot; to &amp;quot;allowlist&amp;quot; in an effort to use more inclusive language throughout Archivematica's code.&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
* Status doesn't revert to &amp;quot;Stored&amp;quot; after deletion requests are rejected: https://github.com/archivematica/Issues/issues/1273&lt;br /&gt;
* Cannot create a SIP from a Bag transfer in Appraisal tab: https://github.com/archivematica/Issues/issues/1267&lt;br /&gt;
* Transfer/AIP status not in sync when package is deleted within SS: https://github.com/archivematica/Issues/issues/1189&lt;br /&gt;
* Cannot rebuild backlog or AIP indices when location is encrypted: https://github.com/archivematica/Issues/issues/734&lt;br /&gt;
* Disk usage pages are not reporting accurate numbers: https://github.com/archivematica/Issues/issues/1281&lt;br /&gt;
&lt;br /&gt;
And more! Please see the 1.12 milestone in Github for all issues addressed in this release: https://github.com/archivematica/Issues/milestone/12&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes&amp;diff=13519</id>
		<title>Archivematica 1.12.0 and Storage Service 0.17.0 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes&amp;diff=13519"/>
		<updated>2020-09-09T15:47:32Z</updated>

		<summary type="html">&lt;p&gt;Sevein: Add note on username database migration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.12.0 and Storage Service 0.17.0&lt;br /&gt;
&lt;br /&gt;
'''Release date: still in progress!'''&lt;br /&gt;
&lt;br /&gt;
==Environments==&lt;br /&gt;
&lt;br /&gt;
Please see the [https://www.archivematica.org/en/docs/archivematica-1.12/admin-manual/installation-setup/installation/installation/#installation installation instructions].&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.11 and Storage Service 0.16 have been tested in the following environments:&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 18.04 64-bit Server Edition&lt;br /&gt;
* CentOS 7 64-bit&lt;br /&gt;
&lt;br /&gt;
For development purposes, most of our developers prefer to use Docker containers. These and all above environments are linked from the installation instructions above.&lt;br /&gt;
&lt;br /&gt;
Please note due to a dependency issue we have not provided RPMs for the 1.12 release. We plan to address this issue in a point release and provide RPMs then. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 10px 10px; border: 1px solid black; background-color: #F79086;&amp;quot;&amp;gt;Note: if you are upgrading from Archivematica 1.10.x or earlier, please be sure to clean up the completed transfers watched directory before upgrading. Instructions can be found on the [https://www.archivematica.org/en/docs/archivematica-1.11/admin-manual/installation-setup/upgrading/upgrading/#upgrade Upgrading] page in the documentation. &amp;lt;/div&amp;gt; &amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
=== Processing configuration selector ===&lt;br /&gt;
&lt;br /&gt;
This feature allows the user to choose a processing configuration at the time of transfer by way of a drop down in the &amp;quot;Start transfer&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1166&lt;br /&gt;
* Documentation: https://www.archivematica.org/en/docs/archivematica-1.12/user-manual/transfer/transfer.rst&lt;br /&gt;
&lt;br /&gt;
This feature has been sponsored by Simon Fraser University Archives. Thank you!&lt;br /&gt;
&lt;br /&gt;
=== Column selectors for the Backlog and Archival Storage tab ===&lt;br /&gt;
&lt;br /&gt;
Users can now choose the columns displayed while browsing the Backlog and Archival Storage tabs so they can see the information most relevant to them.&lt;br /&gt;
&lt;br /&gt;
* Issue (Archival Storage): https://github.com/archivematica/Issues/issues/1168&lt;br /&gt;
* Documentation (Archival Storage): https://www.archivematica.org/en/docs/archivematica-1.12/user-manual/archival-storage/archival-storage/#archival-storage&lt;br /&gt;
&lt;br /&gt;
* Issue (Backlog): https://github.com/archivematica/Issues/issues/1167&lt;br /&gt;
* Documentation (Backlog): https://www.archivematica.org/en/docs/archivematica-1.12/user-manual/backlog/backlog/#backlog&lt;br /&gt;
&lt;br /&gt;
These features have been sponsored by Simon Fraser University Archives. Thank you!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== AIP location column on Archival Storage tab ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1214&lt;br /&gt;
* Documentation: https://www.archivematica.org/en/docs/archivematica-1.12/user-manual/archival-storage/archival-storage/#archival-storage&lt;br /&gt;
&lt;br /&gt;
This feature has been sponsored by Picturae. Thank you!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Downloadable CSV from Archival Storage search ===&lt;br /&gt;
&lt;br /&gt;
Users can now download a CSV containing all entries in Archival Storage, containing these columns: AIP name, Size, UUID, Number of files, Date stored, Status, Encrypted, and Storage Location &lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1213&lt;br /&gt;
* Documentation: https://www.archivematica.org/en/docs/archivematica-1.12/user-manual/archival-storage/archival-storage/#archival-storage&lt;br /&gt;
&lt;br /&gt;
This feature has been sponsored by Picturae. Thank you!&lt;br /&gt;
&lt;br /&gt;
=== Central Authorization Service (CAS) for Archivematica and Storage Service ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1211&lt;br /&gt;
* Documentation: https://www.archivematica.org/en/docs/archivematica-1.12/admin-manual/security/security/#cas-setup&lt;br /&gt;
&lt;br /&gt;
This feature has been sponsored by Simon Fraser University Archives. Thank you!&lt;br /&gt;
&lt;br /&gt;
=== OpenID Connect (OIDC) support for Archivematica and Storage Service ===&lt;br /&gt;
&lt;br /&gt;
'''Experimental! Please share your feedback.'''&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1053&lt;br /&gt;
* Instructions: https://www.archivematica.org/en/docs/archivematica-1.12/admin-manual/security/security/#oidc-setup&lt;br /&gt;
&lt;br /&gt;
OIDC support is a community contribution by Wellcome Collection. Thank you!&lt;br /&gt;
&lt;br /&gt;
== Changed ==&lt;br /&gt;
&lt;br /&gt;
=== Django 1.12 support ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/artefactual/archivematica/issues/1016&lt;br /&gt;
&lt;br /&gt;
Archivematica has been upgraded to Django 1.12 LTS. Our next target is Django 2.2 LTS!&lt;br /&gt;
&lt;br /&gt;
There are a couple of things to be aware of during the Archivematica upgrade in this respect:&lt;br /&gt;
* For a seamless experience for your users make sure that all active user sessions are deleted. We explain how here: [https://www.archivematica.org/en/docs/archivematica-1.12/admin-manual/maintenance/maintenance/#clear-user-sessions Maintenance &amp;gt; Clear user sessions].&lt;br /&gt;
* Django's User model now comes with a character limit of 150 characters. In Archivematica v1.11.x or older we had that limit set to 250 characters via a third-party app that we have now deleted. During the database migration (i.e. when running manage.py migrate), users may be required to fix the problem manually. See the [https://github.com/artefactual/archivematica/blob/f87d2f39acce9a59bf49f72fd7e57f9eced2dbe5/src/dashboard/src/main/migrations/0078_username_check.py#L1-L20 migration module documentation] for more details. We expect this to be highly unlikely to happen since the exception is only triggered when the 150 character limit in the username field is exceeded.&lt;br /&gt;
&lt;br /&gt;
=== Replace whitelist with allowlist ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1226&lt;br /&gt;
&lt;br /&gt;
We have changed &amp;quot;whitelist&amp;quot; to &amp;quot;allowlist&amp;quot; in an effort to use more inclusive language throughout Archivematica's code.&lt;br /&gt;
&lt;br /&gt;
== Fixed ==&lt;br /&gt;
&lt;br /&gt;
* Status doesn't revert to &amp;quot;Stored&amp;quot; after deletion requests are rejected: https://github.com/archivematica/Issues/issues/1273&lt;br /&gt;
* Cannot create a SIP from a Bag transfer in Appraisal tab: https://github.com/archivematica/Issues/issues/1267&lt;br /&gt;
* Transfer/AIP status not in sync when package is deleted within SS: https://github.com/archivematica/Issues/issues/1189&lt;br /&gt;
* Cannot rebuild backlog or AIP indices when location is encrypted: https://github.com/archivematica/Issues/issues/734&lt;br /&gt;
* Disk usage pages are not reporting accurate numbers: https://github.com/archivematica/Issues/issues/1281&lt;br /&gt;
&lt;br /&gt;
And more! Please see the 1.12 milestone in Github for all issues addressed in this release: https://github.com/archivematica/Issues/milestone/12&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes&amp;diff=13509</id>
		<title>Archivematica 1.12.0 and Storage Service 0.17.0 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes&amp;diff=13509"/>
		<updated>2020-08-28T12:20:23Z</updated>

		<summary type="html">&lt;p&gt;Sevein: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.12.0 and Storage Service 0.17.0&lt;br /&gt;
&lt;br /&gt;
'''Work in progress!'''&lt;br /&gt;
&lt;br /&gt;
== Supported environments ==&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
=== OpenID Connect (OIDC) support for Archivematica and Storage Service ===&lt;br /&gt;
&lt;br /&gt;
'''Experimental! Please share your feedback.'''&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1053&lt;br /&gt;
* Instructions: https://www.archivematica.org/en/docs/archivematica-1.12/admin-manual/security/security/#oidc-setup&lt;br /&gt;
&lt;br /&gt;
=== Django 1.12 support ===&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/artefactual/archivematica/issues/1016&lt;br /&gt;
&lt;br /&gt;
Archivematica has finally upgraded to Django 1.12 LTS. Our next target is Django 2.2 LTS!&lt;br /&gt;
&lt;br /&gt;
For a seamless experience for you users make sure that all active user sessions are deleted. We explain how here: [https://www.archivematica.org/en/docs/archivematica-1.12/admin-manual/maintenance/maintenance/#clear-user-sessions Maintenance &amp;gt; Clear user sessions].&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes&amp;diff=13508</id>
		<title>Archivematica 1.12.0 and Storage Service 0.17.0 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes&amp;diff=13508"/>
		<updated>2020-08-06T13:14:04Z</updated>

		<summary type="html">&lt;p&gt;Sevein: Created page with &amp;quot;Home &amp;gt; Release Notes &amp;gt; Archivematica 1.12.0 and Storage Service 0.17.0  '''Work in progress!'''  == Supported environments ==  TBD.  == Added =...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.12.0 and Storage Service 0.17.0&lt;br /&gt;
&lt;br /&gt;
'''Work in progress!'''&lt;br /&gt;
&lt;br /&gt;
== Supported environments ==&lt;br /&gt;
&lt;br /&gt;
TBD.&lt;br /&gt;
&lt;br /&gt;
== Added ==&lt;br /&gt;
&lt;br /&gt;
=== OpenID Connect (OIDC) support for Archivematica and Storage Service ===&lt;br /&gt;
&lt;br /&gt;
'''Experimental! Please share your feedback.'''&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/1053&lt;br /&gt;
* Instructions: https://www.archivematica.org/en/docs/archivematica-1.12/admin-manual/security/security/#oidc-setup&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13507</id>
		<title>Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13507"/>
		<updated>2020-08-06T13:10:05Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Archivematica 1.x releases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; Release Notes&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
&lt;br /&gt;
Release notes are prepared by Artefactual for each release of Archivematica. Most releases also have a corresponding release of the Storage System, and may also include corresponding releases for various dependencies and libraries (i.e. FIDO, Automation Tools) - be sure to check the release notes for more information.&lt;br /&gt;
&lt;br /&gt;
Major releases are '''bolded''', minor releases are not.&lt;br /&gt;
&lt;br /&gt;
Features, enhancements, and bug fixes are often sponsored by members of the Archivematica community who are dedicated to funding Archivematica's ongoing development and maintenance. Code contributors are individuals who write Archivematica code and [https://github.com/artefactual/archivematica/blob/stable/1.6.x/CONTRIBUTING.md| contribute it] back to the project. Archivematica couldn't continue to grow without sponsors and contributors - thank you!&lt;br /&gt;
&lt;br /&gt;
Questions about a release or the release notes? Ask on the [https://groups.google.com/forum/#!forum/archivematica| Archivematica Google Group!]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 1.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_1.12.0_and_Storage_Service_0.17.0_release_notes|Archivematica 1.12.0 and Storage Service 0.17.0 Release Notes]] (work in progress)&lt;br /&gt;
* [[Archivematica_1.11.2_and_Storage_Service_0.16.1_release_notes|Archivematica 1.11.2 and Storage Service 0.16.1 Release Notes]] (Current release)&lt;br /&gt;
* [[Archivematica_1.11.1|Archivematica 1.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.11_and_Storage_Service_0.16_release_notes|'''Archivematica 1.11 and Storage Service 0.16 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.10.2|Archivematica 1.10.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10.1_release_notes|Archivematica 1.10.1 and Storage Service 0.15.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10_and_Storage_Service_0.15_release_notes|'''Archivematica 1.10 and Storage Service 0.15 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.9.3|Archivematica 1.9.3 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.9.2_release_notes|Archivematica 1.9.2 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9.1_and_Storage_Service_0.14.1_release_notes|Archivematica 1.9.1 and Storage Service 0.14.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9_and_Storage_Service_0.14_release_notes|'''Archivematica 1.9 and Storage Service 0.14 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.8.1_release_notes|Archivematica 1.8.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.8_and_Storage_Service_0.13_release_notes|'''Archivematica 1.8 and Storage Service 0.13 Release Notes''']]&lt;br /&gt;
*[[Archivematica 1.7.2_release_notes|Archivematica 1.7.2 Release Notes]] &lt;br /&gt;
*[[Storage Service 0.12 Release Notes|'''Storage Service 0.12 Release Notes''']] &lt;br /&gt;
*[[Archivematica 1.7.1_release_notes|Archivematica 1.7.1 Release Notes]]&lt;br /&gt;
*[[Storage Service 0.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.7_and_Storage_Service_0.11_release_notes|'''Archivematica 1.7 and Storage Service 0.11 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.6.1_release_notes|Archivematica 1.6.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.6_release_notes|'''Archivematica 1.6 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.5.1_Release_Notes|Archivematica 1.5.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.5_Release_Notes|'''Archivematica 1.5 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.4.1_Release_Notes|Archivematica 1.4.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.4_Release_Notes|'''Archivematica 1.4 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.3.2_Release_Notes|Archivematica 1.3.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3.1_Release_Notes|Archivematica 1.3.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3_Release_Notes|'''Archivematica 1.3 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.2_Release_Notes|'''Archivematica 1.2 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.1_Release_Notes|'''Archivematica 1.1 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.0_Release_Notes|'''Archivematica 1.0 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 0.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_0.10-beta_Release_Notes|'''Archivematica 0.10 Release Notes''']] &lt;br /&gt;
* [[Archivematica_0.9_Release_Notes|'''Archivematica 0.9 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.8 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.7.1_Release_Notes|Archivematica 0.7.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_0.7_Release_Notes|'''Archivematica 0.7 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.6 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
&lt;br /&gt;
* [[Major_release_notes|Template for major releases]]&lt;br /&gt;
* [[Minor_release_notes|Template for minor releases]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Storage_Service_API&amp;diff=13506</id>
		<title>Storage Service API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Storage_Service_API&amp;diff=13506"/>
		<updated>2020-07-30T17:57:02Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Download single file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Storage Service API&lt;br /&gt;
&lt;br /&gt;
The [[Storage Service]] API provides programmatic access to moving files around in storage areas that the Storage Service has access to.&lt;br /&gt;
&lt;br /&gt;
The API is written using [http://django-tastypie.readthedocs.io/en/latest/ TastyPie].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: TastyPie is less well supported than [http://www.django-rest-framework.org/ Django REST Framework], both in terms of docs &amp;amp; community. We should look at replacing TastyPie with DRF.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Endpoints require authentication with a username and API key.  This can be submitted as GET parameters (eg &amp;lt;code&amp;gt;?username=test&amp;amp;api_key=e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;) or as a header (eg &amp;lt;code&amp;gt;Authorization: ApiKey test:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== A note about browsing ==&lt;br /&gt;
&lt;br /&gt;
A detailed schema can be found for each of the resources by adding &amp;quot;schema&amp;quot; to the get all URL.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 $ curl -X GET -H&amp;quot;Authorization: ApiKey test:95141fc645ed97a95893f1f865d24687f89a27ad&amp;quot; 'http://localhost:8000/api/v2/location/schema/?format=json&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;allowed_detail_http_methods&amp;quot;: [&lt;br /&gt;
        &amp;quot;get&amp;quot;,&lt;br /&gt;
        &amp;quot;post&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;allowed_list_http_methods&amp;quot;: [&lt;br /&gt;
        &amp;quot;get&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;default_format&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
    &amp;quot;default_limit&amp;quot;: 20,&lt;br /&gt;
    &amp;quot;fields&amp;quot;: {&lt;br /&gt;
        &amp;quot;description&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unicode string data. Ex: \&amp;quot;Hello World\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: true,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;description&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;enabled&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: true,&lt;br /&gt;
            &amp;quot;default&amp;quot;: true,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;True if space can be accessed.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Enabled&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;path&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unicode string data. Ex: \&amp;quot;Hello World\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: true,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;path&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;pipeline&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Many related resources. Can be either a list of URIs or list of individually nested resource data.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;related_schema&amp;quot;: &amp;quot;/api/v2/pipeline/schema/&amp;quot;,&lt;br /&gt;
            &amp;quot;related_type&amp;quot;: &amp;quot;to_many&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;related&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;pipeline&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;purpose&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Purpose of the space.  Eg. AIP storage, Transfer source&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Purpose&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;quota&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: null,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Size, in bytes (optional)&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: true,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Quota&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relative_path&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Path to location, relative to the storage space's path.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Relative Path&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;resource_uri&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unicode string data. Ex: \&amp;quot;Hello World\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: true,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;resource uri&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;space&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;A single related resource. Can be either a URI or set of nested resource data.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;related_schema&amp;quot;: &amp;quot;/api/v2/space/schema/&amp;quot;,&lt;br /&gt;
            &amp;quot;related_type&amp;quot;: &amp;quot;to_one&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;related&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;space&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;used&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Amount used, in bytes.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Used&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;uuid&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: true,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unique identifier&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: true,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;uuid&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;filtering&amp;quot;: {&lt;br /&gt;
        &amp;quot;pipeline&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;purpose&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;quota&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;relative_path&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;space&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;used&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;uuid&amp;quot;: 1&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This schema, among other things, describes the fields in the resource (including the schema URI of related resource fields) and the fields that allow filtering. Valid filtering values are: Django ORM filters (e.g. startswith, exact, lte, etc.) or 1 or 2. If a filtering field is set to 2 it can be filtered over the related resource fields. For example, the locations could be filtered by their pipeline UUID setting it in a request parameter formatted with two underscore chars: &amp;lt;code&amp;gt;/api/v2/location/?pipeline__uuid=&amp;lt;uuid&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more info on how to interact with the API see:&lt;br /&gt;
&lt;br /&gt;
http://django-tastypie.readthedocs.io/en/v0.13.1/interacting.html&lt;br /&gt;
&lt;br /&gt;
== Pipeline ==&lt;br /&gt;
&lt;br /&gt;
=== Get all pipelines ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;: Description of the pipeline&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the pipeline&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;meta&amp;lt;/code&amp;gt;: Metadata on the response: number of hits, pagination information&lt;br /&gt;
** &amp;lt;code&amp;gt;objects&amp;lt;/code&amp;gt;: List of pipelines. See [[#Get pipeline details]] for format&lt;br /&gt;
&lt;br /&gt;
Returns information about all the pipelines in the system.  Can be [http://django-tastypie.readthedocs.io/en/latest/resources.html#basic-filtering filtered] by the description or uuid. Disabled pipelines are not returned.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 $ curl -X GET -H&amp;quot;Authorization: ApiKey test:95141fc645ed97a95893f1f865d24687f89a27ad&amp;quot; 'http://localhost:8000/api/v2/pipeline/?description__startswith=Archivematica' | python -m json.tool&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;meta&amp;quot;: {&lt;br /&gt;
         &amp;quot;limit&amp;quot;: 20,&lt;br /&gt;
         &amp;quot;next&amp;quot;: null,&lt;br /&gt;
         &amp;quot;offset&amp;quot;: 0,&lt;br /&gt;
         &amp;quot;previous&amp;quot;: null,&lt;br /&gt;
         &amp;quot;total_count&amp;quot;: 1&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;objects&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;description&amp;quot;: &amp;quot;Archivematica on alouette&amp;quot;,&lt;br /&gt;
             &amp;quot;remote_name&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
             &amp;quot;resource_uri&amp;quot;: &amp;quot;/api/v2/pipeline/dd354557-9e6e-4918-9fe3-a65b00ecb1af/&amp;quot;,&lt;br /&gt;
             &amp;quot;uuid&amp;quot;: &amp;quot;dd354557-9e6e-4918-9fe3-a65b00ecb1af&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Create new pipeline ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** Should contain fields for a new pipeline: &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;api_key&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;api_username&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;create_default_locations&amp;lt;/code&amp;gt;: If True, will associated default [[Storage Service#Locations | Locations]] with the newly created pipeline&lt;br /&gt;
** &amp;lt;code&amp;gt;shared_path&amp;lt;/code&amp;gt;: If default locations are created, create the [[Storage Service#Currently Processing | processing]] location at this path in the local filesystem&lt;br /&gt;
** &amp;lt;code&amp;gt;remote_name&amp;lt;/code&amp;gt;: URI of the pipeline.&lt;br /&gt;
*** Before v0.11.0: If &amp;lt;code&amp;gt;create_default_locations&amp;lt;/code&amp;gt; is set, SS will try to guess the value using the &amp;lt;code&amp;gt;REMOTE_ADDR&amp;lt;/code&amp;gt; header.&lt;br /&gt;
*** In v0.11.0 or newer: If not provided, SS will try to guess the value using the &amp;lt;code&amp;gt;REMOTE_ADDR&amp;lt;/code&amp;gt; header.&lt;br /&gt;
* '''Response''': JSON with data for the pipeline&lt;br /&gt;
&lt;br /&gt;
If the 'Pipelines disabled on creation' setting is set, the pipeline will be disabled by default, and will not respond to queries.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 $ curl -X POST \&lt;br /&gt;
    -H&amp;quot;Authorization: ApiKey test:95141fc645ed97a95893f1f865d24687f89a27ad&amp;quot; \&lt;br /&gt;
    -H&amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
    -d'{&amp;quot;uuid&amp;quot;: &amp;quot;99354557-9e6e-4918-9fe3-a65b00ecb199&amp;quot;, \&lt;br /&gt;
        &amp;quot;description&amp;quot;: &amp;quot;Test pipeline&amp;quot;, &amp;quot;create_default_locations&amp;quot;: true, \&lt;br /&gt;
        &amp;quot;api_username&amp;quot;: &amp;quot;demo&amp;quot;, \&lt;br /&gt;
        &amp;quot;api_key&amp;quot;: &amp;quot;03ecb307f5b8012f4771d245d534830378a87259&amp;quot;}' \&lt;br /&gt;
     'http://192.168.1.42:8000/api/v2/pipeline/'&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;create_default_locations&amp;quot;: true,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Test pipeline&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_name&amp;quot;: &amp;quot;192.168.1.42&amp;quot;,&lt;br /&gt;
    &amp;quot;resource_uri&amp;quot;: &amp;quot;/api/v2/pipeline/99354557-9e6e-4918-9fe3-a65b00ecb199/&amp;quot;,&lt;br /&gt;
    &amp;quot;uuid&amp;quot;: &amp;quot;99354557-9e6e-4918-9fe3-a65b00ecb199&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Get pipeline details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;: Pipeline description&lt;br /&gt;
** &amp;lt;code&amp;gt;remote_name&amp;lt;/code&amp;gt;: IP or hostname of the pipeline. For use in API calls&lt;br /&gt;
** &amp;lt;code&amp;gt;resource_uri&amp;lt;/code&amp;gt;: URI for this pipeline in the API&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the pipeline&lt;br /&gt;
&lt;br /&gt;
== Space ==&lt;br /&gt;
&lt;br /&gt;
=== Get all spaces ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/space/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;access_protocol&amp;lt;/code&amp;gt;: Protocol that the [[Storage Service#Space | Space]] uses. Must be searched based on the database code.&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Space's path&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Maximum size in bytes. Can use greater than (size__gt=1024), less than (size__lt=1024), and other Django [https://docs.djangoproject.com/en/1.8/ref/models/querysets/#field-lookups field lookups].&lt;br /&gt;
** &amp;lt;code&amp;gt;used&amp;lt;/code&amp;gt;: Bytes stored in this space. Can use greater than (size__gt=1024), less than (size__lt=1024), and other Django [https://docs.djangoproject.com/en/1.8/ref/models/querysets/#field-lookups field lookups].&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the Space&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;meta&amp;lt;/code&amp;gt;: Metadata on the response: number of hits, pagination information&lt;br /&gt;
** &amp;lt;code&amp;gt;objects&amp;lt;/code&amp;gt;: List of spaces. See [[#Get space details]] for format&lt;br /&gt;
&lt;br /&gt;
Returns information about all the spaces in the system.  Can be [http://django-tastypie.readthedocs.io/en/latest/resources.html#basic-filtering filtered] by several fields: access protocol, path, size, amount used, UUID and verified status. Disabled spaces are not returned.&lt;br /&gt;
&lt;br /&gt;
=== Get space details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/space/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;access_protocol&amp;lt;/code&amp;gt;: Database code for the access protocol&lt;br /&gt;
** &amp;lt;code&amp;gt;last_verified&amp;lt;/code&amp;gt;: Date of last verification. This is a stub feature&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Space's path&lt;br /&gt;
** &amp;lt;code&amp;gt;resource_uri&amp;lt;/code&amp;gt;: URI to the resource in the API&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Maximum size of the space in bytes.&lt;br /&gt;
** &amp;lt;code&amp;gt;used&amp;lt;/code&amp;gt;: Bytes stored in this space. &lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the space&lt;br /&gt;
** &amp;lt;code&amp;gt;verified&amp;lt;/code&amp;gt;: If the space is verified. This is a stub feature&lt;br /&gt;
** Other space-specific fields&lt;br /&gt;
&lt;br /&gt;
=== Browse space path ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/space/&amp;lt;UUID&amp;gt;/browse/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path inside the Space to look&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;entries&amp;lt;/code&amp;gt;: List of entries at path, files or directories&lt;br /&gt;
** &amp;lt;code&amp;gt;directories&amp;lt;/code&amp;gt;: List of directories in path. Subset of `entries`.&lt;br /&gt;
&lt;br /&gt;
=== Create space ===&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/archivematica/Issues/issues/36 Issue 36].&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/space&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** Should contain fields for a new space: See the [https://www.archivematica.org/en/docs/storage-service-0.11/administrators/#id2 Storage Service Documentation] or [https://wiki.archivematica.org/Storage_Service#Space Space] for fields relevant to each type of space. Basic fields for a local file system space are listed below. &lt;br /&gt;
** &amp;lt;code&amp;gt;access_protocol&amp;lt;/code&amp;gt;: this defines the type of space&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Absolute path to the Space on the local filesystem&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;:  (Optional) Maximum size allowed for this space. Set to 0 or leave blank for unlimited.&lt;br /&gt;
&lt;br /&gt;
Example (to create an S3 space):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl \&lt;br /&gt;
    -X POST \&lt;br /&gt;
    -d @payload.json \&lt;br /&gt;
    -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
    -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
        http://127.0.0.1:62081/api/v2/space/&lt;br /&gt;
&lt;br /&gt;
Where payload.json contains&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;access_protocol&amp;quot;: &amp;quot;S3&amp;quot;,&lt;br /&gt;
    &amp;quot;path&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;staging_path&amp;quot;: &amp;quot;/&amp;quot;,&lt;br /&gt;
    &amp;quot;endpoint_url&amp;quot;: &amp;quot;http://127.0.0.1:12345&amp;quot;,&lt;br /&gt;
    &amp;quot;access_key_id&amp;quot;: &amp;quot;_Cah4cae1_&amp;quot;,&lt;br /&gt;
    &amp;quot;secret_access_key&amp;quot;: &amp;quot;_Thu6Ahqu_&amp;quot;,&lt;br /&gt;
    &amp;quot;region&amp;quot;: &amp;quot;us-west-2&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Version 1: Returns paths as strings&lt;br /&gt;
Version 2: Returns all paths base64 encoded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
&lt;br /&gt;
=== Get all locations ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Create new location ===&lt;br /&gt;
&lt;br /&gt;
Added in v0.12 - see [https://github.com/artefactual/archivematica-storage-service/issues/367 issue 367] and [https://github.com/archivematica/Issues/issues/37 issue 37].&lt;br /&gt;
&lt;br /&gt;
This endpoint creates a location in the storage service, but it doesn't actually create the directory that the location points to.  &lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: URI of the pipeline.&lt;br /&gt;
** &amp;lt;code&amp;gt;space&amp;lt;/code&amp;gt;: URI of the space.&lt;br /&gt;
** &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;: If 'true' this location will be the default for it's purpose. &lt;br /&gt;
** &amp;lt;code&amp;gt;purpose&amp;lt;/code&amp;gt;: (below is a list of possible values)&lt;br /&gt;
*** &amp;lt;code&amp;gt;AR&amp;lt;/code&amp;gt; (AIP_RECOVERY)&lt;br /&gt;
*** &amp;lt;code&amp;gt;AS&amp;lt;/code&amp;gt; (AIP_STORAGE)&lt;br /&gt;
*** &amp;lt;code&amp;gt;CP&amp;lt;/code&amp;gt; (CURRENTLY_PROCESSING)&lt;br /&gt;
*** &amp;lt;code&amp;gt;DS&amp;lt;/code&amp;gt; (DIP_STORAGE)&lt;br /&gt;
*** &amp;lt;code&amp;gt;SD&amp;lt;/code&amp;gt; (SWORD_DEPOSIT)&lt;br /&gt;
*** &amp;lt;code&amp;gt;SS&amp;lt;/code&amp;gt; (STORAGE_SERVICE_INTERNAL)&lt;br /&gt;
*** &amp;lt;code&amp;gt;BL&amp;lt;/code&amp;gt; (BACKLOG)&lt;br /&gt;
*** &amp;lt;code&amp;gt;TS&amp;lt;/code&amp;gt; (TRANSFER_SOURCE)&lt;br /&gt;
*** &amp;lt;code&amp;gt;RP&amp;lt;/code&amp;gt; (REPLICATOR)&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative to the space's path.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -s -d '{&lt;br /&gt;
    &amp;quot;pipeline&amp;quot;: [&amp;quot;/api/v2/pipeline/90707555-244f-47af-8271-66496a6a965b/&amp;quot;],&lt;br /&gt;
    &amp;quot;purpose&amp;quot;: &amp;quot;TS&amp;quot;,&lt;br /&gt;
    &amp;quot;relative_path&amp;quot;: &amp;quot;foo/bar&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;foobar&amp;quot;,&lt;br /&gt;
    &amp;quot;space&amp;quot;: &amp;quot;/api/v2/space/141593ff-2a27-44a1-9de1-917573fa0f4a/&amp;quot;&lt;br /&gt;
}' \&lt;br /&gt;
    -X POST \&lt;br /&gt;
    -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
    -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
        &amp;quot;http://127.0.0.1:62081/api/v2/location/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Get location details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Move files to this location ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_location&amp;lt;/code&amp;gt;: URI of the Location the files should be moved from&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: URI of the [[Storage Service#Pipeline | pipeline]]. Both Locations must be associated with this pipeline.&lt;br /&gt;
** &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;: List of dicts containing &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;destination&amp;lt;/code&amp;gt;.  The source and destination are paths relative to their Location of the files to be moved.&lt;br /&gt;
&lt;br /&gt;
Intended for use with creating Transfers, SIPs, etc and other cases where files need to be moved but not tracked by the storage service.&lt;br /&gt;
&lt;br /&gt;
=== Browse location path ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/browse/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path inside the Location to look&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;entries&amp;lt;/code&amp;gt;: List of entries in `path`, files or directories&lt;br /&gt;
** &amp;lt;code&amp;gt;directories&amp;lt;/code&amp;gt;: List of directories in `path`. Subset of `entries`.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Version 1: Returns paths as strings&lt;br /&gt;
Version 2: Returns all paths base64 encoded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SWORD collection ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/sword/collection/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
&lt;br /&gt;
See [[Sword API]] for details&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Package ==&lt;br /&gt;
&lt;br /&gt;
=== Get all packages ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Create new package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON. Fields for a new package:&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the new package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_location&amp;lt;/code&amp;gt;: URI of the Location where the package is currently&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_path&amp;lt;/code&amp;gt;: Path to the package, relative to the origin_location&lt;br /&gt;
** &amp;lt;code&amp;gt;current_location&amp;lt;/code&amp;gt;: URI of the Location where the package should be stored&lt;br /&gt;
** &amp;lt;code&amp;gt;current_path&amp;lt;/code&amp;gt;: Path where the package should be stored, relative to the current_location&lt;br /&gt;
** &amp;lt;code&amp;gt;package_type&amp;lt;/code&amp;gt;: Type of package this is. One of: &amp;lt;code&amp;gt;AIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AIC&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transfer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;deposit&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Size of the package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_pipeline&amp;lt;/code&amp;gt;: URI of the pipeline the package is from&lt;br /&gt;
** &amp;lt;code&amp;gt;related_package_uuid&amp;lt;/code&amp;gt;: UUID of a package that is related to this one. E.g. UUID of a DIP when storing an AIP&lt;br /&gt;
&lt;br /&gt;
Creates a database entry tracking the package (AIP, transfer, etc).  If the package is an AIP, DIP or AIC and the current_location is an AIP or DIP storage location it also moves the files from the source to destination location.  If the package is a Transfer and the current_location is transfer backlog, it is also moved.&lt;br /&gt;
&lt;br /&gt;
This is handled through the modified &amp;lt;code&amp;gt;obj_create&amp;lt;/code&amp;gt; function, which calls &amp;lt;code&amp;gt;Package.store_aip&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Package.backlog_transfer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Get package details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Update package contents ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': PUT&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest&amp;lt;/code&amp;gt;: Flag to mark that this is reingest. Reduces chance to accidentally modify an AIP.&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the existing package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_location&amp;lt;/code&amp;gt;: URI of the Location where the package is currently&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_path&amp;lt;/code&amp;gt;: Path to the package, relative to the origin_location&lt;br /&gt;
** &amp;lt;code&amp;gt;current_location&amp;lt;/code&amp;gt;: URI of the Location where the package should be stored&lt;br /&gt;
** &amp;lt;code&amp;gt;current_path&amp;lt;/code&amp;gt;: Path where the package should be stored, relative to the current_location&lt;br /&gt;
** &amp;lt;code&amp;gt;package_type&amp;lt;/code&amp;gt;: Type of package this is. One of: &amp;lt;code&amp;gt;AIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AIC&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Size of the package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_pipeline&amp;lt;/code&amp;gt;: URI of the pipeline the package is from.  This must be the same pipeline reingest was started on (tracked through &amp;lt;code&amp;gt;Package.misc_attributes.reingest_pipeline&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Updates the contents of a package during reingest.  If the package is an AIP or AIC, currently stored in an AIP storage location, and the 'reingest' parameter is set, it will call &amp;lt;code&amp;gt;Package.finish_reingest&amp;lt;/code&amp;gt; and merge the new AIP with the existing one.&lt;br /&gt;
&lt;br /&gt;
This is implemented using a modified &amp;lt;code&amp;gt;obj_update&amp;lt;/code&amp;gt; which calls &amp;lt;code&amp;gt;obj_update_hook&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Update package metadata ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': PATCH&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest&amp;lt;/code&amp;gt;: Pipeline UUID or None.&lt;br /&gt;
&lt;br /&gt;
Used to update metadata stored in the database for the package.  Currently, this is used to update the reingest status.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: Currently, this always sets Package.misc_attributes.reingest to None, regardless of what value was actually passed in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is implemented using a modified &amp;lt;code&amp;gt;obj_update&amp;lt;/code&amp;gt; which calls &amp;lt;code&amp;gt;obj_update_hook&amp;lt;/code&amp;gt;.  &amp;lt;code&amp;gt;update_in_place&amp;lt;/code&amp;gt; also helps.&lt;br /&gt;
&lt;br /&gt;
=== Delete package request ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/delete_aip/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;event_reason&amp;lt;/code&amp;gt;: Reason for deleting the AIP&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: UUID of the pipeline the delete request is from&lt;br /&gt;
** &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt;: User ID requesting the deletion. This is the ID of the user on the pipeline, and must be an integer greater than 0.&lt;br /&gt;
** &amp;lt;code&amp;gt;user_email&amp;lt;/code&amp;gt;:  Email of the user requesting the deletion.&lt;br /&gt;
&lt;br /&gt;
=== Recover AIP request ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/recover_aip/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;event_reason&amp;lt;/code&amp;gt;: Reason for recovering the AIP&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: URI of the pipeline the recovery request is from&lt;br /&gt;
** &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt;: User ID requesting the recovery. This is the ID of the user on the pipeline, and must be an integer greater than 0.&lt;br /&gt;
** &amp;lt;code&amp;gt;user_email&amp;lt;/code&amp;gt;:  Email of the user requesting the recovery.&lt;br /&gt;
&lt;br /&gt;
=== Download single file ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/extract_file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, HEAD&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path_to_file&amp;lt;/code&amp;gt;: Path to the file to download, relative to the location where is stored down to the lowest level.&amp;lt;br /&amp;gt;E.g.: &amp;lt;code&amp;gt;test01-36d4efb7-83ba-46bf-a171-8c7b965d9dcb/data/objects/MARBLES.TGA&amp;lt;/code&amp;gt;, where &amp;lt;code&amp;gt;test01-36d4efb7-83ba-46bf-a171-8c7b965d9dcb&amp;lt;/code&amp;gt; contains both the UUID of the package and the name of the transfer which you can find using [[#Get package details | Get package details]] (see &amp;lt;code&amp;gt;current_path&amp;lt;/code&amp;gt; attribute).&lt;br /&gt;
* '''Response''': Stream of the requested file&lt;br /&gt;
&lt;br /&gt;
Returns a single file from the Package.  If the package is compressed, it downloads the whole AIP and extracts it.&lt;br /&gt;
&lt;br /&gt;
This responds to HEAD because AtoM uses HEAD to check for the existence of a file. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: HEAD and GET should not perform the same functions. HEAD should be updated to not return the file, and to only check for existence.  Currently, the storage service has no way to check if a file exists except by downloading and extracting this AIP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the package is in [[Storage Service#Arkivum | Arkivum]], the package may not actually be available.  This endpoint checks if the package is locally available. If it is, it is returned as normal. If not, it returns &amp;lt;code&amp;gt;202&amp;lt;/code&amp;gt; and emails the administrator about the attempted access.&lt;br /&gt;
&lt;br /&gt;
=== Download package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/download/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/download/&amp;lt;chunk number&amp;gt;/&amp;lt;/code&amp;gt; (for [[Storage Service#LOCKSS-o-matic | LOCKSS]] harvesting)&lt;br /&gt;
* '''Verb''': GET, HEAD&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': Stream of the package&lt;br /&gt;
&lt;br /&gt;
Returns the entire package as a single file.  If the AIP is uncompressed, create one file by using `tar`.&lt;br /&gt;
&lt;br /&gt;
If the download URL has a chunk number, it will attempt to serve the LOCKSS chunk specified for that package. If the package is not in LOCKSS, it will return the the whole package.&lt;br /&gt;
&lt;br /&gt;
This responds to HEAD because AtoM uses HEAD to check for the existence of a file. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: HEAD and GET should not perform the same functions. HEAD should be updated to not return the file, and to only check for existence.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the package is in [[Storage Service#Arkivum | Arkivum]], the package may not actually be available.  This endpoint checks if the package is locally available. If it is, it is returned as normal. If not, it returns &amp;lt;code&amp;gt;202&amp;lt;/code&amp;gt; and emails the administrator about the attempted access.&lt;br /&gt;
&lt;br /&gt;
=== Get pointer file ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/pointer_file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': Stream of the pointer file.&lt;br /&gt;
&lt;br /&gt;
=== Check fixity ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/check_fixity/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;force_local&amp;lt;/code&amp;gt;: If true, download and run fixity on the AIP locally, instead of using the Space-provided fixity if available.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True if the verification succeeded, False if the verification failed, None if the scan could not start&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: Human-readable string explaining the report; it will be empty for successful scans.&lt;br /&gt;
** &amp;lt;code&amp;gt;failures&amp;lt;/code&amp;gt;: List of 0 or more errors&lt;br /&gt;
** &amp;lt;code&amp;gt;timestamp&amp;lt;/code&amp;gt;: ISO-formated string with the datetime of the last fixity check. If the check was performed by an external system, this will be provided by that system. If not provided,or on error, it will be None.&lt;br /&gt;
&lt;br /&gt;
=== AIP storage callback request ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/send_callback/post_store/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
Request to call any Callbacks configured to run post-storage for this AIP.&lt;br /&gt;
&lt;br /&gt;
In SS0.15 and above, this endpoint has been extended to support callbacks for AIP, AIC and DIP stored events.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Event''': Post-store AIP, AIC, or DIP  &lt;br /&gt;
* '''URI''': &amp;lt;code&amp;gt;https://scope.com/api/v1/dip/&amp;lt;package_uuid&amp;gt;/stored&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Method''': POST  &lt;br /&gt;
* '''Headers''':  &lt;br /&gt;
* - Authorization -&amp;gt; &amp;lt;code&amp;gt;Token &amp;lt;token&amp;gt;&amp;lt;/code&amp;gt;  &lt;br /&gt;
* - Origin -&amp;gt; &amp;lt;code&amp;gt;https://ss.com&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Expected Status''': 202  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: This only works on locally available AIPs (AIPs stored in Spaces that are available via a UNIX filesystem layer).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Get file information for package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/contents/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True&lt;br /&gt;
** &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;: UUID of the package&lt;br /&gt;
** &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;: List of dictionaries with file information. Each dictionary has:&lt;br /&gt;
*** &amp;lt;code&amp;gt;source_id&amp;lt;/code&amp;gt;: UUID of the file to index&lt;br /&gt;
*** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
*** &amp;lt;code&amp;gt;source_package&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
*** &amp;lt;code&amp;gt;checksum&amp;lt;/code&amp;gt;: Checksum of the file, or an empty string&lt;br /&gt;
*** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number, or an empty string&lt;br /&gt;
*** &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;: UUID of the Archivematica dashboard this is from&lt;br /&gt;
&lt;br /&gt;
Returns metadata about every file within the package.&lt;br /&gt;
&lt;br /&gt;
=== Update file information for package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/contents/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': PUT&lt;br /&gt;
* '''Parameters''': JSON list of dictionaries with information on the files to be added. Each dict must have the following attributes:&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
** &amp;lt;code&amp;gt;fileuuid&amp;lt;/code&amp;gt;: UUID of the file to index&lt;br /&gt;
** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number, or an empty string&lt;br /&gt;
** &amp;lt;code&amp;gt;sipuuid&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
** &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;: UUID of the Archivematica dashboard this is from&lt;br /&gt;
&lt;br /&gt;
Adds a set of files to a package.&lt;br /&gt;
&lt;br /&gt;
=== Delete file information for package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/contents/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
&lt;br /&gt;
Removes all file records associated with this package.&lt;br /&gt;
&lt;br /&gt;
=== Query file information on packages ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/metadata/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
* '''Parameters''': Query string parameters.  Must have at least one, but not all are required&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
** &amp;lt;code&amp;gt;fileuuid&amp;lt;/code&amp;gt;: UUID of the file&lt;br /&gt;
** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number&lt;br /&gt;
** &amp;lt;code&amp;gt;sipuuid&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
* '''Response''': JSON. List of dicts with file information about the files that match the query.&lt;br /&gt;
** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number, or an empty string&lt;br /&gt;
** &amp;lt;code&amp;gt;file_extension&amp;lt;/code&amp;gt;: File extension&lt;br /&gt;
** &amp;lt;code&amp;gt;filename&amp;lt;/code&amp;gt;: Name of the file, sans path.&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
** &amp;lt;code&amp;gt;fileuuid&amp;lt;/code&amp;gt;: UUID of the file to index&lt;br /&gt;
** &amp;lt;code&amp;gt;sipuuid&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
** &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;: UUID of the Archivematica dashboard this is from&lt;br /&gt;
&lt;br /&gt;
=== Reingest AIP ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/reingest/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: UUID of the pipeline to reingest on&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_type&amp;lt;/code&amp;gt;: Type of reingest to start. One of &amp;lt;code&amp;gt;METADATA_ONLY&amp;lt;/code&amp;gt; (metadata-only reingest), &amp;lt;code&amp;gt;OBJECTS&amp;lt;/code&amp;gt; (partial reingest), &amp;lt;code&amp;gt;FULL&amp;lt;/code&amp;gt; (full reingest)&lt;br /&gt;
** &amp;lt;code&amp;gt;processing_config&amp;lt;/code&amp;gt;: Optional. Name of the processing configuration to use on full reingest&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Move Package ===&lt;br /&gt;
&lt;br /&gt;
This endpoint is introduced in v0.14.&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/move/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;location_uuid&amp;lt;/code&amp;gt;: UUID of the location to send the package. The location must have the same Purpose as the package's current location (e.g. AIP Storage, DIP Storage).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 $ curl -d 'location_uuid=7c5c48d4-50db-4018-b4b1-7ed29d1ef9d3	' -H&amp;quot;Authorization: ApiKey test:4525fd5272275caeac04a28447698c51&amp;quot; 'http://mysite.archivematica.org:8000/api/v2/file/8b8aa1a2-79c9-490e-b630-28f90bb7e654/move/'&lt;br /&gt;
&lt;br /&gt;
=== SWORD endpoints ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/sword/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/sword/media/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/sword/state/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[Sword API]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Storage_Service_API&amp;diff=13505</id>
		<title>Storage Service API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Storage_Service_API&amp;diff=13505"/>
		<updated>2020-07-30T17:56:05Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Download single file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Storage Service API&lt;br /&gt;
&lt;br /&gt;
The [[Storage Service]] API provides programmatic access to moving files around in storage areas that the Storage Service has access to.&lt;br /&gt;
&lt;br /&gt;
The API is written using [http://django-tastypie.readthedocs.io/en/latest/ TastyPie].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: TastyPie is less well supported than [http://www.django-rest-framework.org/ Django REST Framework], both in terms of docs &amp;amp; community. We should look at replacing TastyPie with DRF.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Endpoints require authentication with a username and API key.  This can be submitted as GET parameters (eg &amp;lt;code&amp;gt;?username=test&amp;amp;api_key=e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;) or as a header (eg &amp;lt;code&amp;gt;Authorization: ApiKey test:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== A note about browsing ==&lt;br /&gt;
&lt;br /&gt;
A detailed schema can be found for each of the resources by adding &amp;quot;schema&amp;quot; to the get all URL.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 $ curl -X GET -H&amp;quot;Authorization: ApiKey test:95141fc645ed97a95893f1f865d24687f89a27ad&amp;quot; 'http://localhost:8000/api/v2/location/schema/?format=json&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;allowed_detail_http_methods&amp;quot;: [&lt;br /&gt;
        &amp;quot;get&amp;quot;,&lt;br /&gt;
        &amp;quot;post&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;allowed_list_http_methods&amp;quot;: [&lt;br /&gt;
        &amp;quot;get&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;default_format&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
    &amp;quot;default_limit&amp;quot;: 20,&lt;br /&gt;
    &amp;quot;fields&amp;quot;: {&lt;br /&gt;
        &amp;quot;description&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unicode string data. Ex: \&amp;quot;Hello World\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: true,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;description&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;enabled&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: true,&lt;br /&gt;
            &amp;quot;default&amp;quot;: true,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;True if space can be accessed.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Enabled&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;path&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unicode string data. Ex: \&amp;quot;Hello World\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: true,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;path&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;pipeline&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Many related resources. Can be either a list of URIs or list of individually nested resource data.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;related_schema&amp;quot;: &amp;quot;/api/v2/pipeline/schema/&amp;quot;,&lt;br /&gt;
            &amp;quot;related_type&amp;quot;: &amp;quot;to_many&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;related&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;pipeline&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;purpose&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Purpose of the space.  Eg. AIP storage, Transfer source&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Purpose&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;quota&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: null,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Size, in bytes (optional)&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: true,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Quota&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relative_path&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Path to location, relative to the storage space's path.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Relative Path&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;resource_uri&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unicode string data. Ex: \&amp;quot;Hello World\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: true,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;resource uri&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;space&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;A single related resource. Can be either a URI or set of nested resource data.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;related_schema&amp;quot;: &amp;quot;/api/v2/space/schema/&amp;quot;,&lt;br /&gt;
            &amp;quot;related_type&amp;quot;: &amp;quot;to_one&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;related&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;space&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;used&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Amount used, in bytes.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Used&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;uuid&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: true,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unique identifier&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: true,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;uuid&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;filtering&amp;quot;: {&lt;br /&gt;
        &amp;quot;pipeline&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;purpose&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;quota&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;relative_path&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;space&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;used&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;uuid&amp;quot;: 1&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This schema, among other things, describes the fields in the resource (including the schema URI of related resource fields) and the fields that allow filtering. Valid filtering values are: Django ORM filters (e.g. startswith, exact, lte, etc.) or 1 or 2. If a filtering field is set to 2 it can be filtered over the related resource fields. For example, the locations could be filtered by their pipeline UUID setting it in a request parameter formatted with two underscore chars: &amp;lt;code&amp;gt;/api/v2/location/?pipeline__uuid=&amp;lt;uuid&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more info on how to interact with the API see:&lt;br /&gt;
&lt;br /&gt;
http://django-tastypie.readthedocs.io/en/v0.13.1/interacting.html&lt;br /&gt;
&lt;br /&gt;
== Pipeline ==&lt;br /&gt;
&lt;br /&gt;
=== Get all pipelines ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;: Description of the pipeline&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the pipeline&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;meta&amp;lt;/code&amp;gt;: Metadata on the response: number of hits, pagination information&lt;br /&gt;
** &amp;lt;code&amp;gt;objects&amp;lt;/code&amp;gt;: List of pipelines. See [[#Get pipeline details]] for format&lt;br /&gt;
&lt;br /&gt;
Returns information about all the pipelines in the system.  Can be [http://django-tastypie.readthedocs.io/en/latest/resources.html#basic-filtering filtered] by the description or uuid. Disabled pipelines are not returned.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 $ curl -X GET -H&amp;quot;Authorization: ApiKey test:95141fc645ed97a95893f1f865d24687f89a27ad&amp;quot; 'http://localhost:8000/api/v2/pipeline/?description__startswith=Archivematica' | python -m json.tool&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;meta&amp;quot;: {&lt;br /&gt;
         &amp;quot;limit&amp;quot;: 20,&lt;br /&gt;
         &amp;quot;next&amp;quot;: null,&lt;br /&gt;
         &amp;quot;offset&amp;quot;: 0,&lt;br /&gt;
         &amp;quot;previous&amp;quot;: null,&lt;br /&gt;
         &amp;quot;total_count&amp;quot;: 1&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;objects&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;description&amp;quot;: &amp;quot;Archivematica on alouette&amp;quot;,&lt;br /&gt;
             &amp;quot;remote_name&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
             &amp;quot;resource_uri&amp;quot;: &amp;quot;/api/v2/pipeline/dd354557-9e6e-4918-9fe3-a65b00ecb1af/&amp;quot;,&lt;br /&gt;
             &amp;quot;uuid&amp;quot;: &amp;quot;dd354557-9e6e-4918-9fe3-a65b00ecb1af&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Create new pipeline ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** Should contain fields for a new pipeline: &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;api_key&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;api_username&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;create_default_locations&amp;lt;/code&amp;gt;: If True, will associated default [[Storage Service#Locations | Locations]] with the newly created pipeline&lt;br /&gt;
** &amp;lt;code&amp;gt;shared_path&amp;lt;/code&amp;gt;: If default locations are created, create the [[Storage Service#Currently Processing | processing]] location at this path in the local filesystem&lt;br /&gt;
** &amp;lt;code&amp;gt;remote_name&amp;lt;/code&amp;gt;: URI of the pipeline.&lt;br /&gt;
*** Before v0.11.0: If &amp;lt;code&amp;gt;create_default_locations&amp;lt;/code&amp;gt; is set, SS will try to guess the value using the &amp;lt;code&amp;gt;REMOTE_ADDR&amp;lt;/code&amp;gt; header.&lt;br /&gt;
*** In v0.11.0 or newer: If not provided, SS will try to guess the value using the &amp;lt;code&amp;gt;REMOTE_ADDR&amp;lt;/code&amp;gt; header.&lt;br /&gt;
* '''Response''': JSON with data for the pipeline&lt;br /&gt;
&lt;br /&gt;
If the 'Pipelines disabled on creation' setting is set, the pipeline will be disabled by default, and will not respond to queries.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 $ curl -X POST \&lt;br /&gt;
    -H&amp;quot;Authorization: ApiKey test:95141fc645ed97a95893f1f865d24687f89a27ad&amp;quot; \&lt;br /&gt;
    -H&amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
    -d'{&amp;quot;uuid&amp;quot;: &amp;quot;99354557-9e6e-4918-9fe3-a65b00ecb199&amp;quot;, \&lt;br /&gt;
        &amp;quot;description&amp;quot;: &amp;quot;Test pipeline&amp;quot;, &amp;quot;create_default_locations&amp;quot;: true, \&lt;br /&gt;
        &amp;quot;api_username&amp;quot;: &amp;quot;demo&amp;quot;, \&lt;br /&gt;
        &amp;quot;api_key&amp;quot;: &amp;quot;03ecb307f5b8012f4771d245d534830378a87259&amp;quot;}' \&lt;br /&gt;
     'http://192.168.1.42:8000/api/v2/pipeline/'&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;create_default_locations&amp;quot;: true,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Test pipeline&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_name&amp;quot;: &amp;quot;192.168.1.42&amp;quot;,&lt;br /&gt;
    &amp;quot;resource_uri&amp;quot;: &amp;quot;/api/v2/pipeline/99354557-9e6e-4918-9fe3-a65b00ecb199/&amp;quot;,&lt;br /&gt;
    &amp;quot;uuid&amp;quot;: &amp;quot;99354557-9e6e-4918-9fe3-a65b00ecb199&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Get pipeline details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;: Pipeline description&lt;br /&gt;
** &amp;lt;code&amp;gt;remote_name&amp;lt;/code&amp;gt;: IP or hostname of the pipeline. For use in API calls&lt;br /&gt;
** &amp;lt;code&amp;gt;resource_uri&amp;lt;/code&amp;gt;: URI for this pipeline in the API&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the pipeline&lt;br /&gt;
&lt;br /&gt;
== Space ==&lt;br /&gt;
&lt;br /&gt;
=== Get all spaces ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/space/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;access_protocol&amp;lt;/code&amp;gt;: Protocol that the [[Storage Service#Space | Space]] uses. Must be searched based on the database code.&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Space's path&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Maximum size in bytes. Can use greater than (size__gt=1024), less than (size__lt=1024), and other Django [https://docs.djangoproject.com/en/1.8/ref/models/querysets/#field-lookups field lookups].&lt;br /&gt;
** &amp;lt;code&amp;gt;used&amp;lt;/code&amp;gt;: Bytes stored in this space. Can use greater than (size__gt=1024), less than (size__lt=1024), and other Django [https://docs.djangoproject.com/en/1.8/ref/models/querysets/#field-lookups field lookups].&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the Space&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;meta&amp;lt;/code&amp;gt;: Metadata on the response: number of hits, pagination information&lt;br /&gt;
** &amp;lt;code&amp;gt;objects&amp;lt;/code&amp;gt;: List of spaces. See [[#Get space details]] for format&lt;br /&gt;
&lt;br /&gt;
Returns information about all the spaces in the system.  Can be [http://django-tastypie.readthedocs.io/en/latest/resources.html#basic-filtering filtered] by several fields: access protocol, path, size, amount used, UUID and verified status. Disabled spaces are not returned.&lt;br /&gt;
&lt;br /&gt;
=== Get space details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/space/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;access_protocol&amp;lt;/code&amp;gt;: Database code for the access protocol&lt;br /&gt;
** &amp;lt;code&amp;gt;last_verified&amp;lt;/code&amp;gt;: Date of last verification. This is a stub feature&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Space's path&lt;br /&gt;
** &amp;lt;code&amp;gt;resource_uri&amp;lt;/code&amp;gt;: URI to the resource in the API&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Maximum size of the space in bytes.&lt;br /&gt;
** &amp;lt;code&amp;gt;used&amp;lt;/code&amp;gt;: Bytes stored in this space. &lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the space&lt;br /&gt;
** &amp;lt;code&amp;gt;verified&amp;lt;/code&amp;gt;: If the space is verified. This is a stub feature&lt;br /&gt;
** Other space-specific fields&lt;br /&gt;
&lt;br /&gt;
=== Browse space path ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/space/&amp;lt;UUID&amp;gt;/browse/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path inside the Space to look&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;entries&amp;lt;/code&amp;gt;: List of entries at path, files or directories&lt;br /&gt;
** &amp;lt;code&amp;gt;directories&amp;lt;/code&amp;gt;: List of directories in path. Subset of `entries`.&lt;br /&gt;
&lt;br /&gt;
=== Create space ===&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/archivematica/Issues/issues/36 Issue 36].&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/space&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** Should contain fields for a new space: See the [https://www.archivematica.org/en/docs/storage-service-0.11/administrators/#id2 Storage Service Documentation] or [https://wiki.archivematica.org/Storage_Service#Space Space] for fields relevant to each type of space. Basic fields for a local file system space are listed below. &lt;br /&gt;
** &amp;lt;code&amp;gt;access_protocol&amp;lt;/code&amp;gt;: this defines the type of space&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Absolute path to the Space on the local filesystem&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;:  (Optional) Maximum size allowed for this space. Set to 0 or leave blank for unlimited.&lt;br /&gt;
&lt;br /&gt;
Example (to create an S3 space):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl \&lt;br /&gt;
    -X POST \&lt;br /&gt;
    -d @payload.json \&lt;br /&gt;
    -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
    -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
        http://127.0.0.1:62081/api/v2/space/&lt;br /&gt;
&lt;br /&gt;
Where payload.json contains&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;access_protocol&amp;quot;: &amp;quot;S3&amp;quot;,&lt;br /&gt;
    &amp;quot;path&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;staging_path&amp;quot;: &amp;quot;/&amp;quot;,&lt;br /&gt;
    &amp;quot;endpoint_url&amp;quot;: &amp;quot;http://127.0.0.1:12345&amp;quot;,&lt;br /&gt;
    &amp;quot;access_key_id&amp;quot;: &amp;quot;_Cah4cae1_&amp;quot;,&lt;br /&gt;
    &amp;quot;secret_access_key&amp;quot;: &amp;quot;_Thu6Ahqu_&amp;quot;,&lt;br /&gt;
    &amp;quot;region&amp;quot;: &amp;quot;us-west-2&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Version 1: Returns paths as strings&lt;br /&gt;
Version 2: Returns all paths base64 encoded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
&lt;br /&gt;
=== Get all locations ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Create new location ===&lt;br /&gt;
&lt;br /&gt;
Added in v0.12 - see [https://github.com/artefactual/archivematica-storage-service/issues/367 issue 367] and [https://github.com/archivematica/Issues/issues/37 issue 37].&lt;br /&gt;
&lt;br /&gt;
This endpoint creates a location in the storage service, but it doesn't actually create the directory that the location points to.  &lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: URI of the pipeline.&lt;br /&gt;
** &amp;lt;code&amp;gt;space&amp;lt;/code&amp;gt;: URI of the space.&lt;br /&gt;
** &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;: If 'true' this location will be the default for it's purpose. &lt;br /&gt;
** &amp;lt;code&amp;gt;purpose&amp;lt;/code&amp;gt;: (below is a list of possible values)&lt;br /&gt;
*** &amp;lt;code&amp;gt;AR&amp;lt;/code&amp;gt; (AIP_RECOVERY)&lt;br /&gt;
*** &amp;lt;code&amp;gt;AS&amp;lt;/code&amp;gt; (AIP_STORAGE)&lt;br /&gt;
*** &amp;lt;code&amp;gt;CP&amp;lt;/code&amp;gt; (CURRENTLY_PROCESSING)&lt;br /&gt;
*** &amp;lt;code&amp;gt;DS&amp;lt;/code&amp;gt; (DIP_STORAGE)&lt;br /&gt;
*** &amp;lt;code&amp;gt;SD&amp;lt;/code&amp;gt; (SWORD_DEPOSIT)&lt;br /&gt;
*** &amp;lt;code&amp;gt;SS&amp;lt;/code&amp;gt; (STORAGE_SERVICE_INTERNAL)&lt;br /&gt;
*** &amp;lt;code&amp;gt;BL&amp;lt;/code&amp;gt; (BACKLOG)&lt;br /&gt;
*** &amp;lt;code&amp;gt;TS&amp;lt;/code&amp;gt; (TRANSFER_SOURCE)&lt;br /&gt;
*** &amp;lt;code&amp;gt;RP&amp;lt;/code&amp;gt; (REPLICATOR)&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative to the space's path.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -s -d '{&lt;br /&gt;
    &amp;quot;pipeline&amp;quot;: [&amp;quot;/api/v2/pipeline/90707555-244f-47af-8271-66496a6a965b/&amp;quot;],&lt;br /&gt;
    &amp;quot;purpose&amp;quot;: &amp;quot;TS&amp;quot;,&lt;br /&gt;
    &amp;quot;relative_path&amp;quot;: &amp;quot;foo/bar&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;foobar&amp;quot;,&lt;br /&gt;
    &amp;quot;space&amp;quot;: &amp;quot;/api/v2/space/141593ff-2a27-44a1-9de1-917573fa0f4a/&amp;quot;&lt;br /&gt;
}' \&lt;br /&gt;
    -X POST \&lt;br /&gt;
    -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
    -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
        &amp;quot;http://127.0.0.1:62081/api/v2/location/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Get location details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Move files to this location ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_location&amp;lt;/code&amp;gt;: URI of the Location the files should be moved from&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: URI of the [[Storage Service#Pipeline | pipeline]]. Both Locations must be associated with this pipeline.&lt;br /&gt;
** &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;: List of dicts containing &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;destination&amp;lt;/code&amp;gt;.  The source and destination are paths relative to their Location of the files to be moved.&lt;br /&gt;
&lt;br /&gt;
Intended for use with creating Transfers, SIPs, etc and other cases where files need to be moved but not tracked by the storage service.&lt;br /&gt;
&lt;br /&gt;
=== Browse location path ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/browse/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path inside the Location to look&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;entries&amp;lt;/code&amp;gt;: List of entries in `path`, files or directories&lt;br /&gt;
** &amp;lt;code&amp;gt;directories&amp;lt;/code&amp;gt;: List of directories in `path`. Subset of `entries`.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Version 1: Returns paths as strings&lt;br /&gt;
Version 2: Returns all paths base64 encoded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SWORD collection ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/sword/collection/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
&lt;br /&gt;
See [[Sword API]] for details&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Package ==&lt;br /&gt;
&lt;br /&gt;
=== Get all packages ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Create new package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON. Fields for a new package:&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the new package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_location&amp;lt;/code&amp;gt;: URI of the Location where the package is currently&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_path&amp;lt;/code&amp;gt;: Path to the package, relative to the origin_location&lt;br /&gt;
** &amp;lt;code&amp;gt;current_location&amp;lt;/code&amp;gt;: URI of the Location where the package should be stored&lt;br /&gt;
** &amp;lt;code&amp;gt;current_path&amp;lt;/code&amp;gt;: Path where the package should be stored, relative to the current_location&lt;br /&gt;
** &amp;lt;code&amp;gt;package_type&amp;lt;/code&amp;gt;: Type of package this is. One of: &amp;lt;code&amp;gt;AIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AIC&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transfer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;deposit&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Size of the package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_pipeline&amp;lt;/code&amp;gt;: URI of the pipeline the package is from&lt;br /&gt;
** &amp;lt;code&amp;gt;related_package_uuid&amp;lt;/code&amp;gt;: UUID of a package that is related to this one. E.g. UUID of a DIP when storing an AIP&lt;br /&gt;
&lt;br /&gt;
Creates a database entry tracking the package (AIP, transfer, etc).  If the package is an AIP, DIP or AIC and the current_location is an AIP or DIP storage location it also moves the files from the source to destination location.  If the package is a Transfer and the current_location is transfer backlog, it is also moved.&lt;br /&gt;
&lt;br /&gt;
This is handled through the modified &amp;lt;code&amp;gt;obj_create&amp;lt;/code&amp;gt; function, which calls &amp;lt;code&amp;gt;Package.store_aip&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Package.backlog_transfer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Get package details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Update package contents ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': PUT&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest&amp;lt;/code&amp;gt;: Flag to mark that this is reingest. Reduces chance to accidentally modify an AIP.&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the existing package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_location&amp;lt;/code&amp;gt;: URI of the Location where the package is currently&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_path&amp;lt;/code&amp;gt;: Path to the package, relative to the origin_location&lt;br /&gt;
** &amp;lt;code&amp;gt;current_location&amp;lt;/code&amp;gt;: URI of the Location where the package should be stored&lt;br /&gt;
** &amp;lt;code&amp;gt;current_path&amp;lt;/code&amp;gt;: Path where the package should be stored, relative to the current_location&lt;br /&gt;
** &amp;lt;code&amp;gt;package_type&amp;lt;/code&amp;gt;: Type of package this is. One of: &amp;lt;code&amp;gt;AIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AIC&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Size of the package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_pipeline&amp;lt;/code&amp;gt;: URI of the pipeline the package is from.  This must be the same pipeline reingest was started on (tracked through &amp;lt;code&amp;gt;Package.misc_attributes.reingest_pipeline&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Updates the contents of a package during reingest.  If the package is an AIP or AIC, currently stored in an AIP storage location, and the 'reingest' parameter is set, it will call &amp;lt;code&amp;gt;Package.finish_reingest&amp;lt;/code&amp;gt; and merge the new AIP with the existing one.&lt;br /&gt;
&lt;br /&gt;
This is implemented using a modified &amp;lt;code&amp;gt;obj_update&amp;lt;/code&amp;gt; which calls &amp;lt;code&amp;gt;obj_update_hook&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Update package metadata ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': PATCH&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest&amp;lt;/code&amp;gt;: Pipeline UUID or None.&lt;br /&gt;
&lt;br /&gt;
Used to update metadata stored in the database for the package.  Currently, this is used to update the reingest status.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: Currently, this always sets Package.misc_attributes.reingest to None, regardless of what value was actually passed in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is implemented using a modified &amp;lt;code&amp;gt;obj_update&amp;lt;/code&amp;gt; which calls &amp;lt;code&amp;gt;obj_update_hook&amp;lt;/code&amp;gt;.  &amp;lt;code&amp;gt;update_in_place&amp;lt;/code&amp;gt; also helps.&lt;br /&gt;
&lt;br /&gt;
=== Delete package request ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/delete_aip/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;event_reason&amp;lt;/code&amp;gt;: Reason for deleting the AIP&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: UUID of the pipeline the delete request is from&lt;br /&gt;
** &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt;: User ID requesting the deletion. This is the ID of the user on the pipeline, and must be an integer greater than 0.&lt;br /&gt;
** &amp;lt;code&amp;gt;user_email&amp;lt;/code&amp;gt;:  Email of the user requesting the deletion.&lt;br /&gt;
&lt;br /&gt;
=== Recover AIP request ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/recover_aip/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;event_reason&amp;lt;/code&amp;gt;: Reason for recovering the AIP&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: URI of the pipeline the recovery request is from&lt;br /&gt;
** &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt;: User ID requesting the recovery. This is the ID of the user on the pipeline, and must be an integer greater than 0.&lt;br /&gt;
** &amp;lt;code&amp;gt;user_email&amp;lt;/code&amp;gt;:  Email of the user requesting the recovery.&lt;br /&gt;
&lt;br /&gt;
=== Download single file ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/extract_file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, HEAD&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path_to_file&amp;lt;/code&amp;gt;: Path to the file to download, relative to the location where is stored down to the lowest level.&amp;lt;br /&amp;gt;E.g.: &amp;lt;code&amp;gt;test01-36d4efb7-83ba-46bf-a171-8c7b965d9dcb/data/objects/MARBLES.TGA&amp;lt;/code&amp;gt;, where &amp;lt;code&amp;gt;test01-36d4efb7-83ba-46bf-a171-8c7b965d9dcb&amp;lt;/code&amp;gt; contains both the transfer name and the identifier of the package. [[#Get package details | Get package details]] can provide these (see &amp;lt;code&amp;gt;current_path&amp;lt;/code&amp;gt; attribute).&lt;br /&gt;
* '''Response''': Stream of the requested file&lt;br /&gt;
&lt;br /&gt;
Returns a single file from the Package.  If the package is compressed, it downloads the whole AIP and extracts it.&lt;br /&gt;
&lt;br /&gt;
This responds to HEAD because AtoM uses HEAD to check for the existence of a file. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: HEAD and GET should not perform the same functions. HEAD should be updated to not return the file, and to only check for existence.  Currently, the storage service has no way to check if a file exists except by downloading and extracting this AIP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the package is in [[Storage Service#Arkivum | Arkivum]], the package may not actually be available.  This endpoint checks if the package is locally available. If it is, it is returned as normal. If not, it returns &amp;lt;code&amp;gt;202&amp;lt;/code&amp;gt; and emails the administrator about the attempted access.&lt;br /&gt;
&lt;br /&gt;
=== Download package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/download/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/download/&amp;lt;chunk number&amp;gt;/&amp;lt;/code&amp;gt; (for [[Storage Service#LOCKSS-o-matic | LOCKSS]] harvesting)&lt;br /&gt;
* '''Verb''': GET, HEAD&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': Stream of the package&lt;br /&gt;
&lt;br /&gt;
Returns the entire package as a single file.  If the AIP is uncompressed, create one file by using `tar`.&lt;br /&gt;
&lt;br /&gt;
If the download URL has a chunk number, it will attempt to serve the LOCKSS chunk specified for that package. If the package is not in LOCKSS, it will return the the whole package.&lt;br /&gt;
&lt;br /&gt;
This responds to HEAD because AtoM uses HEAD to check for the existence of a file. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: HEAD and GET should not perform the same functions. HEAD should be updated to not return the file, and to only check for existence.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the package is in [[Storage Service#Arkivum | Arkivum]], the package may not actually be available.  This endpoint checks if the package is locally available. If it is, it is returned as normal. If not, it returns &amp;lt;code&amp;gt;202&amp;lt;/code&amp;gt; and emails the administrator about the attempted access.&lt;br /&gt;
&lt;br /&gt;
=== Get pointer file ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/pointer_file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': Stream of the pointer file.&lt;br /&gt;
&lt;br /&gt;
=== Check fixity ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/check_fixity/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;force_local&amp;lt;/code&amp;gt;: If true, download and run fixity on the AIP locally, instead of using the Space-provided fixity if available.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True if the verification succeeded, False if the verification failed, None if the scan could not start&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: Human-readable string explaining the report; it will be empty for successful scans.&lt;br /&gt;
** &amp;lt;code&amp;gt;failures&amp;lt;/code&amp;gt;: List of 0 or more errors&lt;br /&gt;
** &amp;lt;code&amp;gt;timestamp&amp;lt;/code&amp;gt;: ISO-formated string with the datetime of the last fixity check. If the check was performed by an external system, this will be provided by that system. If not provided,or on error, it will be None.&lt;br /&gt;
&lt;br /&gt;
=== AIP storage callback request ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/send_callback/post_store/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
Request to call any Callbacks configured to run post-storage for this AIP.&lt;br /&gt;
&lt;br /&gt;
In SS0.15 and above, this endpoint has been extended to support callbacks for AIP, AIC and DIP stored events.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Event''': Post-store AIP, AIC, or DIP  &lt;br /&gt;
* '''URI''': &amp;lt;code&amp;gt;https://scope.com/api/v1/dip/&amp;lt;package_uuid&amp;gt;/stored&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Method''': POST  &lt;br /&gt;
* '''Headers''':  &lt;br /&gt;
* - Authorization -&amp;gt; &amp;lt;code&amp;gt;Token &amp;lt;token&amp;gt;&amp;lt;/code&amp;gt;  &lt;br /&gt;
* - Origin -&amp;gt; &amp;lt;code&amp;gt;https://ss.com&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Expected Status''': 202  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: This only works on locally available AIPs (AIPs stored in Spaces that are available via a UNIX filesystem layer).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Get file information for package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/contents/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True&lt;br /&gt;
** &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;: UUID of the package&lt;br /&gt;
** &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;: List of dictionaries with file information. Each dictionary has:&lt;br /&gt;
*** &amp;lt;code&amp;gt;source_id&amp;lt;/code&amp;gt;: UUID of the file to index&lt;br /&gt;
*** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
*** &amp;lt;code&amp;gt;source_package&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
*** &amp;lt;code&amp;gt;checksum&amp;lt;/code&amp;gt;: Checksum of the file, or an empty string&lt;br /&gt;
*** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number, or an empty string&lt;br /&gt;
*** &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;: UUID of the Archivematica dashboard this is from&lt;br /&gt;
&lt;br /&gt;
Returns metadata about every file within the package.&lt;br /&gt;
&lt;br /&gt;
=== Update file information for package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/contents/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': PUT&lt;br /&gt;
* '''Parameters''': JSON list of dictionaries with information on the files to be added. Each dict must have the following attributes:&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
** &amp;lt;code&amp;gt;fileuuid&amp;lt;/code&amp;gt;: UUID of the file to index&lt;br /&gt;
** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number, or an empty string&lt;br /&gt;
** &amp;lt;code&amp;gt;sipuuid&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
** &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;: UUID of the Archivematica dashboard this is from&lt;br /&gt;
&lt;br /&gt;
Adds a set of files to a package.&lt;br /&gt;
&lt;br /&gt;
=== Delete file information for package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/contents/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
&lt;br /&gt;
Removes all file records associated with this package.&lt;br /&gt;
&lt;br /&gt;
=== Query file information on packages ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/metadata/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
* '''Parameters''': Query string parameters.  Must have at least one, but not all are required&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
** &amp;lt;code&amp;gt;fileuuid&amp;lt;/code&amp;gt;: UUID of the file&lt;br /&gt;
** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number&lt;br /&gt;
** &amp;lt;code&amp;gt;sipuuid&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
* '''Response''': JSON. List of dicts with file information about the files that match the query.&lt;br /&gt;
** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number, or an empty string&lt;br /&gt;
** &amp;lt;code&amp;gt;file_extension&amp;lt;/code&amp;gt;: File extension&lt;br /&gt;
** &amp;lt;code&amp;gt;filename&amp;lt;/code&amp;gt;: Name of the file, sans path.&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
** &amp;lt;code&amp;gt;fileuuid&amp;lt;/code&amp;gt;: UUID of the file to index&lt;br /&gt;
** &amp;lt;code&amp;gt;sipuuid&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
** &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;: UUID of the Archivematica dashboard this is from&lt;br /&gt;
&lt;br /&gt;
=== Reingest AIP ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/reingest/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: UUID of the pipeline to reingest on&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_type&amp;lt;/code&amp;gt;: Type of reingest to start. One of &amp;lt;code&amp;gt;METADATA_ONLY&amp;lt;/code&amp;gt; (metadata-only reingest), &amp;lt;code&amp;gt;OBJECTS&amp;lt;/code&amp;gt; (partial reingest), &amp;lt;code&amp;gt;FULL&amp;lt;/code&amp;gt; (full reingest)&lt;br /&gt;
** &amp;lt;code&amp;gt;processing_config&amp;lt;/code&amp;gt;: Optional. Name of the processing configuration to use on full reingest&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Move Package ===&lt;br /&gt;
&lt;br /&gt;
This endpoint is introduced in v0.14.&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/move/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;location_uuid&amp;lt;/code&amp;gt;: UUID of the location to send the package. The location must have the same Purpose as the package's current location (e.g. AIP Storage, DIP Storage).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 $ curl -d 'location_uuid=7c5c48d4-50db-4018-b4b1-7ed29d1ef9d3	' -H&amp;quot;Authorization: ApiKey test:4525fd5272275caeac04a28447698c51&amp;quot; 'http://mysite.archivematica.org:8000/api/v2/file/8b8aa1a2-79c9-490e-b630-28f90bb7e654/move/'&lt;br /&gt;
&lt;br /&gt;
=== SWORD endpoints ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/sword/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/sword/media/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/sword/state/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[Sword API]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Storage_Service_API&amp;diff=13504</id>
		<title>Storage Service API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Storage_Service_API&amp;diff=13504"/>
		<updated>2020-07-30T17:55:30Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Download single file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Storage Service API&lt;br /&gt;
&lt;br /&gt;
The [[Storage Service]] API provides programmatic access to moving files around in storage areas that the Storage Service has access to.&lt;br /&gt;
&lt;br /&gt;
The API is written using [http://django-tastypie.readthedocs.io/en/latest/ TastyPie].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: TastyPie is less well supported than [http://www.django-rest-framework.org/ Django REST Framework], both in terms of docs &amp;amp; community. We should look at replacing TastyPie with DRF.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Endpoints require authentication with a username and API key.  This can be submitted as GET parameters (eg &amp;lt;code&amp;gt;?username=test&amp;amp;api_key=e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;) or as a header (eg &amp;lt;code&amp;gt;Authorization: ApiKey test:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== A note about browsing ==&lt;br /&gt;
&lt;br /&gt;
A detailed schema can be found for each of the resources by adding &amp;quot;schema&amp;quot; to the get all URL.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 $ curl -X GET -H&amp;quot;Authorization: ApiKey test:95141fc645ed97a95893f1f865d24687f89a27ad&amp;quot; 'http://localhost:8000/api/v2/location/schema/?format=json&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;allowed_detail_http_methods&amp;quot;: [&lt;br /&gt;
        &amp;quot;get&amp;quot;,&lt;br /&gt;
        &amp;quot;post&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;allowed_list_http_methods&amp;quot;: [&lt;br /&gt;
        &amp;quot;get&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;default_format&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
    &amp;quot;default_limit&amp;quot;: 20,&lt;br /&gt;
    &amp;quot;fields&amp;quot;: {&lt;br /&gt;
        &amp;quot;description&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unicode string data. Ex: \&amp;quot;Hello World\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: true,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;description&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;enabled&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: true,&lt;br /&gt;
            &amp;quot;default&amp;quot;: true,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;True if space can be accessed.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Enabled&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;path&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unicode string data. Ex: \&amp;quot;Hello World\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: true,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;path&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;pipeline&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Many related resources. Can be either a list of URIs or list of individually nested resource data.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;related_schema&amp;quot;: &amp;quot;/api/v2/pipeline/schema/&amp;quot;,&lt;br /&gt;
            &amp;quot;related_type&amp;quot;: &amp;quot;to_many&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;related&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;pipeline&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;purpose&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Purpose of the space.  Eg. AIP storage, Transfer source&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Purpose&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;quota&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: null,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Size, in bytes (optional)&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: true,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Quota&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;relative_path&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Path to location, relative to the storage space's path.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Relative Path&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;resource_uri&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unicode string data. Ex: \&amp;quot;Hello World\&amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: true,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;resource uri&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;space&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;No default provided.&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;A single related resource. Can be either a URI or set of nested resource data.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;related_schema&amp;quot;: &amp;quot;/api/v2/space/schema/&amp;quot;,&lt;br /&gt;
            &amp;quot;related_type&amp;quot;: &amp;quot;to_one&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;related&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;space&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;used&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: false,&lt;br /&gt;
            &amp;quot;default&amp;quot;: 0,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Amount used, in bytes.&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: false,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;Used&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;uuid&amp;quot;: {&lt;br /&gt;
            &amp;quot;blank&amp;quot;: true,&lt;br /&gt;
            &amp;quot;default&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
            &amp;quot;help_text&amp;quot;: &amp;quot;Unique identifier&amp;quot;,&lt;br /&gt;
            &amp;quot;nullable&amp;quot;: false,&lt;br /&gt;
            &amp;quot;primary_key&amp;quot;: false,&lt;br /&gt;
            &amp;quot;readonly&amp;quot;: false,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
            &amp;quot;unique&amp;quot;: true,&lt;br /&gt;
            &amp;quot;verbose_name&amp;quot;: &amp;quot;uuid&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;filtering&amp;quot;: {&lt;br /&gt;
        &amp;quot;pipeline&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;purpose&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;quota&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;relative_path&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;space&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;used&amp;quot;: 1,&lt;br /&gt;
        &amp;quot;uuid&amp;quot;: 1&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This schema, among other things, describes the fields in the resource (including the schema URI of related resource fields) and the fields that allow filtering. Valid filtering values are: Django ORM filters (e.g. startswith, exact, lte, etc.) or 1 or 2. If a filtering field is set to 2 it can be filtered over the related resource fields. For example, the locations could be filtered by their pipeline UUID setting it in a request parameter formatted with two underscore chars: &amp;lt;code&amp;gt;/api/v2/location/?pipeline__uuid=&amp;lt;uuid&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more info on how to interact with the API see:&lt;br /&gt;
&lt;br /&gt;
http://django-tastypie.readthedocs.io/en/v0.13.1/interacting.html&lt;br /&gt;
&lt;br /&gt;
== Pipeline ==&lt;br /&gt;
&lt;br /&gt;
=== Get all pipelines ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;: Description of the pipeline&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the pipeline&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;meta&amp;lt;/code&amp;gt;: Metadata on the response: number of hits, pagination information&lt;br /&gt;
** &amp;lt;code&amp;gt;objects&amp;lt;/code&amp;gt;: List of pipelines. See [[#Get pipeline details]] for format&lt;br /&gt;
&lt;br /&gt;
Returns information about all the pipelines in the system.  Can be [http://django-tastypie.readthedocs.io/en/latest/resources.html#basic-filtering filtered] by the description or uuid. Disabled pipelines are not returned.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 $ curl -X GET -H&amp;quot;Authorization: ApiKey test:95141fc645ed97a95893f1f865d24687f89a27ad&amp;quot; 'http://localhost:8000/api/v2/pipeline/?description__startswith=Archivematica' | python -m json.tool&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;meta&amp;quot;: {&lt;br /&gt;
         &amp;quot;limit&amp;quot;: 20,&lt;br /&gt;
         &amp;quot;next&amp;quot;: null,&lt;br /&gt;
         &amp;quot;offset&amp;quot;: 0,&lt;br /&gt;
         &amp;quot;previous&amp;quot;: null,&lt;br /&gt;
         &amp;quot;total_count&amp;quot;: 1&lt;br /&gt;
     },&lt;br /&gt;
     &amp;quot;objects&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;description&amp;quot;: &amp;quot;Archivematica on alouette&amp;quot;,&lt;br /&gt;
             &amp;quot;remote_name&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&lt;br /&gt;
             &amp;quot;resource_uri&amp;quot;: &amp;quot;/api/v2/pipeline/dd354557-9e6e-4918-9fe3-a65b00ecb1af/&amp;quot;,&lt;br /&gt;
             &amp;quot;uuid&amp;quot;: &amp;quot;dd354557-9e6e-4918-9fe3-a65b00ecb1af&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Create new pipeline ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** Should contain fields for a new pipeline: &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;api_key&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;api_username&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;create_default_locations&amp;lt;/code&amp;gt;: If True, will associated default [[Storage Service#Locations | Locations]] with the newly created pipeline&lt;br /&gt;
** &amp;lt;code&amp;gt;shared_path&amp;lt;/code&amp;gt;: If default locations are created, create the [[Storage Service#Currently Processing | processing]] location at this path in the local filesystem&lt;br /&gt;
** &amp;lt;code&amp;gt;remote_name&amp;lt;/code&amp;gt;: URI of the pipeline.&lt;br /&gt;
*** Before v0.11.0: If &amp;lt;code&amp;gt;create_default_locations&amp;lt;/code&amp;gt; is set, SS will try to guess the value using the &amp;lt;code&amp;gt;REMOTE_ADDR&amp;lt;/code&amp;gt; header.&lt;br /&gt;
*** In v0.11.0 or newer: If not provided, SS will try to guess the value using the &amp;lt;code&amp;gt;REMOTE_ADDR&amp;lt;/code&amp;gt; header.&lt;br /&gt;
* '''Response''': JSON with data for the pipeline&lt;br /&gt;
&lt;br /&gt;
If the 'Pipelines disabled on creation' setting is set, the pipeline will be disabled by default, and will not respond to queries.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
 $ curl -X POST \&lt;br /&gt;
    -H&amp;quot;Authorization: ApiKey test:95141fc645ed97a95893f1f865d24687f89a27ad&amp;quot; \&lt;br /&gt;
    -H&amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
    -d'{&amp;quot;uuid&amp;quot;: &amp;quot;99354557-9e6e-4918-9fe3-a65b00ecb199&amp;quot;, \&lt;br /&gt;
        &amp;quot;description&amp;quot;: &amp;quot;Test pipeline&amp;quot;, &amp;quot;create_default_locations&amp;quot;: true, \&lt;br /&gt;
        &amp;quot;api_username&amp;quot;: &amp;quot;demo&amp;quot;, \&lt;br /&gt;
        &amp;quot;api_key&amp;quot;: &amp;quot;03ecb307f5b8012f4771d245d534830378a87259&amp;quot;}' \&lt;br /&gt;
     'http://192.168.1.42:8000/api/v2/pipeline/'&lt;br /&gt;
 {&lt;br /&gt;
    &amp;quot;create_default_locations&amp;quot;: true,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Test pipeline&amp;quot;,&lt;br /&gt;
    &amp;quot;remote_name&amp;quot;: &amp;quot;192.168.1.42&amp;quot;,&lt;br /&gt;
    &amp;quot;resource_uri&amp;quot;: &amp;quot;/api/v2/pipeline/99354557-9e6e-4918-9fe3-a65b00ecb199/&amp;quot;,&lt;br /&gt;
    &amp;quot;uuid&amp;quot;: &amp;quot;99354557-9e6e-4918-9fe3-a65b00ecb199&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Get pipeline details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;: Pipeline description&lt;br /&gt;
** &amp;lt;code&amp;gt;remote_name&amp;lt;/code&amp;gt;: IP or hostname of the pipeline. For use in API calls&lt;br /&gt;
** &amp;lt;code&amp;gt;resource_uri&amp;lt;/code&amp;gt;: URI for this pipeline in the API&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the pipeline&lt;br /&gt;
&lt;br /&gt;
== Space ==&lt;br /&gt;
&lt;br /&gt;
=== Get all spaces ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/space/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;access_protocol&amp;lt;/code&amp;gt;: Protocol that the [[Storage Service#Space | Space]] uses. Must be searched based on the database code.&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Space's path&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Maximum size in bytes. Can use greater than (size__gt=1024), less than (size__lt=1024), and other Django [https://docs.djangoproject.com/en/1.8/ref/models/querysets/#field-lookups field lookups].&lt;br /&gt;
** &amp;lt;code&amp;gt;used&amp;lt;/code&amp;gt;: Bytes stored in this space. Can use greater than (size__gt=1024), less than (size__lt=1024), and other Django [https://docs.djangoproject.com/en/1.8/ref/models/querysets/#field-lookups field lookups].&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the Space&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;meta&amp;lt;/code&amp;gt;: Metadata on the response: number of hits, pagination information&lt;br /&gt;
** &amp;lt;code&amp;gt;objects&amp;lt;/code&amp;gt;: List of spaces. See [[#Get space details]] for format&lt;br /&gt;
&lt;br /&gt;
Returns information about all the spaces in the system.  Can be [http://django-tastypie.readthedocs.io/en/latest/resources.html#basic-filtering filtered] by several fields: access protocol, path, size, amount used, UUID and verified status. Disabled spaces are not returned.&lt;br /&gt;
&lt;br /&gt;
=== Get space details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/space/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;access_protocol&amp;lt;/code&amp;gt;: Database code for the access protocol&lt;br /&gt;
** &amp;lt;code&amp;gt;last_verified&amp;lt;/code&amp;gt;: Date of last verification. This is a stub feature&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Space's path&lt;br /&gt;
** &amp;lt;code&amp;gt;resource_uri&amp;lt;/code&amp;gt;: URI to the resource in the API&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Maximum size of the space in bytes.&lt;br /&gt;
** &amp;lt;code&amp;gt;used&amp;lt;/code&amp;gt;: Bytes stored in this space. &lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the space&lt;br /&gt;
** &amp;lt;code&amp;gt;verified&amp;lt;/code&amp;gt;: If the space is verified. This is a stub feature&lt;br /&gt;
** Other space-specific fields&lt;br /&gt;
&lt;br /&gt;
=== Browse space path ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/space/&amp;lt;UUID&amp;gt;/browse/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path inside the Space to look&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;entries&amp;lt;/code&amp;gt;: List of entries at path, files or directories&lt;br /&gt;
** &amp;lt;code&amp;gt;directories&amp;lt;/code&amp;gt;: List of directories in path. Subset of `entries`.&lt;br /&gt;
&lt;br /&gt;
=== Create space ===&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/archivematica/Issues/issues/36 Issue 36].&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/pipeline/space&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** Should contain fields for a new space: See the [https://www.archivematica.org/en/docs/storage-service-0.11/administrators/#id2 Storage Service Documentation] or [https://wiki.archivematica.org/Storage_Service#Space Space] for fields relevant to each type of space. Basic fields for a local file system space are listed below. &lt;br /&gt;
** &amp;lt;code&amp;gt;access_protocol&amp;lt;/code&amp;gt;: this defines the type of space&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Absolute path to the Space on the local filesystem&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;:  (Optional) Maximum size allowed for this space. Set to 0 or leave blank for unlimited.&lt;br /&gt;
&lt;br /&gt;
Example (to create an S3 space):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl \&lt;br /&gt;
    -X POST \&lt;br /&gt;
    -d @payload.json \&lt;br /&gt;
    -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
    -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
        http://127.0.0.1:62081/api/v2/space/&lt;br /&gt;
&lt;br /&gt;
Where payload.json contains&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;access_protocol&amp;quot;: &amp;quot;S3&amp;quot;,&lt;br /&gt;
    &amp;quot;path&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;staging_path&amp;quot;: &amp;quot;/&amp;quot;,&lt;br /&gt;
    &amp;quot;endpoint_url&amp;quot;: &amp;quot;http://127.0.0.1:12345&amp;quot;,&lt;br /&gt;
    &amp;quot;access_key_id&amp;quot;: &amp;quot;_Cah4cae1_&amp;quot;,&lt;br /&gt;
    &amp;quot;secret_access_key&amp;quot;: &amp;quot;_Thu6Ahqu_&amp;quot;,&lt;br /&gt;
    &amp;quot;region&amp;quot;: &amp;quot;us-west-2&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Version 1: Returns paths as strings&lt;br /&gt;
Version 2: Returns all paths base64 encoded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
&lt;br /&gt;
=== Get all locations ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Create new location ===&lt;br /&gt;
&lt;br /&gt;
Added in v0.12 - see [https://github.com/artefactual/archivematica-storage-service/issues/367 issue 367] and [https://github.com/archivematica/Issues/issues/37 issue 37].&lt;br /&gt;
&lt;br /&gt;
This endpoint creates a location in the storage service, but it doesn't actually create the directory that the location points to.  &lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: URI of the pipeline.&lt;br /&gt;
** &amp;lt;code&amp;gt;space&amp;lt;/code&amp;gt;: URI of the space.&lt;br /&gt;
** &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;: If 'true' this location will be the default for it's purpose. &lt;br /&gt;
** &amp;lt;code&amp;gt;purpose&amp;lt;/code&amp;gt;: (below is a list of possible values)&lt;br /&gt;
*** &amp;lt;code&amp;gt;AR&amp;lt;/code&amp;gt; (AIP_RECOVERY)&lt;br /&gt;
*** &amp;lt;code&amp;gt;AS&amp;lt;/code&amp;gt; (AIP_STORAGE)&lt;br /&gt;
*** &amp;lt;code&amp;gt;CP&amp;lt;/code&amp;gt; (CURRENTLY_PROCESSING)&lt;br /&gt;
*** &amp;lt;code&amp;gt;DS&amp;lt;/code&amp;gt; (DIP_STORAGE)&lt;br /&gt;
*** &amp;lt;code&amp;gt;SD&amp;lt;/code&amp;gt; (SWORD_DEPOSIT)&lt;br /&gt;
*** &amp;lt;code&amp;gt;SS&amp;lt;/code&amp;gt; (STORAGE_SERVICE_INTERNAL)&lt;br /&gt;
*** &amp;lt;code&amp;gt;BL&amp;lt;/code&amp;gt; (BACKLOG)&lt;br /&gt;
*** &amp;lt;code&amp;gt;TS&amp;lt;/code&amp;gt; (TRANSFER_SOURCE)&lt;br /&gt;
*** &amp;lt;code&amp;gt;RP&amp;lt;/code&amp;gt; (REPLICATOR)&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative to the space's path.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -s -d '{&lt;br /&gt;
    &amp;quot;pipeline&amp;quot;: [&amp;quot;/api/v2/pipeline/90707555-244f-47af-8271-66496a6a965b/&amp;quot;],&lt;br /&gt;
    &amp;quot;purpose&amp;quot;: &amp;quot;TS&amp;quot;,&lt;br /&gt;
    &amp;quot;relative_path&amp;quot;: &amp;quot;foo/bar&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;foobar&amp;quot;,&lt;br /&gt;
    &amp;quot;space&amp;quot;: &amp;quot;/api/v2/space/141593ff-2a27-44a1-9de1-917573fa0f4a/&amp;quot;&lt;br /&gt;
}' \&lt;br /&gt;
    -X POST \&lt;br /&gt;
    -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
    -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
        &amp;quot;http://127.0.0.1:62081/api/v2/location/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Get location details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Move files to this location ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_location&amp;lt;/code&amp;gt;: URI of the Location the files should be moved from&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: URI of the [[Storage Service#Pipeline | pipeline]]. Both Locations must be associated with this pipeline.&lt;br /&gt;
** &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;: List of dicts containing &amp;lt;code&amp;gt;source&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;destination&amp;lt;/code&amp;gt;.  The source and destination are paths relative to their Location of the files to be moved.&lt;br /&gt;
&lt;br /&gt;
Intended for use with creating Transfers, SIPs, etc and other cases where files need to be moved but not tracked by the storage service.&lt;br /&gt;
&lt;br /&gt;
=== Browse location path ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/browse/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path inside the Location to look&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;entries&amp;lt;/code&amp;gt;: List of entries in `path`, files or directories&lt;br /&gt;
** &amp;lt;code&amp;gt;directories&amp;lt;/code&amp;gt;: List of directories in `path`. Subset of `entries`.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffffcc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Version 1: Returns paths as strings&lt;br /&gt;
Version 2: Returns all paths base64 encoded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SWORD collection ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/location/&amp;lt;UUID&amp;gt;/sword/collection/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
&lt;br /&gt;
See [[Sword API]] for details&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Package ==&lt;br /&gt;
&lt;br /&gt;
=== Get all packages ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Create new package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON. Fields for a new package:&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the new package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_location&amp;lt;/code&amp;gt;: URI of the Location where the package is currently&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_path&amp;lt;/code&amp;gt;: Path to the package, relative to the origin_location&lt;br /&gt;
** &amp;lt;code&amp;gt;current_location&amp;lt;/code&amp;gt;: URI of the Location where the package should be stored&lt;br /&gt;
** &amp;lt;code&amp;gt;current_path&amp;lt;/code&amp;gt;: Path where the package should be stored, relative to the current_location&lt;br /&gt;
** &amp;lt;code&amp;gt;package_type&amp;lt;/code&amp;gt;: Type of package this is. One of: &amp;lt;code&amp;gt;AIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AIC&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transfer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;file&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;deposit&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Size of the package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_pipeline&amp;lt;/code&amp;gt;: URI of the pipeline the package is from&lt;br /&gt;
** &amp;lt;code&amp;gt;related_package_uuid&amp;lt;/code&amp;gt;: UUID of a package that is related to this one. E.g. UUID of a DIP when storing an AIP&lt;br /&gt;
&lt;br /&gt;
Creates a database entry tracking the package (AIP, transfer, etc).  If the package is an AIP, DIP or AIC and the current_location is an AIP or DIP storage location it also moves the files from the source to destination location.  If the package is a Transfer and the current_location is transfer backlog, it is also moved.&lt;br /&gt;
&lt;br /&gt;
This is handled through the modified &amp;lt;code&amp;gt;obj_create&amp;lt;/code&amp;gt; function, which calls &amp;lt;code&amp;gt;Package.store_aip&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Package.backlog_transfer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Get package details ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
=== Update package contents ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': PUT&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest&amp;lt;/code&amp;gt;: Flag to mark that this is reingest. Reduces chance to accidentally modify an AIP.&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the existing package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_location&amp;lt;/code&amp;gt;: URI of the Location where the package is currently&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_path&amp;lt;/code&amp;gt;: Path to the package, relative to the origin_location&lt;br /&gt;
** &amp;lt;code&amp;gt;current_location&amp;lt;/code&amp;gt;: URI of the Location where the package should be stored&lt;br /&gt;
** &amp;lt;code&amp;gt;current_path&amp;lt;/code&amp;gt;: Path where the package should be stored, relative to the current_location&lt;br /&gt;
** &amp;lt;code&amp;gt;package_type&amp;lt;/code&amp;gt;: Type of package this is. One of: &amp;lt;code&amp;gt;AIP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AIC&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;size&amp;lt;/code&amp;gt;: Size of the package&lt;br /&gt;
** &amp;lt;code&amp;gt;origin_pipeline&amp;lt;/code&amp;gt;: URI of the pipeline the package is from.  This must be the same pipeline reingest was started on (tracked through &amp;lt;code&amp;gt;Package.misc_attributes.reingest_pipeline&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Updates the contents of a package during reingest.  If the package is an AIP or AIC, currently stored in an AIP storage location, and the 'reingest' parameter is set, it will call &amp;lt;code&amp;gt;Package.finish_reingest&amp;lt;/code&amp;gt; and merge the new AIP with the existing one.&lt;br /&gt;
&lt;br /&gt;
This is implemented using a modified &amp;lt;code&amp;gt;obj_update&amp;lt;/code&amp;gt; which calls &amp;lt;code&amp;gt;obj_update_hook&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Update package metadata ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': PATCH&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest&amp;lt;/code&amp;gt;: Pipeline UUID or None.&lt;br /&gt;
&lt;br /&gt;
Used to update metadata stored in the database for the package.  Currently, this is used to update the reingest status.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: Currently, this always sets Package.misc_attributes.reingest to None, regardless of what value was actually passed in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is implemented using a modified &amp;lt;code&amp;gt;obj_update&amp;lt;/code&amp;gt; which calls &amp;lt;code&amp;gt;obj_update_hook&amp;lt;/code&amp;gt;.  &amp;lt;code&amp;gt;update_in_place&amp;lt;/code&amp;gt; also helps.&lt;br /&gt;
&lt;br /&gt;
=== Delete package request ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/delete_aip/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;event_reason&amp;lt;/code&amp;gt;: Reason for deleting the AIP&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: UUID of the pipeline the delete request is from&lt;br /&gt;
** &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt;: User ID requesting the deletion. This is the ID of the user on the pipeline, and must be an integer greater than 0.&lt;br /&gt;
** &amp;lt;code&amp;gt;user_email&amp;lt;/code&amp;gt;:  Email of the user requesting the deletion.&lt;br /&gt;
&lt;br /&gt;
=== Recover AIP request ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/recover_aip/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;event_reason&amp;lt;/code&amp;gt;: Reason for recovering the AIP&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: URI of the pipeline the recovery request is from&lt;br /&gt;
** &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt;: User ID requesting the recovery. This is the ID of the user on the pipeline, and must be an integer greater than 0.&lt;br /&gt;
** &amp;lt;code&amp;gt;user_email&amp;lt;/code&amp;gt;:  Email of the user requesting the recovery.&lt;br /&gt;
&lt;br /&gt;
=== Download single file ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/extract_file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, HEAD&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path_to_file&amp;lt;/code&amp;gt;: Path to the file to download, relative to the location where is stored down to the lowest level.&amp;lt;br /&amp;gt;E.g.: a valid example is &amp;lt;code&amp;gt;test01-36d4efb7-83ba-46bf-a171-8c7b965d9dcb/data/objects/MARBLES.TGA&amp;lt;/code&amp;gt;, where &amp;lt;code&amp;gt;test01-36d4efb7-83ba-46bf-a171-8c7b965d9dcb&amp;lt;/code&amp;gt; contains both the transfer name and the identifier of the package. [[#Get package details | Get package details]] can provide these (see &amp;lt;code&amp;gt;current_path&amp;lt;/code&amp;gt; attribute).&lt;br /&gt;
* '''Response''': Stream of the requested file&lt;br /&gt;
&lt;br /&gt;
Returns a single file from the Package.  If the package is compressed, it downloads the whole AIP and extracts it.&lt;br /&gt;
&lt;br /&gt;
This responds to HEAD because AtoM uses HEAD to check for the existence of a file. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: HEAD and GET should not perform the same functions. HEAD should be updated to not return the file, and to only check for existence.  Currently, the storage service has no way to check if a file exists except by downloading and extracting this AIP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the package is in [[Storage Service#Arkivum | Arkivum]], the package may not actually be available.  This endpoint checks if the package is locally available. If it is, it is returned as normal. If not, it returns &amp;lt;code&amp;gt;202&amp;lt;/code&amp;gt; and emails the administrator about the attempted access.&lt;br /&gt;
&lt;br /&gt;
=== Download package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/download/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/download/&amp;lt;chunk number&amp;gt;/&amp;lt;/code&amp;gt; (for [[Storage Service#LOCKSS-o-matic | LOCKSS]] harvesting)&lt;br /&gt;
* '''Verb''': GET, HEAD&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': Stream of the package&lt;br /&gt;
&lt;br /&gt;
Returns the entire package as a single file.  If the AIP is uncompressed, create one file by using `tar`.&lt;br /&gt;
&lt;br /&gt;
If the download URL has a chunk number, it will attempt to serve the LOCKSS chunk specified for that package. If the package is not in LOCKSS, it will return the the whole package.&lt;br /&gt;
&lt;br /&gt;
This responds to HEAD because AtoM uses HEAD to check for the existence of a file. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: HEAD and GET should not perform the same functions. HEAD should be updated to not return the file, and to only check for existence.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the package is in [[Storage Service#Arkivum | Arkivum]], the package may not actually be available.  This endpoint checks if the package is locally available. If it is, it is returned as normal. If not, it returns &amp;lt;code&amp;gt;202&amp;lt;/code&amp;gt; and emails the administrator about the attempted access.&lt;br /&gt;
&lt;br /&gt;
=== Get pointer file ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/pointer_file/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': None&lt;br /&gt;
* '''Response''': Stream of the pointer file.&lt;br /&gt;
&lt;br /&gt;
=== Check fixity ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/check_fixity/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Parameters''': Query string parameters&lt;br /&gt;
** &amp;lt;code&amp;gt;force_local&amp;lt;/code&amp;gt;: If true, download and run fixity on the AIP locally, instead of using the Space-provided fixity if available.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True if the verification succeeded, False if the verification failed, None if the scan could not start&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: Human-readable string explaining the report; it will be empty for successful scans.&lt;br /&gt;
** &amp;lt;code&amp;gt;failures&amp;lt;/code&amp;gt;: List of 0 or more errors&lt;br /&gt;
** &amp;lt;code&amp;gt;timestamp&amp;lt;/code&amp;gt;: ISO-formated string with the datetime of the last fixity check. If the check was performed by an external system, this will be provided by that system. If not provided,or on error, it will be None.&lt;br /&gt;
&lt;br /&gt;
=== AIP storage callback request ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/send_callback/post_store/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
&lt;br /&gt;
Request to call any Callbacks configured to run post-storage for this AIP.&lt;br /&gt;
&lt;br /&gt;
In SS0.15 and above, this endpoint has been extended to support callbacks for AIP, AIC and DIP stored events.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Event''': Post-store AIP, AIC, or DIP  &lt;br /&gt;
* '''URI''': &amp;lt;code&amp;gt;https://scope.com/api/v1/dip/&amp;lt;package_uuid&amp;gt;/stored&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Method''': POST  &lt;br /&gt;
* '''Headers''':  &lt;br /&gt;
* - Authorization -&amp;gt; &amp;lt;code&amp;gt;Token &amp;lt;token&amp;gt;&amp;lt;/code&amp;gt;  &lt;br /&gt;
* - Origin -&amp;gt; &amp;lt;code&amp;gt;https://ss.com&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Expected Status''': 202  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: This only works on locally available AIPs (AIPs stored in Spaces that are available via a UNIX filesystem layer).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Get file information for package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/contents/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True&lt;br /&gt;
** &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt;: UUID of the package&lt;br /&gt;
** &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;: List of dictionaries with file information. Each dictionary has:&lt;br /&gt;
*** &amp;lt;code&amp;gt;source_id&amp;lt;/code&amp;gt;: UUID of the file to index&lt;br /&gt;
*** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
*** &amp;lt;code&amp;gt;source_package&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
*** &amp;lt;code&amp;gt;checksum&amp;lt;/code&amp;gt;: Checksum of the file, or an empty string&lt;br /&gt;
*** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number, or an empty string&lt;br /&gt;
*** &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;: UUID of the Archivematica dashboard this is from&lt;br /&gt;
&lt;br /&gt;
Returns metadata about every file within the package.&lt;br /&gt;
&lt;br /&gt;
=== Update file information for package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/contents/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': PUT&lt;br /&gt;
* '''Parameters''': JSON list of dictionaries with information on the files to be added. Each dict must have the following attributes:&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
** &amp;lt;code&amp;gt;fileuuid&amp;lt;/code&amp;gt;: UUID of the file to index&lt;br /&gt;
** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number, or an empty string&lt;br /&gt;
** &amp;lt;code&amp;gt;sipuuid&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
** &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;: UUID of the Archivematica dashboard this is from&lt;br /&gt;
&lt;br /&gt;
Adds a set of files to a package.&lt;br /&gt;
&lt;br /&gt;
=== Delete file information for package ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/contents/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
&lt;br /&gt;
Removes all file records associated with this package.&lt;br /&gt;
&lt;br /&gt;
=== Query file information on packages ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/metadata/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
* '''Parameters''': Query string parameters.  Must have at least one, but not all are required&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
** &amp;lt;code&amp;gt;fileuuid&amp;lt;/code&amp;gt;: UUID of the file&lt;br /&gt;
** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number&lt;br /&gt;
** &amp;lt;code&amp;gt;sipuuid&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
* '''Response''': JSON. List of dicts with file information about the files that match the query.&lt;br /&gt;
** &amp;lt;code&amp;gt;accessionid&amp;lt;/code&amp;gt;: Accession number, or an empty string&lt;br /&gt;
** &amp;lt;code&amp;gt;file_extension&amp;lt;/code&amp;gt;: File extension&lt;br /&gt;
** &amp;lt;code&amp;gt;filename&amp;lt;/code&amp;gt;: Name of the file, sans path.&lt;br /&gt;
** &amp;lt;code&amp;gt;relative_path&amp;lt;/code&amp;gt;: Relative path of the file inside the package&lt;br /&gt;
** &amp;lt;code&amp;gt;fileuuid&amp;lt;/code&amp;gt;: UUID of the file to index&lt;br /&gt;
** &amp;lt;code&amp;gt;sipuuid&amp;lt;/code&amp;gt;: UUID of the SIP this file is from&lt;br /&gt;
** &amp;lt;code&amp;gt;origin&amp;lt;/code&amp;gt;: UUID of the Archivematica dashboard this is from&lt;br /&gt;
&lt;br /&gt;
=== Reingest AIP ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/reingest/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;pipeline&amp;lt;/code&amp;gt;: UUID of the pipeline to reingest on&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_type&amp;lt;/code&amp;gt;: Type of reingest to start. One of &amp;lt;code&amp;gt;METADATA_ONLY&amp;lt;/code&amp;gt; (metadata-only reingest), &amp;lt;code&amp;gt;OBJECTS&amp;lt;/code&amp;gt; (partial reingest), &amp;lt;code&amp;gt;FULL&amp;lt;/code&amp;gt; (full reingest)&lt;br /&gt;
** &amp;lt;code&amp;gt;processing_config&amp;lt;/code&amp;gt;: Optional. Name of the processing configuration to use on full reingest&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Move Package ===&lt;br /&gt;
&lt;br /&gt;
This endpoint is introduced in v0.14.&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/move/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;location_uuid&amp;lt;/code&amp;gt;: UUID of the location to send the package. The location must have the same Purpose as the package's current location (e.g. AIP Storage, DIP Storage).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 $ curl -d 'location_uuid=7c5c48d4-50db-4018-b4b1-7ed29d1ef9d3	' -H&amp;quot;Authorization: ApiKey test:4525fd5272275caeac04a28447698c51&amp;quot; 'http://mysite.archivematica.org:8000/api/v2/file/8b8aa1a2-79c9-490e-b630-28f90bb7e654/move/'&lt;br /&gt;
&lt;br /&gt;
=== SWORD endpoints ===&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/sword/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/sword/media/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2/file/&amp;lt;UUID&amp;gt;/sword/state/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[Sword API]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.11.2_and_Storage_Service_0.16.1_release_notes&amp;diff=13489</id>
		<title>Archivematica 1.11.2 and Storage Service 0.16.1 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.11.2_and_Storage_Service_0.16.1_release_notes&amp;diff=13489"/>
		<updated>2020-05-28T14:58:17Z</updated>

		<summary type="html">&lt;p&gt;Sevein: Created page with &amp;quot;Home &amp;gt; Release Notes &amp;gt; Archivematica 1.11.2 and Storage Service 0.16.1  Work in progress.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.11.2 and Storage Service 0.16.1&lt;br /&gt;
&lt;br /&gt;
Work in progress.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13488</id>
		<title>Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13488"/>
		<updated>2020-05-28T14:57:35Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Archivematica 1.x releases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; Release Notes&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
&lt;br /&gt;
Release notes are prepared by Artefactual for each release of Archivematica. Most releases also have a corresponding release of the Storage System, and may also include corresponding releases for various dependencies and libraries (i.e. FIDO, Automation Tools) - be sure to check the release notes for more information.&lt;br /&gt;
&lt;br /&gt;
Major releases are '''bolded''', minor releases are not.&lt;br /&gt;
&lt;br /&gt;
Features, enhancements, and bug fixes are often sponsored by members of the Archivematica community who are dedicated to funding Archivematica's ongoing development and maintenance. Code contributors are individuals who write Archivematica code and [https://github.com/artefactual/archivematica/blob/stable/1.6.x/CONTRIBUTING.md| contribute it] back to the project. Archivematica couldn't continue to grow without sponsors and contributors - thank you!&lt;br /&gt;
&lt;br /&gt;
Questions about a release or the release notes? Ask on the [https://groups.google.com/forum/#!forum/archivematica| Archivematica Google Group!]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 1.x releases ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- WIP&lt;br /&gt;
* [[Archivematica_1.11.2_and_Storage_Service_0.16.1_release_notes|'''Archivematica 1.11.2 and Storage Service 0.16.1 Release Notes''']]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[Archivematica_1.11.1|Archivematica 1.11.1 Release Notes]] (Current release)&lt;br /&gt;
* [[Archivematica_1.11_and_Storage_Service_0.16_release_notes|'''Archivematica 1.11 and Storage Service 0.16 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.10.2|Archivematica 1.10.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10.1_release_notes|Archivematica 1.10.1 and Storage Service 0.15.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10_and_Storage_Service_0.15_release_notes|'''Archivematica 1.10 and Storage Service 0.15 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.9.3|Archivematica 1.9.3 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.9.2_release_notes|Archivematica 1.9.2 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9.1_and_Storage_Service_0.14.1_release_notes|Archivematica 1.9.1 and Storage Service 0.14.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9_and_Storage_Service_0.14_release_notes|'''Archivematica 1.9 and Storage Service 0.14 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.8.1_release_notes|Archivematica 1.8.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.8_and_Storage_Service_0.13_release_notes|'''Archivematica 1.8 and Storage Service 0.13 Release Notes''']]&lt;br /&gt;
*[[Archivematica 1.7.2_release_notes|Archivematica 1.7.2 Release Notes]] &lt;br /&gt;
*[[Storage Service 0.12 Release Notes|'''Storage Service 0.12 Release Notes''']] &lt;br /&gt;
*[[Archivematica 1.7.1_release_notes|Archivematica 1.7.1 Release Notes]]&lt;br /&gt;
*[[Storage Service 0.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.7_and_Storage_Service_0.11_release_notes|'''Archivematica 1.7 and Storage Service 0.11 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.6.1_release_notes|Archivematica 1.6.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.6_release_notes|'''Archivematica 1.6 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.5.1_Release_Notes|Archivematica 1.5.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.5_Release_Notes|'''Archivematica 1.5 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.4.1_Release_Notes|Archivematica 1.4.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.4_Release_Notes|'''Archivematica 1.4 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.3.2_Release_Notes|Archivematica 1.3.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3.1_Release_Notes|Archivematica 1.3.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3_Release_Notes|'''Archivematica 1.3 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.2_Release_Notes|'''Archivematica 1.2 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.1_Release_Notes|'''Archivematica 1.1 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.0_Release_Notes|'''Archivematica 1.0 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 0.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_0.10-beta_Release_Notes|'''Archivematica 0.10 Release Notes''']] &lt;br /&gt;
* [[Archivematica_0.9_Release_Notes|'''Archivematica 0.9 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.8 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.7.1_Release_Notes|Archivematica 0.7.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_0.7_Release_Notes|'''Archivematica 0.7 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.6 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
&lt;br /&gt;
* [[Major_release_notes|Template for major releases]]&lt;br /&gt;
* [[Minor_release_notes|Template for minor releases]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13487</id>
		<title>Release Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Notes&amp;diff=13487"/>
		<updated>2020-05-28T14:56:34Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Archivematica 1.x releases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; Release Notes&lt;br /&gt;
&lt;br /&gt;
== About ==&lt;br /&gt;
&lt;br /&gt;
Release notes are prepared by Artefactual for each release of Archivematica. Most releases also have a corresponding release of the Storage System, and may also include corresponding releases for various dependencies and libraries (i.e. FIDO, Automation Tools) - be sure to check the release notes for more information.&lt;br /&gt;
&lt;br /&gt;
Major releases are '''bolded''', minor releases are not.&lt;br /&gt;
&lt;br /&gt;
Features, enhancements, and bug fixes are often sponsored by members of the Archivematica community who are dedicated to funding Archivematica's ongoing development and maintenance. Code contributors are individuals who write Archivematica code and [https://github.com/artefactual/archivematica/blob/stable/1.6.x/CONTRIBUTING.md| contribute it] back to the project. Archivematica couldn't continue to grow without sponsors and contributors - thank you!&lt;br /&gt;
&lt;br /&gt;
Questions about a release or the release notes? Ask on the [https://groups.google.com/forum/#!forum/archivematica| Archivematica Google Group!]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 1.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_1.11.2_and_Storage_Service_0.16.1_release_notes|'''Archivematica 1.11.2 and Storage Service 0.16.1 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.11.1|Archivematica 1.11.1 Release Notes]] (Current release)&lt;br /&gt;
* [[Archivematica_1.11_and_Storage_Service_0.16_release_notes|'''Archivematica 1.11 and Storage Service 0.16 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.10.2|Archivematica 1.10.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10.1_release_notes|Archivematica 1.10.1 and Storage Service 0.15.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.10_and_Storage_Service_0.15_release_notes|'''Archivematica 1.10 and Storage Service 0.15 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.9.3|Archivematica 1.9.3 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.9.2_release_notes|Archivematica 1.9.2 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9.1_and_Storage_Service_0.14.1_release_notes|Archivematica 1.9.1 and Storage Service 0.14.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.9_and_Storage_Service_0.14_release_notes|'''Archivematica 1.9 and Storage Service 0.14 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.8.1_release_notes|Archivematica 1.8.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.8_and_Storage_Service_0.13_release_notes|'''Archivematica 1.8 and Storage Service 0.13 Release Notes''']]&lt;br /&gt;
*[[Archivematica 1.7.2_release_notes|Archivematica 1.7.2 Release Notes]] &lt;br /&gt;
*[[Storage Service 0.12 Release Notes|'''Storage Service 0.12 Release Notes''']] &lt;br /&gt;
*[[Archivematica 1.7.1_release_notes|Archivematica 1.7.1 Release Notes]]&lt;br /&gt;
*[[Storage Service 0.11.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.7_and_Storage_Service_0.11_release_notes|'''Archivematica 1.7 and Storage Service 0.11 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.6.1_release_notes|Archivematica 1.6.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_1.6_release_notes|'''Archivematica 1.6 Release Notes''']] &lt;br /&gt;
* [[Archivematica_1.5.1_Release_Notes|Archivematica 1.5.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.5_Release_Notes|'''Archivematica 1.5 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.4.1_Release_Notes|Archivematica 1.4.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.4_Release_Notes|'''Archivematica 1.4 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.3.2_Release_Notes|Archivematica 1.3.2 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3.1_Release_Notes|Archivematica 1.3.1 Release Notes]]&lt;br /&gt;
* [[Archivematica_1.3_Release_Notes|'''Archivematica 1.3 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.2_Release_Notes|'''Archivematica 1.2 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.1_Release_Notes|'''Archivematica 1.1 Release Notes''']]&lt;br /&gt;
* [[Archivematica_1.0_Release_Notes|'''Archivematica 1.0 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
== Archivematica 0.x releases ==&lt;br /&gt;
&lt;br /&gt;
* [[Archivematica_0.10-beta_Release_Notes|'''Archivematica 0.10 Release Notes''']] &lt;br /&gt;
* [[Archivematica_0.9_Release_Notes|'''Archivematica 0.9 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.8 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.7.1_Release_Notes|Archivematica 0.7.1 Release Notes]] &lt;br /&gt;
* [[Archivematica_0.7_Release_Notes|'''Archivematica 0.7 Release Notes''']]&lt;br /&gt;
* [[Archivematica_0.8_Release_Notes|'''Archivematica 0.6 Release Notes''']]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Templates ==&lt;br /&gt;
&lt;br /&gt;
* [[Major_release_notes|Template for major releases]]&lt;br /&gt;
* [[Minor_release_notes|Template for minor releases]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.11_and_Storage_Service_0.16_release_notes&amp;diff=13454</id>
		<title>Archivematica 1.11 and Storage Service 0.16 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.11_and_Storage_Service_0.16_release_notes&amp;diff=13454"/>
		<updated>2020-03-31T20:55:17Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Supported environments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.11 and Storage Service 0.16&lt;br /&gt;
&lt;br /&gt;
'''March ## 2020'''&lt;br /&gt;
&lt;br /&gt;
==Supported environments==&lt;br /&gt;
&lt;br /&gt;
Please see the [https://www.archivematica.org/en/docs/archivematica-1.11/admin-manual/installation-setup/installation/installation/#installation installation instructions].&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.11 and Storage Service 0.16 have been tested in the following environments:&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 16.04 64-bit Server Edition&lt;br /&gt;
* Ubuntu 18.04 64-bit Server Edition&lt;br /&gt;
* CentOS 7 64-bit&lt;br /&gt;
&lt;br /&gt;
Archivematica is open source and doesn't have support. [https://www.artefactual.com/ Artefactual] provides support, and might be willing to support more (or possibly fewer) environments.&lt;br /&gt;
&lt;br /&gt;
For development purposes, most of our developers prefer to use Docker containers. These and all above supported environments are linked from the installation instructions above.&lt;br /&gt;
&lt;br /&gt;
==Added==&lt;br /&gt;
&lt;br /&gt;
===PREMIS Event import===&lt;br /&gt;
&lt;br /&gt;
This feature allows the import of PREMIS events which took place prior to processing in Archivematica. The PREMIS events are written in an xml format (see [https://github.com/artefactual/archivematica-sampledata/blob/master/SampleTransfers/PremisImporter/metadata/premis.xml sample data]) and placed in the metadata folder of a transfer. The PREMIS events are then written to the AIP METS file.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Piql and the Norwegian Health Archives. Thank you!&lt;br /&gt;
&lt;br /&gt;
* [https://www.archivematica.org/en/docs/archivematica-1.11/user-manual/transfer/import-metadata/#premis-xml Documentation]&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/710&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===S3 as a transfer source===&lt;br /&gt;
&lt;br /&gt;
This allows an Amazon S3 space to be used as a transfer source location. This feature is a community PR from Wellcome Collection. Thank you!&lt;br /&gt;
&lt;br /&gt;
* [https://www.archivematica.org/en/docs/storage-service-0.16/administrators/#s3-amazon Documentation]&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/975&lt;br /&gt;
&lt;br /&gt;
===Easier access to AIP METS===&lt;br /&gt;
&lt;br /&gt;
This feature add a &amp;quot;View METS&amp;quot; button in the user interface when viewing an AIP in Archival Storage. The METS file is then downloaded to your desktop for your viewing pleasure. &lt;br /&gt;
&lt;br /&gt;
* Documentation: pending&lt;br /&gt;
*Issue: https://github.com/archivematica/Issues/issues/644&lt;br /&gt;
&lt;br /&gt;
===Zipped transfers===&lt;br /&gt;
&lt;br /&gt;
This is a new transfer type that enables a zipped (non-bagged) package to be a transfer. Similar to the zipped bag transfer, the name of the package is used as the transfer name. This is a community contribution by Wellcome Collection. Thank you!&lt;br /&gt;
&lt;br /&gt;
* [https://www.archivematica.org/en/docs/archivematica-1.11/user-manual/transfer/transfer/#transfer-types Documentation]&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/682&lt;br /&gt;
&lt;br /&gt;
===Add package name as configurable value to call backs===&lt;br /&gt;
&lt;br /&gt;
When using AIP, AIC, and DIP store callbacks, the package_name is now a configurable value. This is a community contribution from Concordia University Libraries, who developed this to facilitate an EPrints to Archivematica workflow. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Documentation: pending&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/978&lt;br /&gt;
&lt;br /&gt;
==Changed==&lt;br /&gt;
&lt;br /&gt;
===Performance and monitoring improvements===&lt;br /&gt;
&lt;br /&gt;
This is a collection of issues fixed that improve performance for processing at scale, and also enable performance monitoring through external applications such as Prometheus and Grafana. &lt;br /&gt;
&lt;br /&gt;
These updates have been sponsored by Piql and the Norwegian Health Archives. Thank you!&lt;br /&gt;
&lt;br /&gt;
* [https://www.archivematica.org/en/docs/archivematica-1.11/admin-manual/installation-setup/customization/instrumentation/ Documentation]&lt;br /&gt;
* Issues:&lt;br /&gt;
** Commonly used database tables don't have indexes: https://github.com/archivematica/Issues/issues/907&lt;br /&gt;
** MCPServer should reuse database connections: https://github.com/archivematica/Issues/issues/913 &lt;br /&gt;
** Archivematica does not output metrics to analyze its performance: https://github.com/archivematica/Issues/issues/906&lt;br /&gt;
** MCPService must process all transfer packages sent to it at once: https://github.com/archivematica/Issues/issues/911&lt;br /&gt;
** Some jobs run even when disabled: https://github.com/archivematica/Issues/issues/866 &lt;br /&gt;
** &amp;quot;Check transfer directory for objects&amp;quot; executed multiple times: https://github.com/archivematica/Issues/issues/782&lt;br /&gt;
** index_aip crashes elasticsearch for large transfers: https://github.com/artefactual/archivematica/issues/1199&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Improvements for full disks===&lt;br /&gt;
&lt;br /&gt;
Managing workflows when various spaces on the disk fill up is a recognized pain point for Archivematica users. This project makes &lt;br /&gt;
three overall changes to storage space reporting in Archivematica and the Storage Service in an effort to mitigate these issues:&lt;br /&gt;
* Change the processing storage usage page to clarify storage paths/locations and improve usability&lt;br /&gt;
* Improve the transfer source location and AIP storage location pages to clarify storage paths/locations and improve usability&lt;br /&gt;
* Change Storage Service functionality to support the above changes.&lt;br /&gt;
&lt;br /&gt;
* Documentation: pending&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues?q=label%3A%22RED+TEAM%3A+disk+full+project%22+is%3Aclosed Issues]&lt;br /&gt;
&lt;br /&gt;
===Changes to default normalization for videos/images===&lt;br /&gt;
&lt;br /&gt;
Archivematica's default FPR normalization rules were creating in some cases very large video files for arguably no sound preservation reason. After discussion and community consultation, we have removed default video normalization rules. Users can still &amp;quot;opt in&amp;quot; to the rules but they are not enabled by default in '''new or upgraded''' installations. Any custom changes you have made to your own FPR will still be maintained after upgrade. We also removed default rules for preservation for PNG, JPG, GIF and DNG still images. For full details and affected formats, see [https://github.com/archivematica/Issues/issues/912#issuecomment-565197594 this comment] in the issue ticket.&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/912&lt;br /&gt;
&lt;br /&gt;
===Allow users to choose whether to receive fail report emails===&lt;br /&gt;
&lt;br /&gt;
Users can now be configured to either receive fail report emails or not (previously all users received the emails). This is a community contribution from Hillel Arnold at Rockefeller Archive Center- thank you!&lt;br /&gt;
&lt;br /&gt;
* [https://www.archivematica.org/en/docs/archivematica-1.11/user-manual/administer/dashboard-admin/#dashboard-users Documentation] &lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/709&lt;br /&gt;
&lt;br /&gt;
===Change name of sanitize names micro-service===&lt;br /&gt;
&lt;br /&gt;
Following reading a paper by [https://medium.com/on-archivy/invisible-defaults-and-perceived-limitations-processing-the-juan-gelman-files-4187fdd36759 Elvia Arroyo-Ramirez] we decided to change the name of this micro-service and align it more with the Library of Congress events vocabulary. The micro-service now displays as &amp;quot;Change transfer filenames&amp;quot; and &amp;quot;Change SIP filenames&amp;quot; in the Transfer and Ingest tabs respectively. &lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/230&lt;br /&gt;
&lt;br /&gt;
===Drop-down menu orders===&lt;br /&gt;
&lt;br /&gt;
In short, the order of options in drop down menus were all over the place and it was driving us nuts so we finally tried to put them in more logical orders.&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/artefactual/archivematica/issues/891&lt;br /&gt;
&lt;br /&gt;
==Removed==&lt;br /&gt;
&lt;br /&gt;
===Quarantine===&lt;br /&gt;
&lt;br /&gt;
As [https://groups.google.com/d/msg/archivematica/rGMsO8htF38/Pl-eLimwAgAJ discussed on the community forum] the quarantine micro-service has been removed from Archivematica in this release.&lt;br /&gt;
* Issue: https://github.com/artefactual/archivematica/issues/598&lt;br /&gt;
* ADR: https://github.com/archivematica/archivematica-architectural-decisions/blob/master/0008-remove-quarantine.md&lt;br /&gt;
&lt;br /&gt;
===Add next disk image button===&lt;br /&gt;
&lt;br /&gt;
This button seemed redundant to the workflow so it's been removed.&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/290&lt;br /&gt;
&lt;br /&gt;
==Fixed==&lt;br /&gt;
&lt;br /&gt;
* Non-Dublin Core columns cause metadata re-ingest to fail ('''Sponsored''' by Piql/NHA- thank you!): https://github.com/archivematica/Issues/issues/1139&lt;br /&gt;
* RuntimeError which was causing sporadic workflow issues ('''Community contribution''' by Jorik van Kemanade- thank you!): https://github.com/archivematica/Issues/issues/1108&lt;br /&gt;
* Reindexing large transfer backlog error ('''Community contribution''' by Matt LaChance- thank you!): https://github.com/archivematica/Issues/issues/962&lt;br /&gt;
* Parallel bzip2 compression failing in am19rpm: https://github.com/archivematica/Issues/issues/606&lt;br /&gt;
* Fixity API endpoint and Fixity tool tail to check replicated AIPs ('''Sponsored''' by Piql/NHA- thank you!): https://github.com/archivematica/Issues/issues/1054&lt;br /&gt;
* Decision points break with 10 choices or more ('''Sponsored''' by Picturae- thank you!): https://github.com/archivematica/Issues/issues/850&lt;br /&gt;
* S3 us-east-1 fails when chosen as region in the Storage Service ('''Community contribution''' by Joseph Anderson, Fashion Institution of Technology- thank you!): https://github.com/archivematica/Issues/issues/922 &lt;br /&gt;
* &amp;quot;Remove bagged files&amp;quot; reports failure when thumbnails aren't created: https://github.com/archivematica/Issues/issues/651 &lt;br /&gt;
* Directories are greyed out while they still contain files available for arrangement ('''Sponsored''' by Simon Fraser University Archives- thank you!): https://github.com/archivematica/Issues/issues/822 &lt;br /&gt;
* Dublin Core dmdSec not created if filename has diacritics: https://github.com/archivematica/Issues/issues/1073 &lt;br /&gt;
* Cannot add metadata files through the UI ('''Sponsored''' by Piql/NHA- thank you!): https://github.com/archivematica/Issues/issues/1090 &lt;br /&gt;
* GPG/TRANSFORMKEY being lost when reingesting an encrypted AIP: https://github.com/archivematica/Issues/issues/803&lt;br /&gt;
* Pointer file uses a mix of PREMIS2 and PREMIS3: https://github.com/archivematica/Issues/issues/820 &lt;br /&gt;
* Failure to match in ArchivesSpace DIP Upload shows as success ('''Sponsored''' by Rockefeller Archive Center- thank you!): https://github.com/archivematica/Issues/issues/258&lt;br /&gt;
* Allow S3 credentials to be blank ('''Community contribution''' by Wellcome Collection- thank you!): https://github.com/archivematica/Issues/issues/712&lt;br /&gt;
* Version of METS in mets-reader-writer is an older version: https://github.com/archivematica/Issues/issues/637 &lt;br /&gt;
* S3 bucket name can't be configured: https://github.com/archivematica/Issues/issues/558 &lt;br /&gt;
* Pointer files for reingested AIP has two compression events: https://github.com/archivematica/Issues/issues/1062 &lt;br /&gt;
* Bags with metadata fail to ingest when additional metadata is added by automation tools ('''Sponsored''' by the Museum of Modern Art- thank you!): https://github.com/archivematica/Issues/issues/1022&lt;br /&gt;
* Transfer browser breaks if transfer source contains read protected directories: https://github.com/archivematica/Issues/issues/1019&lt;br /&gt;
* AIP status in dashboard does not update after AIP is deleted: https://github.com/archivematica/Issues/issues/1014&lt;br /&gt;
* SIPs started from ArchivesSpace pane fail when a parent object does not have a title ('''Community contribution''' by Dallas Pillen- thank you!): https://github.com/archivematica/Issues/issues/799 &lt;br /&gt;
* Cannot create user with accented characters/diacritics: https://github.com/archivematica/Issues/issues/261 &lt;br /&gt;
* AIP METS and pointer METS files reference outdated METS schema: https://github.com/archivematica/Issues/issues/949&lt;br /&gt;
* Cannot start a transfer if transfer name has diacritics: https://github.com/archivematica/Issues/issues/1051&lt;br /&gt;
* Non-default processing configuration is not copied over for zipped transfers ('''Community contribution''' by Wellcome Collection- thank you!): https://github.com/archivematica/Issues/issues/771 &lt;br /&gt;
* Directory level AIP metadata is not indexed: https://github.com/archivematica/Issues/issues/888 &lt;br /&gt;
* Descriptive metadata added via GUI is not indexed for searching: https://github.com/archivematica/Issues/issues/547 &lt;br /&gt;
* External PIDs are not searchable in Archival storage ('''Sponsored''' by Piql/NHA- thank you!): https://github.com/archivematica/Issues/issues/1006&lt;br /&gt;
* Identifiers.json import fails if 'Bind PIDs' config option is not set to 'yes' ('''Sponsored''' by Piql/NHA- thank you!): https://github.com/archivematica/Issues/issues/963&lt;br /&gt;
* Ldap auth fails on dashboard ('''Sponsored''' by Piql/NHA- thank you!): https://github.com/archivematica/Issues/issues/841&lt;br /&gt;
* Cannot create storage service location via amclient ('''Sponsored''' by International Institute of Social History- thank you!): https://github.com/archivematica/Issues/issues/905 &lt;br /&gt;
* It is difficult to combine status for different package types ('''Community contribution''' by Rockefeller Archive Center- thank you!): https://github.com/archivematica/Issues/issues/972&lt;br /&gt;
* Format identification errors are not being output from the FPR command ('''Community contribution''' by Wellcome Collection- thank you!): https://github.com/archivematica/Issues/issues/882&lt;br /&gt;
* Time zone setting not configurable ('''Sponsored''' by Piql/NHA- thank you!): https://github.com/archivematica/Issues/issues/1143&lt;br /&gt;
* Cannot store AIP with large files ('''Community contribution''' by Jorik van Kemenade- thank you!): https://github.com/archivematica/Issues/issues/981&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And more! See https://github.com/archivematica/Issues/milestone/11 for full list of issues addresses in the 1.11 release.&lt;br /&gt;
&lt;br /&gt;
==Upgraded tools and dependencies==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Update to PRONOM v.96 https://github.com/archivematica/Issues/issues/791&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
&lt;br /&gt;
Please note that due to [https://github.com/archivematica/Issues/issues/1149 Issue 1149] the package replication functionality in the Storage Service does not work in this release. We anticipate fixing in the near future in a point release.&lt;br /&gt;
&lt;br /&gt;
==End of life dependencies==&lt;br /&gt;
&lt;br /&gt;
Python 2 has reached end of life. The Archivematica delivery team along with a number of community contributors has been working on upgrading this dependency. This release merges all Python 3 code that was ready in advance of the release, while still supporting Python 2. Components which have been upgraded and/or tested using Python 3 include:&lt;br /&gt;
* Dashboard: https://github.com/archivematica/Issues/issues/810&lt;br /&gt;
* Storage Service: https://github.com/archivematica/Issues/issues/806 '''Note''' We were not able to test some storage spaces, including Sword2, LOCKSS-o-matic and DSpace.&lt;br /&gt;
* amclient: https://github.com/archivematica/Issues/issues/817&lt;br /&gt;
* Automation tools: https://github.com/archivematica/Issues/issues/815&lt;br /&gt;
* Fixity: https://github.com/archivematica/Issues/issues/814&lt;br /&gt;
* am/compose: https://github.com/archivematica/Issues/issues/804&lt;br /&gt;
* Fido: https://github.com/archivematica/Issues/issues/847&lt;br /&gt;
&lt;br /&gt;
We will continue to work toward full Python 3 use in upcoming releases.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.11_and_Storage_Service_0.16_release_notes&amp;diff=13453</id>
		<title>Archivematica 1.11 and Storage Service 0.16 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.11_and_Storage_Service_0.16_release_notes&amp;diff=13453"/>
		<updated>2020-03-31T20:54:07Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Supported environments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.11 and Storage Service 0.16&lt;br /&gt;
&lt;br /&gt;
'''March ## 2020'''&lt;br /&gt;
&lt;br /&gt;
==Supported environments==&lt;br /&gt;
&lt;br /&gt;
Please see the [https://www.archivematica.org/en/docs/archivematica-1.11/admin-manual/installation-setup/installation/installation/#installation installation instructions].&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.11 and Storage Service 0.16 have been tested in the following environments:&lt;br /&gt;
&lt;br /&gt;
* Ubuntu 16.04 64-bit Server Edition&lt;br /&gt;
* Ubuntu 18.04 64-bit Server Edition&lt;br /&gt;
* CentOS 7 64-bit&lt;br /&gt;
&lt;br /&gt;
Archivematica is open source and doesn't have support. Artefactual provides support, and might be willing to support more (or possibly fewer) environments.&lt;br /&gt;
&lt;br /&gt;
For development purposes, most of our developers prefer to use Docker containers. These and all above supported environments are linked from the installation instructions above.&lt;br /&gt;
&lt;br /&gt;
==Added==&lt;br /&gt;
&lt;br /&gt;
===PREMIS Event import===&lt;br /&gt;
&lt;br /&gt;
This feature allows the import of PREMIS events which took place prior to processing in Archivematica. The PREMIS events are written in an xml format (see [https://github.com/artefactual/archivematica-sampledata/blob/master/SampleTransfers/PremisImporter/metadata/premis.xml sample data]) and placed in the metadata folder of a transfer. The PREMIS events are then written to the AIP METS file.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Piql and the Norwegian Health Archives. Thank you!&lt;br /&gt;
&lt;br /&gt;
* [https://www.archivematica.org/en/docs/archivematica-1.11/user-manual/transfer/import-metadata/#premis-xml Documentation]&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/710&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===S3 as a transfer source===&lt;br /&gt;
&lt;br /&gt;
This allows an Amazon S3 space to be used as a transfer source location. This feature is a community PR from Wellcome Collection. Thank you!&lt;br /&gt;
&lt;br /&gt;
* [https://www.archivematica.org/en/docs/storage-service-0.16/administrators/#s3-amazon Documentation]&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/975&lt;br /&gt;
&lt;br /&gt;
===Easier access to AIP METS===&lt;br /&gt;
&lt;br /&gt;
This feature add a &amp;quot;View METS&amp;quot; button in the user interface when viewing an AIP in Archival Storage. The METS file is then downloaded to your desktop for your viewing pleasure. &lt;br /&gt;
&lt;br /&gt;
* Documentation: pending&lt;br /&gt;
*Issue: https://github.com/archivematica/Issues/issues/644&lt;br /&gt;
&lt;br /&gt;
===Zipped transfers===&lt;br /&gt;
&lt;br /&gt;
This is a new transfer type that enables a zipped (non-bagged) package to be a transfer. Similar to the zipped bag transfer, the name of the package is used as the transfer name. This is a community contribution by Wellcome Collection. Thank you!&lt;br /&gt;
&lt;br /&gt;
* [https://www.archivematica.org/en/docs/archivematica-1.11/user-manual/transfer/transfer/#transfer-types Documentation]&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/682&lt;br /&gt;
&lt;br /&gt;
===Add package name as configurable value to call backs===&lt;br /&gt;
&lt;br /&gt;
When using AIP, AIC, and DIP store callbacks, the package_name is now a configurable value. This is a community contribution from Concordia University Libraries, who developed this to facilitate an EPrints to Archivematica workflow. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Documentation: pending&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/978&lt;br /&gt;
&lt;br /&gt;
==Changed==&lt;br /&gt;
&lt;br /&gt;
===Performance and monitoring improvements===&lt;br /&gt;
&lt;br /&gt;
This is a collection of issues fixed that improve performance for processing at scale, and also enable performance monitoring through external applications such as Prometheus and Grafana. &lt;br /&gt;
&lt;br /&gt;
These updates have been sponsored by Piql and the Norwegian Health Archives. Thank you!&lt;br /&gt;
&lt;br /&gt;
* [https://www.archivematica.org/en/docs/archivematica-1.11/admin-manual/installation-setup/customization/instrumentation/ Documentation]&lt;br /&gt;
* Issues:&lt;br /&gt;
** Commonly used database tables don't have indexes: https://github.com/archivematica/Issues/issues/907&lt;br /&gt;
** MCPServer should reuse database connections: https://github.com/archivematica/Issues/issues/913 &lt;br /&gt;
** Archivematica does not output metrics to analyze its performance: https://github.com/archivematica/Issues/issues/906&lt;br /&gt;
** MCPService must process all transfer packages sent to it at once: https://github.com/archivematica/Issues/issues/911&lt;br /&gt;
** Some jobs run even when disabled: https://github.com/archivematica/Issues/issues/866 &lt;br /&gt;
** &amp;quot;Check transfer directory for objects&amp;quot; executed multiple times: https://github.com/archivematica/Issues/issues/782&lt;br /&gt;
** index_aip crashes elasticsearch for large transfers: https://github.com/artefactual/archivematica/issues/1199&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Improvements for full disks===&lt;br /&gt;
&lt;br /&gt;
Managing workflows when various spaces on the disk fill up is a recognized pain point for Archivematica users. This project makes &lt;br /&gt;
three overall changes to storage space reporting in Archivematica and the Storage Service in an effort to mitigate these issues:&lt;br /&gt;
* Change the processing storage usage page to clarify storage paths/locations and improve usability&lt;br /&gt;
* Improve the transfer source location and AIP storage location pages to clarify storage paths/locations and improve usability&lt;br /&gt;
* Change Storage Service functionality to support the above changes.&lt;br /&gt;
&lt;br /&gt;
* Documentation: pending&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues?q=label%3A%22RED+TEAM%3A+disk+full+project%22+is%3Aclosed Issues]&lt;br /&gt;
&lt;br /&gt;
===Changes to default normalization for videos/images===&lt;br /&gt;
&lt;br /&gt;
Archivematica's default FPR normalization rules were creating in some cases very large video files for arguably no sound preservation reason. After discussion and community consultation, we have removed default video normalization rules. Users can still &amp;quot;opt in&amp;quot; to the rules but they are not enabled by default in '''new or upgraded''' installations. Any custom changes you have made to your own FPR will still be maintained after upgrade. We also removed default rules for preservation for PNG, JPG, GIF and DNG still images. For full details and affected formats, see [https://github.com/archivematica/Issues/issues/912#issuecomment-565197594 this comment] in the issue ticket.&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/912&lt;br /&gt;
&lt;br /&gt;
===Allow users to choose whether to receive fail report emails===&lt;br /&gt;
&lt;br /&gt;
Users can now be configured to either receive fail report emails or not (previously all users received the emails). This is a community contribution from Hillel Arnold at Rockefeller Archive Center- thank you!&lt;br /&gt;
&lt;br /&gt;
* [https://www.archivematica.org/en/docs/archivematica-1.11/user-manual/administer/dashboard-admin/#dashboard-users Documentation] &lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/709&lt;br /&gt;
&lt;br /&gt;
===Change name of sanitize names micro-service===&lt;br /&gt;
&lt;br /&gt;
Following reading a paper by [https://medium.com/on-archivy/invisible-defaults-and-perceived-limitations-processing-the-juan-gelman-files-4187fdd36759 Elvia Arroyo-Ramirez] we decided to change the name of this micro-service and align it more with the Library of Congress events vocabulary. The micro-service now displays as &amp;quot;Change transfer filenames&amp;quot; and &amp;quot;Change SIP filenames&amp;quot; in the Transfer and Ingest tabs respectively. &lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/230&lt;br /&gt;
&lt;br /&gt;
===Drop-down menu orders===&lt;br /&gt;
&lt;br /&gt;
In short, the order of options in drop down menus were all over the place and it was driving us nuts so we finally tried to put them in more logical orders.&lt;br /&gt;
&lt;br /&gt;
* Issue: https://github.com/artefactual/archivematica/issues/891&lt;br /&gt;
&lt;br /&gt;
==Removed==&lt;br /&gt;
&lt;br /&gt;
===Quarantine===&lt;br /&gt;
&lt;br /&gt;
As [https://groups.google.com/d/msg/archivematica/rGMsO8htF38/Pl-eLimwAgAJ discussed on the community forum] the quarantine micro-service has been removed from Archivematica in this release.&lt;br /&gt;
* Issue: https://github.com/artefactual/archivematica/issues/598&lt;br /&gt;
* ADR: https://github.com/archivematica/archivematica-architectural-decisions/blob/master/0008-remove-quarantine.md&lt;br /&gt;
&lt;br /&gt;
===Add next disk image button===&lt;br /&gt;
&lt;br /&gt;
This button seemed redundant to the workflow so it's been removed.&lt;br /&gt;
* Issue: https://github.com/archivematica/Issues/issues/290&lt;br /&gt;
&lt;br /&gt;
==Fixed==&lt;br /&gt;
&lt;br /&gt;
* Non-Dublin Core columns cause metadata re-ingest to fail ('''Sponsored''' by Piql/NHA- thank you!): https://github.com/archivematica/Issues/issues/1139&lt;br /&gt;
* RuntimeError which was causing sporadic workflow issues ('''Community contribution''' by Jorik van Kemanade- thank you!): https://github.com/archivematica/Issues/issues/1108&lt;br /&gt;
* Reindexing large transfer backlog error ('''Community contribution''' by Matt LaChance- thank you!): https://github.com/archivematica/Issues/issues/962&lt;br /&gt;
* Parallel bzip2 compression failing in am19rpm: https://github.com/archivematica/Issues/issues/606&lt;br /&gt;
* Fixity API endpoint and Fixity tool tail to check replicated AIPs ('''Sponsored''' by Piql/NHA- thank you!): https://github.com/archivematica/Issues/issues/1054&lt;br /&gt;
* Decision points break with 10 choices or more ('''Sponsored''' by Picturae- thank you!): https://github.com/archivematica/Issues/issues/850&lt;br /&gt;
* S3 us-east-1 fails when chosen as region in the Storage Service ('''Community contribution''' by Joseph Anderson, Fashion Institution of Technology- thank you!): https://github.com/archivematica/Issues/issues/922 &lt;br /&gt;
* &amp;quot;Remove bagged files&amp;quot; reports failure when thumbnails aren't created: https://github.com/archivematica/Issues/issues/651 &lt;br /&gt;
* Directories are greyed out while they still contain files available for arrangement ('''Sponsored''' by Simon Fraser University Archives- thank you!): https://github.com/archivematica/Issues/issues/822 &lt;br /&gt;
* Dublin Core dmdSec not created if filename has diacritics: https://github.com/archivematica/Issues/issues/1073 &lt;br /&gt;
* Cannot add metadata files through the UI ('''Sponsored''' by Piql/NHA- thank you!): https://github.com/archivematica/Issues/issues/1090 &lt;br /&gt;
* GPG/TRANSFORMKEY being lost when reingesting an encrypted AIP: https://github.com/archivematica/Issues/issues/803&lt;br /&gt;
* Pointer file uses a mix of PREMIS2 and PREMIS3: https://github.com/archivematica/Issues/issues/820 &lt;br /&gt;
* Failure to match in ArchivesSpace DIP Upload shows as success ('''Sponsored''' by Rockefeller Archive Center- thank you!): https://github.com/archivematica/Issues/issues/258&lt;br /&gt;
* Allow S3 credentials to be blank ('''Community contribution''' by Wellcome Collection- thank you!): https://github.com/archivematica/Issues/issues/712&lt;br /&gt;
* Version of METS in mets-reader-writer is an older version: https://github.com/archivematica/Issues/issues/637 &lt;br /&gt;
* S3 bucket name can't be configured: https://github.com/archivematica/Issues/issues/558 &lt;br /&gt;
* Pointer files for reingested AIP has two compression events: https://github.com/archivematica/Issues/issues/1062 &lt;br /&gt;
* Bags with metadata fail to ingest when additional metadata is added by automation tools ('''Sponsored''' by the Museum of Modern Art- thank you!): https://github.com/archivematica/Issues/issues/1022&lt;br /&gt;
* Transfer browser breaks if transfer source contains read protected directories: https://github.com/archivematica/Issues/issues/1019&lt;br /&gt;
* AIP status in dashboard does not update after AIP is deleted: https://github.com/archivematica/Issues/issues/1014&lt;br /&gt;
* SIPs started from ArchivesSpace pane fail when a parent object does not have a title ('''Community contribution''' by Dallas Pillen- thank you!): https://github.com/archivematica/Issues/issues/799 &lt;br /&gt;
* Cannot create user with accented characters/diacritics: https://github.com/archivematica/Issues/issues/261 &lt;br /&gt;
* AIP METS and pointer METS files reference outdated METS schema: https://github.com/archivematica/Issues/issues/949&lt;br /&gt;
* Cannot start a transfer if transfer name has diacritics: https://github.com/archivematica/Issues/issues/1051&lt;br /&gt;
* Non-default processing configuration is not copied over for zipped transfers ('''Community contribution''' by Wellcome Collection- thank you!): https://github.com/archivematica/Issues/issues/771 &lt;br /&gt;
* Directory level AIP metadata is not indexed: https://github.com/archivematica/Issues/issues/888 &lt;br /&gt;
* Descriptive metadata added via GUI is not indexed for searching: https://github.com/archivematica/Issues/issues/547 &lt;br /&gt;
* External PIDs are not searchable in Archival storage ('''Sponsored''' by Piql/NHA- thank you!): https://github.com/archivematica/Issues/issues/1006&lt;br /&gt;
* Identifiers.json import fails if 'Bind PIDs' config option is not set to 'yes' ('''Sponsored''' by Piql/NHA- thank you!): https://github.com/archivematica/Issues/issues/963&lt;br /&gt;
* Ldap auth fails on dashboard ('''Sponsored''' by Piql/NHA- thank you!): https://github.com/archivematica/Issues/issues/841&lt;br /&gt;
* Cannot create storage service location via amclient ('''Sponsored''' by International Institute of Social History- thank you!): https://github.com/archivematica/Issues/issues/905 &lt;br /&gt;
* It is difficult to combine status for different package types ('''Community contribution''' by Rockefeller Archive Center- thank you!): https://github.com/archivematica/Issues/issues/972&lt;br /&gt;
* Format identification errors are not being output from the FPR command ('''Community contribution''' by Wellcome Collection- thank you!): https://github.com/archivematica/Issues/issues/882&lt;br /&gt;
* Time zone setting not configurable ('''Sponsored''' by Piql/NHA- thank you!): https://github.com/archivematica/Issues/issues/1143&lt;br /&gt;
* Cannot store AIP with large files ('''Community contribution''' by Jorik van Kemenade- thank you!): https://github.com/archivematica/Issues/issues/981&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And more! See https://github.com/archivematica/Issues/milestone/11 for full list of issues addresses in the 1.11 release.&lt;br /&gt;
&lt;br /&gt;
==Upgraded tools and dependencies==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Update to PRONOM v.96 https://github.com/archivematica/Issues/issues/791&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
&lt;br /&gt;
Please note that due to [https://github.com/archivematica/Issues/issues/1149 Issue 1149] the package replication functionality in the Storage Service does not work in this release. We anticipate fixing in the near future in a point release.&lt;br /&gt;
&lt;br /&gt;
==End of life dependencies==&lt;br /&gt;
&lt;br /&gt;
Python 2 has reached end of life. The Archivematica delivery team along with a number of community contributors has been working on upgrading this dependency. This release merges all Python 3 code that was ready in advance of the release, while still supporting Python 2. Components which have been upgraded and/or tested using Python 3 include:&lt;br /&gt;
* Dashboard: https://github.com/archivematica/Issues/issues/810&lt;br /&gt;
* Storage Service: https://github.com/archivematica/Issues/issues/806 '''Note''' We were not able to test some storage spaces, including Sword2, LOCKSS-o-matic and DSpace.&lt;br /&gt;
* amclient: https://github.com/archivematica/Issues/issues/817&lt;br /&gt;
* Automation tools: https://github.com/archivematica/Issues/issues/815&lt;br /&gt;
* Fixity: https://github.com/archivematica/Issues/issues/814&lt;br /&gt;
* am/compose: https://github.com/archivematica/Issues/issues/804&lt;br /&gt;
* Fido: https://github.com/archivematica/Issues/issues/847&lt;br /&gt;
&lt;br /&gt;
We will continue to work toward full Python 3 use in upcoming releases.&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13122</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13122"/>
		<updated>2019-07-09T16:48:26Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Archivematica API&lt;br /&gt;
&lt;br /&gt;
Endpoints require authentication with a username and API key.  This can be submitted as GET parameters (eg &amp;lt;code&amp;gt;?username=demo&amp;amp;api_key=e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;) or as a header (eg &amp;lt;code&amp;gt;Authorization: ApiKey demo:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;br \&amp;gt;&amp;lt;br \&amp;gt;&lt;br /&gt;
''As GET parameters, format is:''&amp;lt;br \&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;?username=&amp;lt;''username''&amp;gt;&amp;amp;api_key=&amp;lt;''api_key''&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br \&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''As a header, format is:''&amp;lt;br \&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;ApiKey &amp;lt;username&amp;gt;:&amp;lt;api_key&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br \&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The 'ApiKey' prefix is a requirement of the Tastypie library in use. See the Tastypie docs for [https://django-tastypie.readthedocs.io/en/latest/authentication.html#apikeyauthentication ApiKeyAuthentication].''&amp;lt;br \&amp;gt;&amp;lt;br \&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Endpoints return JSON.  If there's an error, they will return a 4xx or 5xx HTTP error code and a JSON body &amp;lt;code&amp;gt;{'error': True, 'message': 'message describing error'}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Transfer ==&lt;br /&gt;
&lt;br /&gt;
=== Start Transfer ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/start_transfer/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a transfer.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of new transfer&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Type of the new transfer. One of: standard, unzipped bag, zipped bag, dspace&lt;br /&gt;
** &amp;lt;code&amp;gt;accession&amp;lt;/code&amp;gt;: Accession number of new transfer&lt;br /&gt;
** &amp;lt;code&amp;gt;paths[]&amp;lt;/code&amp;gt;: List of base64-encoded &amp;quot;&amp;lt;location_uuid&amp;gt;:&amp;lt;relative_path&amp;gt;&amp;quot; to be copied into the new transfer. Location UUIDs should be associated with this pipeline, and relative path should be relative to the location (TODO confirm relative vs absolute path).  E.g. NWJiYWJjMTMtMTIyNy00MWE3LWIwY2QtZjJhYzM1MjkxZTdmOi92YWdyYW50L3NhbXBsZWRhdGEvQ1NWbWV0YWRhdGE= (decoded: 5bbabc13-1227-41a7-b0cd-f2ac35291e7f:/vagrant/sampledata/CSVmetadata)&lt;br /&gt;
** &amp;lt;code&amp;gt;row_ids[]&amp;lt;/code&amp;gt;: ID of the associated TransferMetadataSet for disk image ingest.  Can be provided as [&amp;quot;&amp;quot;]&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Copy successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path the transfer was copied to on start?&lt;br /&gt;
&lt;br /&gt;
=== List Unapproved Transfers ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/unapproved&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns a list of transfers waiting for approval.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched unapproved transfers successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of dicts with keys:&lt;br /&gt;
*** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Transfer type. One of: standard, unzipped bag, zipped bag, dspace&lt;br /&gt;
*** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Directory the transfer is in currently&lt;br /&gt;
*** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the transfer&lt;br /&gt;
&lt;br /&gt;
=== Approve Transfer ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/approve&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Approve a transfer waiting to be started.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Type of the transfer to approved. One of: standard, unzipped bag, zipped bag, dspace.&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory for the transfer to approve&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the approved transfer&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/status/&amp;lt;transfer UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns the status of the transfer.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the transfer, e.g. &amp;quot;imgs&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: If status is COMPLETE, this field will exist with either the UUID of the SIP or 'BACKLOG'&lt;br /&gt;
** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory, e.g. &amp;quot;imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Full path to the transfer, e.g. &amp;quot;/var/archivematica/sharedDirectory/watchedDirectories/SIPCreation/completedTransfers/imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c/&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched status for &amp;lt;transfer UUID&amp;gt; successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: &amp;quot;transfer&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the transfer, e.g. &amp;quot;52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
'''Note:''' for consumers of this endpoint, it is possible for Archivematica to return a &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;COMPLETE&amp;lt;/code&amp;gt; without a &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;. Consumers looking to use the UUID of the AIP that will be created following Ingest should therefore test for both a &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;COMPLETE&amp;lt;/code&amp;gt; and the existence of &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt; that does not also equal &amp;lt;code&amp;gt;BACKLOG&amp;lt;/code&amp;gt; to ensure that they retrieve it. This might mean an additional call to the status endpoint while this data becomes available.&lt;br /&gt;
&lt;br /&gt;
=== Hide ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/&amp;lt;transfer UUID&amp;gt;/delete/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
* Hide a transfer&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;removed&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/completed/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return list of Transfers that are completed&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched completed transfers successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of UUIDs of completed Transfers&lt;br /&gt;
* Added in Archivematica 1.6&lt;br /&gt;
&lt;br /&gt;
=== Start Reingest ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/reingest&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a full reingest.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the AIP. The AIP should also be found at &amp;lt;code&amp;gt;%sharedDirectory%/tmp/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the AIP to reingest&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_uuid&amp;lt;/code&amp;gt;: UUID of the reingested transfer&lt;br /&gt;
&lt;br /&gt;
== Ingest ==&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/ingest/status/&amp;lt;unit UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns the status of the SIP&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the SIP, e.g. &amp;quot;imgs&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory, e.g. &amp;quot;imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Full path to the transfer, e.g. &amp;quot;/var/archivematica/sharedDirectory/currentlyProcessing/imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c/&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched status for &amp;lt;SIP UUID&amp;gt; successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: &amp;quot;SIP&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the SIP, e.g. &amp;quot;52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Hide ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/&amp;lt;SIP UUID&amp;gt;/delete/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
* Hide a SIP&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;removed&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== List SIPS Waiting for User Input ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/waiting&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns a list of SIPs waiting for user input.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched units successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of dicts with keys:&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_directory&amp;lt;/code&amp;gt;: Directory the SIP is in currently&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: UUID of the SIP&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_name&amp;lt;/code&amp;gt;: Name of the SIP&lt;br /&gt;
*** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: Despite the URL, this currently returns both SIPs &amp;amp; transfers that are waiting for user input. A separate &amp;lt;code&amp;gt;/api/transfer/waiting&amp;lt;/code&amp;gt; should be added for transfers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/completed/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return list of SIPs that are completed&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched completed ingests successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of UUIDs of completed SIPs&lt;br /&gt;
* Added in Archivematica 1.6&lt;br /&gt;
&lt;br /&gt;
=== Reingest ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/reingest&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a partial or metadata-only reingest.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the AIP. The AIP should also be found at &amp;lt;code&amp;gt;%sharedDirectory%/tmp/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the AIP to reingest&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_uuid&amp;lt;/code&amp;gt;: UUID of the reingested SIP&lt;br /&gt;
&lt;br /&gt;
=== Copy Metadata ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/copy_metadata_files/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Add metadata files to a SIP.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: UUID of the SIP to put files in&lt;br /&gt;
** &amp;lt;code&amp;gt;source_paths[]&amp;lt;/code&amp;gt;: List of files to be copied, base64 encoded, in the format 'source_location_uuid:full_path'&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt;: False&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Files added successfully.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Levels of Description ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/administration/dips/atom/levels/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Returns a JSON-encoded set of the configured levels of description.&lt;br /&gt;
* ''Response'': JSON. List of AtoM Levels of description with key 'UUID' and value 'name of level of description'.&lt;br /&gt;
&lt;br /&gt;
=== Fetch Levels of Description ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/administration/dips/atom/fetch_levels/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Fetch all levels of description from an AtoM database, replacing any previously existing.&lt;br /&gt;
* '''Response''': JSON. Updated list of AtoM Levels of description with key 'UUID' and value 'name of level of description'.&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
=== Path Metadata ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/filesystem/metadata/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
* Fetch (GET) or update (POST) metadata for a path (currently only level of description).&lt;br /&gt;
* '''Parameters''': Query string parameters (GET) or JSON body (POST)&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Arranged path to get metadata on&lt;br /&gt;
* '''GET response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;level_of_description&amp;lt;/code&amp;gt;: Level of description&lt;br /&gt;
* '''POST response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== Processing Configuration ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/processing-configuration/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Return processing configuration with &amp;lt;name&amp;gt;&lt;br /&gt;
* '''Response''': The processing config file as a stream.&lt;br /&gt;
* '''Content type''': text/xml&lt;br /&gt;
&lt;br /&gt;
== Beta endpoints ==&lt;br /&gt;
&lt;br /&gt;
API endpoints which are still in-flux and that could potentially change. &lt;br /&gt;
&lt;br /&gt;
=== Package ===&lt;br /&gt;
&lt;br /&gt;
Provides additional functionality over the start and approve transfer endpoints, for example, wrapping both those steps into a single call.&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2beta/package&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a new transfer type.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** Mandatory&lt;br /&gt;
*** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Transfer name&lt;br /&gt;
*** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path relative, or absolute to a storage service transfer source&lt;br /&gt;
**Optional&lt;br /&gt;
*** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Transfer type, e.g. standard, dataverse, zipped bag, default: &amp;lt;code&amp;gt;standard&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;processing_config&amp;lt;/code&amp;gt;: [https://www.archivematica.org/en/docs/latest/user-manual/administer/dashboard-admin/#processing-configuration Processing configuration], e.g. default, automated,  default: &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;accession&amp;lt;/code&amp;gt;: Accession ID&lt;br /&gt;
*** &amp;lt;code&amp;gt;access_system_id&amp;lt;/code&amp;gt;: Access system ID (see [https://www.archivematica.org/en/docs/latest/user-manual/access/access docs])&lt;br /&gt;
*** &amp;lt;code&amp;gt;metadata_set_id&amp;lt;/code&amp;gt;: Used to link to metadata sets added via the user interface. It's safe to ignore this for now since metadata can't be associated to transfer via the API at the moment.&lt;br /&gt;
*** &amp;lt;code&amp;gt;auto_approve&amp;lt;/code&amp;gt;: Boolean &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; to set the transfer to auto-approve, default: &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;: Transfer UUID ('''Note:''' as the package endpoint allows the caller to interact with Archivematica asynchronously it doesn't guarantee a transfer has started. The caller must use the UUID in the response to verify it has begun or any errors that were encountered initiating one.)&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Only a subset of these options might be needed for most use-cases. A fundamental difference between the &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt; endpoint and others from which a transfer can be initiated is that a storage service transfer location UUID isnt always required. In some cases that might still be ideal.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
''Starting a transfer using an absolute path:''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   curl -v POST \&lt;br /&gt;
     -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
     -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
     -d &amp;quot;{\&lt;br /&gt;
         \&amp;quot;path\&amp;quot;: \&amp;quot;$(echo -n '/home/archivematica/archivematica-sampledata/SampleTransfers/DemoTransfer' | base64 -w 0)\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;name\&amp;quot;: \&amp;quot;demo_transfer_absolute\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;processing_config\&amp;quot;: \&amp;quot;automated\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;type\&amp;quot;: \&amp;quot;standard\&amp;quot; \&lt;br /&gt;
         }&amp;quot; \&lt;br /&gt;
    &amp;quot;http://&amp;lt;archivematica-uri&amp;gt;/api/v2beta/package&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
''Starting a transfer using an relative path with a transfer source UUID:''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   curl -v POST \&lt;br /&gt;
     -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
     -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
     -d &amp;quot;{\&lt;br /&gt;
         \&amp;quot;path\&amp;quot;: \&amp;quot;$(echo -n 'd1184f7f-d755-4c8d-831a-a3793b88f760:/archivematica/archivematica-sampledata/SampleTransfers/DemoTransfer' | base64 -w 0)\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;name\&amp;quot;: \&amp;quot;demo_transfer_relative\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;processing_config\&amp;quot;: \&amp;quot;automated\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;type\&amp;quot;: \&amp;quot;standard\&amp;quot; \&lt;br /&gt;
         }&amp;quot; \&lt;br /&gt;
    &amp;quot;http://&amp;lt;archivematica-uri&amp;gt;/api/v2beta/package&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Validate ===&lt;br /&gt;
&lt;br /&gt;
Available in Archivematica 1.10+. This endpoint can be used to validate CSVs against embedded sets of rules. Currently works with Avalon Media System Manifest files.&lt;br /&gt;
&lt;br /&gt;
In the future, this endpoint can be extended to support validation for &amp;lt;code&amp;gt;metadata.csv&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;rights.csv&amp;lt;/code&amp;gt;, or other institutionally-based rules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2beta/validate/avalon&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Content-Type''': text/csv; charset=utf-8&lt;br /&gt;
* '''Parameters''': &amp;lt;code&amp;gt;&amp;lt;document&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Usage example: (assuming that &amp;lt;code&amp;gt;avalon.csv&amp;lt;/code&amp;gt; exists)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl http://127.0.0.1:62080/api/v2beta/validate/avalon \&lt;br /&gt;
  --data-binary &amp;quot;@avalon.csv&amp;quot; \&lt;br /&gt;
  --header &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
  --header &amp;quot;Content-Type: text/csv; charset=utf-8&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Response examples:&lt;br /&gt;
&lt;br /&gt;
200 OK&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;valid&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
400 Bad Request (expect reason to include different validation errors)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;valid&amp;quot;: false,&lt;br /&gt;
  &amp;quot;reason&amp;quot;: &amp;quot;Administrative data must include reference name and author.&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
404 Not Found&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;error&amp;quot;: true,&lt;br /&gt;
  &amp;quot;message&amp;quot;: &amp;quot;Unknown validator. Accepted values: avalon&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.9.2_release_notes&amp;diff=13087</id>
		<title>Archivematica 1.9.2 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.9.2_release_notes&amp;diff=13087"/>
		<updated>2019-06-20T16:53:16Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Upgrading */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.9.2 and Storage Service 0.14.2 release notes&lt;br /&gt;
&lt;br /&gt;
'''Release date: '''&lt;br /&gt;
&lt;br /&gt;
For more information about Archivematica 1.9.x, please see the release notes for [[Archivematica_1.9_and_Storage_Service_0.14_release_notes|Archivematica 1.9.0]].&lt;br /&gt;
&lt;br /&gt;
==Upgrading==&lt;br /&gt;
&lt;br /&gt;
If you are upgrading from 1.9.0 to 1.9.2, please ensure that you run the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -XPUT 'http://localhost:9200/aips,aipfiles,transfers,transferfiles/_settings' \&lt;br /&gt;
  -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
  -d '{&amp;quot;index.mapping.total_fields.limit&amp;quot;: 10000, &amp;quot;index.mapping.depth.limit&amp;quot;: 1000 }'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is not required for upgrading from 1.8.x to 1.9.2.&lt;br /&gt;
&lt;br /&gt;
For more information on upgrading, see [https://www.archivematica.org/en/docs/archivematica-1.9/admin-manual/installation-setup/upgrading/upgrading/#upgrade Upgrading Archivematica] in the documentation.&lt;br /&gt;
&lt;br /&gt;
==Fixed==&lt;br /&gt;
&lt;br /&gt;
* Index AIP errors due to asynchronous processing: [https://github.com/archivematica/Issues/issues/425 Issue 425]&lt;br /&gt;
* Error trying to connect to MCP server: [https://github.com/archivematica/Issues/issues/624 Issue 624]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.9.2_release_notes&amp;diff=13086</id>
		<title>Archivematica 1.9.2 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.9.2_release_notes&amp;diff=13086"/>
		<updated>2019-06-20T16:52:59Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Upgrading */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Archivematica 1.9.2 and Storage Service 0.14.2 release notes&lt;br /&gt;
&lt;br /&gt;
'''Release date: '''&lt;br /&gt;
&lt;br /&gt;
For more information about Archivematica 1.9.x, please see the release notes for [[Archivematica_1.9_and_Storage_Service_0.14_release_notes|Archivematica 1.9.0]].&lt;br /&gt;
&lt;br /&gt;
==Upgrading==&lt;br /&gt;
&lt;br /&gt;
If you are upgrading from 1.9.0 to 1.9.2, please ensure that you run the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
curl -XPUT 'http://localhost:9200/aips,aipfiles,transfers,transferfiles/_settings' \&lt;br /&gt;
  -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
  -d '{&amp;quot;index.mapping.total_fields.limit&amp;quot;: 10000, &amp;quot;index.mapping.depth.limit&amp;quot;: 1000 }'&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is not required for upgrading from 1.8.x to 1.9.2.&lt;br /&gt;
&lt;br /&gt;
For more information on upgrading, see [https://www.archivematica.org/en/docs/archivematica-1.9/admin-manual/installation-setup/upgrading/upgrading/#upgrade Upgrading Archivematica] in the documentation.&lt;br /&gt;
&lt;br /&gt;
==Fixed==&lt;br /&gt;
&lt;br /&gt;
* Index AIP errors due to asynchronous processing: [https://github.com/archivematica/Issues/issues/425 Issue 425]&lt;br /&gt;
* Error trying to connect to MCP server: [https://github.com/archivematica/Issues/issues/624 Issue 624]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=12899</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=12899"/>
		<updated>2019-02-26T22:43:28Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Package */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Archivematica API&lt;br /&gt;
&lt;br /&gt;
Endpoints require authentication with a username and API key.  This can be submitted as GET parameters (eg &amp;lt;code&amp;gt;?username=demo&amp;amp;api_key=e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;) or as a header (eg &amp;lt;code&amp;gt;Authorization: ApiKey demo:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Endpoints return JSON.  If there's an error, they will return a 4xx or 5xx HTTP error code and a JSON body &amp;lt;code&amp;gt;{'error': True, 'message': 'message describing error'}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Transfer ==&lt;br /&gt;
&lt;br /&gt;
=== Start Transfer ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/start_transfer/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a transfer.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of new transfer&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Type of the new transfer. One of: standard, unzipped bag, zipped bag, dspace&lt;br /&gt;
** &amp;lt;code&amp;gt;accession&amp;lt;/code&amp;gt;: Accession number of new transfer&lt;br /&gt;
** &amp;lt;code&amp;gt;paths[]&amp;lt;/code&amp;gt;: List of base64-encoded &amp;quot;&amp;lt;location_uuid&amp;gt;:&amp;lt;relative_path&amp;gt;&amp;quot; to be copied into the new transfer. Location UUIDs should be associated with this pipeline, and relative path should be relative to the location (TODO confirm relative vs absolute path).  E.g. NWJiYWJjMTMtMTIyNy00MWE3LWIwY2QtZjJhYzM1MjkxZTdmOi92YWdyYW50L3NhbXBsZWRhdGEvQ1NWbWV0YWRhdGE= (decoded: 5bbabc13-1227-41a7-b0cd-f2ac35291e7f:/vagrant/sampledata/CSVmetadata)&lt;br /&gt;
** &amp;lt;code&amp;gt;row_ids[]&amp;lt;/code&amp;gt;: ID of the associated TransferMetadataSet for disk image ingest.  Can be provided as [&amp;quot;&amp;quot;]&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Copy successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path the transfer was copied to on start?&lt;br /&gt;
&lt;br /&gt;
=== List Unapproved Transfers ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/unapproved&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns a list of transfers waiting for approval.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched unapproved transfers successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of dicts with keys:&lt;br /&gt;
*** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Transfer type. One of: standard, unzipped bag, zipped bag, dspace&lt;br /&gt;
*** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Directory the transfer is in currently&lt;br /&gt;
*** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the transfer&lt;br /&gt;
&lt;br /&gt;
=== Approve Transfer ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/approve&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Approve a transfer waiting to be started.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Type of the transfer to approved. One of: standard, unzipped bag, zipped bag, dspace.&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory for the transfer to approve&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the approved transfer&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/transfer/status/&amp;lt;transfer UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns the status of the transfer.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the transfer, e.g. &amp;quot;imgs&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: If status is COMPLETE, this field will exist with either the UUID of the SIP or 'BACKLOG'&lt;br /&gt;
** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory, e.g. &amp;quot;imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Full path to the transfer, e.g. &amp;quot;/var/archivematica/sharedDirectory/watchedDirectories/SIPCreation/completedTransfers/imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c/&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched status for &amp;lt;transfer UUID&amp;gt; successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: &amp;quot;transfer&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the transfer, e.g. &amp;quot;52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Hide ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/&amp;lt;transfer UUID&amp;gt;/delete/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
* Hide a transfer&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;removed&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/completed/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return list of Transfers that are completed&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched completed transfers successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of UUIDs of completed Transfers&lt;br /&gt;
* Added in Archivematica 1.6&lt;br /&gt;
&lt;br /&gt;
=== Start Reingest ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/reingest&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a full reingest.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the AIP. The AIP should also be found at &amp;lt;code&amp;gt;%sharedDirectory%/tmp/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the AIP to reingest&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_uuid&amp;lt;/code&amp;gt;: UUID of the reingested transfer&lt;br /&gt;
&lt;br /&gt;
== Ingest ==&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/ingest/status/&amp;lt;unit UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns the status of the SIP&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the SIP, e.g. &amp;quot;imgs&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory, e.g. &amp;quot;imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Full path to the transfer, e.g. &amp;quot;/var/archivematica/sharedDirectory/currentlyProcessing/imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c/&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched status for &amp;lt;SIP UUID&amp;gt; successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: &amp;quot;SIP&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the SIP, e.g. &amp;quot;52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Hide ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/&amp;lt;SIP UUID&amp;gt;/delete/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
* Hide a SIP&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;removed&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== List SIPS Waiting for User Input ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/waiting&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns a list of SIPs waiting for user input.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched units successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of dicts with keys:&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_directory&amp;lt;/code&amp;gt;: Directory the SIP is in currently&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: UUID of the SIP&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_name&amp;lt;/code&amp;gt;: Name of the SIP&lt;br /&gt;
*** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: Despite the URL, this currently returns both SIPs &amp;amp; transfers that are waiting for user input. A separate &amp;lt;code&amp;gt;/api/transfer/waiting&amp;lt;/code&amp;gt; should be added for transfers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/completed/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return list of SIPs that are completed&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched completed ingests successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of UUIDs of completed SIPs&lt;br /&gt;
* Added in Archivematica 1.6&lt;br /&gt;
&lt;br /&gt;
=== Reingest ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/reingest&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a partial or metadata-only reingest.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the AIP. The AIP should also be found at &amp;lt;code&amp;gt;%sharedDirectory%/tmp/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the AIP to reingest&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_uuid&amp;lt;/code&amp;gt;: UUID of the reingested SIP&lt;br /&gt;
&lt;br /&gt;
=== Copy Metadata ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/copy_metadata_files/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Add metadata files to a SIP.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: UUID of the SIP to put files in&lt;br /&gt;
** &amp;lt;code&amp;gt;source_paths[]&amp;lt;/code&amp;gt;: List of files to be copied, base64 encoded, in the format 'source_location_uuid:full_path'&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt;: False&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Files added successfully.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Levels of Description ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/administration/dips/atom/levels/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Returns a JSON-encoded set of the configured levels of description.&lt;br /&gt;
* ''Response'': JSON. List of AtoM Levels of description with key 'UUID' and value 'name of level of description'.&lt;br /&gt;
&lt;br /&gt;
=== Fetch Levels of Description ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/administration/dips/atom/fetch_levels/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Fetch all levels of description from an AtoM database, replacing any previously existing.&lt;br /&gt;
* '''Response''': JSON. Updated list of AtoM Levels of description with key 'UUID' and value 'name of level of description'.&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
=== Path Metadata ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/filesystem/metadata/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
* Fetch (GET) or update (POST) metadata for a path (currently only level of description).&lt;br /&gt;
* '''Parameters''': Query string parameters (GET) or JSON body (POST)&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Arranged path to get metadata on&lt;br /&gt;
* '''GET response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;level_of_description&amp;lt;/code&amp;gt;: Level of description&lt;br /&gt;
* '''POST response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== Processing Configuration ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/processing-configuration/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Return processing configuration with &amp;lt;name&amp;gt;&lt;br /&gt;
* '''Response''': The processing config file as a stream.&lt;br /&gt;
* '''Content type''': text/xml&lt;br /&gt;
&lt;br /&gt;
== Beta endpoints ==&lt;br /&gt;
&lt;br /&gt;
API endpoints which are still in-flux and that could potentially change. &lt;br /&gt;
&lt;br /&gt;
=== Package ===&lt;br /&gt;
&lt;br /&gt;
Provides additional functionality over the start and approve transfer endpoints, for example, wrapping both those steps into a single call.&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2beta/package&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a new transfer type.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** Mandatory&lt;br /&gt;
*** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Transfer name&lt;br /&gt;
*** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path relative, or absolute to a storage service transfer source&lt;br /&gt;
**Optional&lt;br /&gt;
*** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Transfer type, e.g. standard, dataverse, zipped bag, default: &amp;lt;code&amp;gt;standard&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;processing_config&amp;lt;/code&amp;gt;: [https://www.archivematica.org/en/docs/latest/user-manual/administer/dashboard-admin/#processing-configuration Processing configuration], e.g. default, automated,  default: &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;accession&amp;lt;/code&amp;gt;: Accession ID&lt;br /&gt;
*** &amp;lt;code&amp;gt;access_system_id&amp;lt;/code&amp;gt;: Access system ID (see [https://www.archivematica.org/en/docs/latest/user-manual/access/access docs])&lt;br /&gt;
*** &amp;lt;code&amp;gt;metadata_set_id&amp;lt;/code&amp;gt;: Used to link to metadata sets added via the user interface. It's safe to ignore this for now since metadata can't be associated to transfer via the API at the moment.&lt;br /&gt;
*** &amp;lt;code&amp;gt;auto_approve&amp;lt;/code&amp;gt;: Boolean &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; to set the transfer to auto-approve, default: &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;: Transfer UUID&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Only a subset of these options might be needed for most use-cases. A fundamental difference between the &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt; endpoint and others from which a transfer can be initiated is that a storage service transfer location UUID isnt always required. In some cases that might still be ideal.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
''Starting a transfer using an absolute path:''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   curl -v POST \&lt;br /&gt;
     -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
     -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
     -d &amp;quot;{\&lt;br /&gt;
         \&amp;quot;path\&amp;quot;: \&amp;quot;$(echo -n '/home/archivematica/archivematica-sampledata/SampleTransfers/DemoTransfer' | base64 -w 0)\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;name\&amp;quot;: \&amp;quot;demo_transfer_absolute\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;processing_config\&amp;quot;: \&amp;quot;automated\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;type\&amp;quot;: \&amp;quot;standard\&amp;quot; \&lt;br /&gt;
         }&amp;quot; \&lt;br /&gt;
    &amp;quot;http://&amp;lt;archivematica-uri&amp;gt;/api/v2beta/package&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
''Starting a transfer using an relative path with a transfer source UUID:''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   curl -v POST \&lt;br /&gt;
     -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
     -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
     -d &amp;quot;{\&lt;br /&gt;
         \&amp;quot;path\&amp;quot;: \&amp;quot;$(echo -n 'd1184f7f-d755-4c8d-831a-a3793b88f760:/archivematica/archivematica-sampledata/SampleTransfers/DemoTransfer' | base64 -w 0)\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;name\&amp;quot;: \&amp;quot;demo_transfer_relative\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;processing_config\&amp;quot;: \&amp;quot;automated\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;type\&amp;quot;: \&amp;quot;standard\&amp;quot; \&lt;br /&gt;
         }&amp;quot; \&lt;br /&gt;
    &amp;quot;http://&amp;lt;archivematica-uri&amp;gt;/api/v2beta/package&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=12898</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=12898"/>
		<updated>2019-02-26T21:30:07Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Package */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Archivematica API&lt;br /&gt;
&lt;br /&gt;
Endpoints require authentication with a username and API key.  This can be submitted as GET parameters (eg &amp;lt;code&amp;gt;?username=demo&amp;amp;api_key=e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;) or as a header (eg &amp;lt;code&amp;gt;Authorization: ApiKey demo:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Endpoints return JSON.  If there's an error, they will return a 4xx or 5xx HTTP error code and a JSON body &amp;lt;code&amp;gt;{'error': True, 'message': 'message describing error'}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Transfer ==&lt;br /&gt;
&lt;br /&gt;
=== Start Transfer ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/start_transfer/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a transfer.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of new transfer&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Type of the new transfer. One of: standard, unzipped bag, zipped bag, dspace&lt;br /&gt;
** &amp;lt;code&amp;gt;accession&amp;lt;/code&amp;gt;: Accession number of new transfer&lt;br /&gt;
** &amp;lt;code&amp;gt;paths[]&amp;lt;/code&amp;gt;: List of base64-encoded &amp;quot;&amp;lt;location_uuid&amp;gt;:&amp;lt;relative_path&amp;gt;&amp;quot; to be copied into the new transfer. Location UUIDs should be associated with this pipeline, and relative path should be relative to the location (TODO confirm relative vs absolute path).  E.g. NWJiYWJjMTMtMTIyNy00MWE3LWIwY2QtZjJhYzM1MjkxZTdmOi92YWdyYW50L3NhbXBsZWRhdGEvQ1NWbWV0YWRhdGE= (decoded: 5bbabc13-1227-41a7-b0cd-f2ac35291e7f:/vagrant/sampledata/CSVmetadata)&lt;br /&gt;
** &amp;lt;code&amp;gt;row_ids[]&amp;lt;/code&amp;gt;: ID of the associated TransferMetadataSet for disk image ingest.  Can be provided as [&amp;quot;&amp;quot;]&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Copy successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path the transfer was copied to on start?&lt;br /&gt;
&lt;br /&gt;
=== List Unapproved Transfers ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/unapproved&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns a list of transfers waiting for approval.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched unapproved transfers successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of dicts with keys:&lt;br /&gt;
*** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Transfer type. One of: standard, unzipped bag, zipped bag, dspace&lt;br /&gt;
*** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Directory the transfer is in currently&lt;br /&gt;
*** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the transfer&lt;br /&gt;
&lt;br /&gt;
=== Approve Transfer ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/approve&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Approve a transfer waiting to be started.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Type of the transfer to approved. One of: standard, unzipped bag, zipped bag, dspace.&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory for the transfer to approve&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the approved transfer&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/transfer/status/&amp;lt;transfer UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns the status of the transfer.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the transfer, e.g. &amp;quot;imgs&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: If status is COMPLETE, this field will exist with either the UUID of the SIP or 'BACKLOG'&lt;br /&gt;
** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory, e.g. &amp;quot;imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Full path to the transfer, e.g. &amp;quot;/var/archivematica/sharedDirectory/watchedDirectories/SIPCreation/completedTransfers/imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c/&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched status for &amp;lt;transfer UUID&amp;gt; successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: &amp;quot;transfer&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the transfer, e.g. &amp;quot;52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Hide ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/&amp;lt;transfer UUID&amp;gt;/delete/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
* Hide a transfer&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;removed&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/completed/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return list of Transfers that are completed&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched completed transfers successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of UUIDs of completed Transfers&lt;br /&gt;
* Added in Archivematica 1.6&lt;br /&gt;
&lt;br /&gt;
=== Start Reingest ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/reingest&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a full reingest.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the AIP. The AIP should also be found at &amp;lt;code&amp;gt;%sharedDirectory%/tmp/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the AIP to reingest&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_uuid&amp;lt;/code&amp;gt;: UUID of the reingested transfer&lt;br /&gt;
&lt;br /&gt;
== Ingest ==&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/ingest/status/&amp;lt;unit UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns the status of the SIP&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the SIP, e.g. &amp;quot;imgs&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory, e.g. &amp;quot;imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Full path to the transfer, e.g. &amp;quot;/var/archivematica/sharedDirectory/currentlyProcessing/imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c/&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched status for &amp;lt;SIP UUID&amp;gt; successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: &amp;quot;SIP&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the SIP, e.g. &amp;quot;52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Hide ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/&amp;lt;SIP UUID&amp;gt;/delete/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
* Hide a SIP&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;removed&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== List SIPS Waiting for User Input ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/waiting&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns a list of SIPs waiting for user input.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched units successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of dicts with keys:&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_directory&amp;lt;/code&amp;gt;: Directory the SIP is in currently&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: UUID of the SIP&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_name&amp;lt;/code&amp;gt;: Name of the SIP&lt;br /&gt;
*** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: Despite the URL, this currently returns both SIPs &amp;amp; transfers that are waiting for user input. A separate &amp;lt;code&amp;gt;/api/transfer/waiting&amp;lt;/code&amp;gt; should be added for transfers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/completed/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return list of SIPs that are completed&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched completed ingests successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of UUIDs of completed SIPs&lt;br /&gt;
* Added in Archivematica 1.6&lt;br /&gt;
&lt;br /&gt;
=== Reingest ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/reingest&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a partial or metadata-only reingest.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the AIP. The AIP should also be found at &amp;lt;code&amp;gt;%sharedDirectory%/tmp/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the AIP to reingest&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_uuid&amp;lt;/code&amp;gt;: UUID of the reingested SIP&lt;br /&gt;
&lt;br /&gt;
=== Copy Metadata ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/copy_metadata_files/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Add metadata files to a SIP.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: UUID of the SIP to put files in&lt;br /&gt;
** &amp;lt;code&amp;gt;source_paths[]&amp;lt;/code&amp;gt;: List of files to be copied, base64 encoded, in the format 'source_location_uuid:full_path'&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt;: False&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Files added successfully.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Levels of Description ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/administration/dips/atom/levels/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Returns a JSON-encoded set of the configured levels of description.&lt;br /&gt;
* ''Response'': JSON. List of AtoM Levels of description with key 'UUID' and value 'name of level of description'.&lt;br /&gt;
&lt;br /&gt;
=== Fetch Levels of Description ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/administration/dips/atom/fetch_levels/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Fetch all levels of description from an AtoM database, replacing any previously existing.&lt;br /&gt;
* '''Response''': JSON. Updated list of AtoM Levels of description with key 'UUID' and value 'name of level of description'.&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
=== Path Metadata ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/filesystem/metadata/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
* Fetch (GET) or update (POST) metadata for a path (currently only level of description).&lt;br /&gt;
* '''Parameters''': Query string parameters (GET) or JSON body (POST)&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Arranged path to get metadata on&lt;br /&gt;
* '''GET response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;level_of_description&amp;lt;/code&amp;gt;: Level of description&lt;br /&gt;
* '''POST response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== Processing Configuration ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/processing-configuration/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Return processing configuration with &amp;lt;name&amp;gt;&lt;br /&gt;
* '''Response''': The processing config file as a stream.&lt;br /&gt;
* '''Content type''': text/xml&lt;br /&gt;
&lt;br /&gt;
== Beta endpoints ==&lt;br /&gt;
&lt;br /&gt;
API endpoints which are still in-flux and that could potentially change. &lt;br /&gt;
&lt;br /&gt;
=== Package ===&lt;br /&gt;
&lt;br /&gt;
Provides additional functionality over the start and approve transfer endpoints, for example, wrapping both those steps into a single call.&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2beta/package&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a new transfer type.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** Mandatory&lt;br /&gt;
*** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Transfer name&lt;br /&gt;
*** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path relative, or absolute to a storage service transfer source&lt;br /&gt;
**Optional&lt;br /&gt;
*** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Transfer type, e.g. standard, dataverse, zipped bag, default: &amp;lt;code&amp;gt;standard&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;processing_config&amp;lt;/code&amp;gt;: [https://www.archivematica.org/en/docs/latest/user-manual/administer/dashboard-admin/#processing-configuration Processing configuration], e.g. default, automated,  default: &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;accession&amp;lt;/code&amp;gt;: Accession ID&lt;br /&gt;
*** &amp;lt;code&amp;gt;access_system_id&amp;lt;/code&amp;gt;: Access system ID (see [https://www.archivematica.org/en/docs/latest/user-manual/access/access docs])&lt;br /&gt;
*** &amp;lt;code&amp;gt;metadata_set_id&amp;lt;/code&amp;gt;: TBC&lt;br /&gt;
*** &amp;lt;code&amp;gt;auto_approve&amp;lt;/code&amp;gt;: Boolean &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; to set the transfer to auto-approve, default: &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;: Transfer UUID&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Only a subset of these options might be needed for most use-cases. A fundamental difference between the &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt; endpoint and others from which a transfer can be initiated is that a storage service transfer location UUID isnt always required. In some cases that might still be ideal.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
''Starting a transfer using an absolute path:''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   curl -v POST \&lt;br /&gt;
     -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
     -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
     -d &amp;quot;{\&lt;br /&gt;
         \&amp;quot;path\&amp;quot;: \&amp;quot;$(echo -n '/home/archivematica/archivematica-sampledata/SampleTransfers/DemoTransfer' | base64 -w 0)\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;name\&amp;quot;: \&amp;quot;demo_transfer_absolute\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;processing_config\&amp;quot;: \&amp;quot;automated\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;type\&amp;quot;: \&amp;quot;standard\&amp;quot; \&lt;br /&gt;
         }&amp;quot; \&lt;br /&gt;
    &amp;quot;http://&amp;lt;archivematica-uri&amp;gt;/api/v2beta/package&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
''Starting a transfer using an relative path with a transfer source UUID:''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   curl -v POST \&lt;br /&gt;
     -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
     -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
     -d &amp;quot;{\&lt;br /&gt;
         \&amp;quot;path\&amp;quot;: \&amp;quot;$(echo -n 'd1184f7f-d755-4c8d-831a-a3793b88f760:/archivematica/archivematica-sampledata/SampleTransfers/DemoTransfer' | base64 -w 0)\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;name\&amp;quot;: \&amp;quot;demo_transfer_relative\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;processing_config\&amp;quot;: \&amp;quot;automated\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;type\&amp;quot;: \&amp;quot;standard\&amp;quot; \&lt;br /&gt;
         }&amp;quot; \&lt;br /&gt;
    &amp;quot;http://&amp;lt;archivematica-uri&amp;gt;/api/v2beta/package&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=12897</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=12897"/>
		<updated>2019-02-26T21:29:11Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Package */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Archivematica API&lt;br /&gt;
&lt;br /&gt;
Endpoints require authentication with a username and API key.  This can be submitted as GET parameters (eg &amp;lt;code&amp;gt;?username=demo&amp;amp;api_key=e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;) or as a header (eg &amp;lt;code&amp;gt;Authorization: ApiKey demo:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Endpoints return JSON.  If there's an error, they will return a 4xx or 5xx HTTP error code and a JSON body &amp;lt;code&amp;gt;{'error': True, 'message': 'message describing error'}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Transfer ==&lt;br /&gt;
&lt;br /&gt;
=== Start Transfer ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/start_transfer/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a transfer.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of new transfer&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Type of the new transfer. One of: standard, unzipped bag, zipped bag, dspace&lt;br /&gt;
** &amp;lt;code&amp;gt;accession&amp;lt;/code&amp;gt;: Accession number of new transfer&lt;br /&gt;
** &amp;lt;code&amp;gt;paths[]&amp;lt;/code&amp;gt;: List of base64-encoded &amp;quot;&amp;lt;location_uuid&amp;gt;:&amp;lt;relative_path&amp;gt;&amp;quot; to be copied into the new transfer. Location UUIDs should be associated with this pipeline, and relative path should be relative to the location (TODO confirm relative vs absolute path).  E.g. NWJiYWJjMTMtMTIyNy00MWE3LWIwY2QtZjJhYzM1MjkxZTdmOi92YWdyYW50L3NhbXBsZWRhdGEvQ1NWbWV0YWRhdGE= (decoded: 5bbabc13-1227-41a7-b0cd-f2ac35291e7f:/vagrant/sampledata/CSVmetadata)&lt;br /&gt;
** &amp;lt;code&amp;gt;row_ids[]&amp;lt;/code&amp;gt;: ID of the associated TransferMetadataSet for disk image ingest.  Can be provided as [&amp;quot;&amp;quot;]&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Copy successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path the transfer was copied to on start?&lt;br /&gt;
&lt;br /&gt;
=== List Unapproved Transfers ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/unapproved&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns a list of transfers waiting for approval.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched unapproved transfers successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of dicts with keys:&lt;br /&gt;
*** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Transfer type. One of: standard, unzipped bag, zipped bag, dspace&lt;br /&gt;
*** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Directory the transfer is in currently&lt;br /&gt;
*** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the transfer&lt;br /&gt;
&lt;br /&gt;
=== Approve Transfer ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/approve&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Approve a transfer waiting to be started.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Type of the transfer to approved. One of: standard, unzipped bag, zipped bag, dspace.&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory for the transfer to approve&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the approved transfer&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/transfer/status/&amp;lt;transfer UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns the status of the transfer.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the transfer, e.g. &amp;quot;imgs&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: If status is COMPLETE, this field will exist with either the UUID of the SIP or 'BACKLOG'&lt;br /&gt;
** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory, e.g. &amp;quot;imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Full path to the transfer, e.g. &amp;quot;/var/archivematica/sharedDirectory/watchedDirectories/SIPCreation/completedTransfers/imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c/&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched status for &amp;lt;transfer UUID&amp;gt; successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: &amp;quot;transfer&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the transfer, e.g. &amp;quot;52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Hide ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/&amp;lt;transfer UUID&amp;gt;/delete/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
* Hide a transfer&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;removed&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/completed/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return list of Transfers that are completed&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched completed transfers successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of UUIDs of completed Transfers&lt;br /&gt;
* Added in Archivematica 1.6&lt;br /&gt;
&lt;br /&gt;
=== Start Reingest ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/reingest&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a full reingest.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the AIP. The AIP should also be found at &amp;lt;code&amp;gt;%sharedDirectory%/tmp/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the AIP to reingest&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_uuid&amp;lt;/code&amp;gt;: UUID of the reingested transfer&lt;br /&gt;
&lt;br /&gt;
== Ingest ==&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/ingest/status/&amp;lt;unit UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns the status of the SIP&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the SIP, e.g. &amp;quot;imgs&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory, e.g. &amp;quot;imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Full path to the transfer, e.g. &amp;quot;/var/archivematica/sharedDirectory/currentlyProcessing/imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c/&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched status for &amp;lt;SIP UUID&amp;gt; successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: &amp;quot;SIP&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the SIP, e.g. &amp;quot;52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Hide ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/&amp;lt;SIP UUID&amp;gt;/delete/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
* Hide a SIP&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;removed&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== List SIPS Waiting for User Input ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/waiting&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns a list of SIPs waiting for user input.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched units successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of dicts with keys:&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_directory&amp;lt;/code&amp;gt;: Directory the SIP is in currently&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: UUID of the SIP&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_name&amp;lt;/code&amp;gt;: Name of the SIP&lt;br /&gt;
*** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: Despite the URL, this currently returns both SIPs &amp;amp; transfers that are waiting for user input. A separate &amp;lt;code&amp;gt;/api/transfer/waiting&amp;lt;/code&amp;gt; should be added for transfers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/completed/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return list of SIPs that are completed&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched completed ingests successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of UUIDs of completed SIPs&lt;br /&gt;
* Added in Archivematica 1.6&lt;br /&gt;
&lt;br /&gt;
=== Reingest ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/reingest&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a partial or metadata-only reingest.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the AIP. The AIP should also be found at &amp;lt;code&amp;gt;%sharedDirectory%/tmp/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the AIP to reingest&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_uuid&amp;lt;/code&amp;gt;: UUID of the reingested SIP&lt;br /&gt;
&lt;br /&gt;
=== Copy Metadata ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/copy_metadata_files/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Add metadata files to a SIP.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: UUID of the SIP to put files in&lt;br /&gt;
** &amp;lt;code&amp;gt;source_paths[]&amp;lt;/code&amp;gt;: List of files to be copied, base64 encoded, in the format 'source_location_uuid:full_path'&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt;: False&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Files added successfully.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Levels of Description ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/administration/dips/atom/levels/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Returns a JSON-encoded set of the configured levels of description.&lt;br /&gt;
* ''Response'': JSON. List of AtoM Levels of description with key 'UUID' and value 'name of level of description'.&lt;br /&gt;
&lt;br /&gt;
=== Fetch Levels of Description ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/administration/dips/atom/fetch_levels/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Fetch all levels of description from an AtoM database, replacing any previously existing.&lt;br /&gt;
* '''Response''': JSON. Updated list of AtoM Levels of description with key 'UUID' and value 'name of level of description'.&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
=== Path Metadata ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/filesystem/metadata/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
* Fetch (GET) or update (POST) metadata for a path (currently only level of description).&lt;br /&gt;
* '''Parameters''': Query string parameters (GET) or JSON body (POST)&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Arranged path to get metadata on&lt;br /&gt;
* '''GET response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;level_of_description&amp;lt;/code&amp;gt;: Level of description&lt;br /&gt;
* '''POST response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== Processing Configuration ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/processing-configuration/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Return processing configuration with &amp;lt;name&amp;gt;&lt;br /&gt;
* '''Response''': The processing config file as a stream.&lt;br /&gt;
* '''Content type''': text/xml&lt;br /&gt;
&lt;br /&gt;
== Beta endpoints ==&lt;br /&gt;
&lt;br /&gt;
API endpoints which are still in-flux and that could potentially change. &lt;br /&gt;
&lt;br /&gt;
=== Package ===&lt;br /&gt;
&lt;br /&gt;
Provides additional functionality over the start and approve transfer endpoints, for example, wrapping both those steps into a single call.&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2beta/package&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a new transfer type.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** Mandatory&lt;br /&gt;
*** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Transfer name&lt;br /&gt;
*** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path relative, or absolute to a storage service transfer source&lt;br /&gt;
**Optional&lt;br /&gt;
*** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Transfer type, e.g. standard, dataverse, zipped bag, default: &amp;lt;code&amp;gt;standard&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;processing_config&amp;lt;/code&amp;gt;: [https://www.archivematica.org/en/docs/latest/user-manual/administer/dashboard-admin/#processing-configuration Processing configuration] to be used during, default: &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;accession&amp;lt;/code&amp;gt;: Accession ID&lt;br /&gt;
*** &amp;lt;code&amp;gt;access_system_id&amp;lt;/code&amp;gt;: Access system ID (see [https://www.archivematica.org/en/docs/latest/user-manual/access/access docs])&lt;br /&gt;
*** &amp;lt;code&amp;gt;metadata_set_id&amp;lt;/code&amp;gt;: TBC&lt;br /&gt;
*** &amp;lt;code&amp;gt;auto_approve&amp;lt;/code&amp;gt;: Boolean &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; to set the transfer to auto-approve, default: &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;: Transfer UUID&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Only a subset of these options might be needed for most use-cases. A fundamental difference between the &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt; endpoint and others from which a transfer can be initiated is that a storage service transfer location UUID isnt always required. In some cases that might still be ideal.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
''Starting a transfer using an absolute path:''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   curl -v POST \&lt;br /&gt;
     -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
     -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
     -d &amp;quot;{\&lt;br /&gt;
         \&amp;quot;path\&amp;quot;: \&amp;quot;$(echo -n '/home/archivematica/archivematica-sampledata/SampleTransfers/DemoTransfer' | base64 -w 0)\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;name\&amp;quot;: \&amp;quot;demo_transfer_absolute\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;processing_config\&amp;quot;: \&amp;quot;automated\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;type\&amp;quot;: \&amp;quot;standard\&amp;quot; \&lt;br /&gt;
         }&amp;quot; \&lt;br /&gt;
    &amp;quot;http://&amp;lt;archivematica-uri&amp;gt;/api/v2beta/package&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
''Starting a transfer using an relative path with a transfer source UUID:''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   curl -v POST \&lt;br /&gt;
     -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
     -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
     -d &amp;quot;{\&lt;br /&gt;
         \&amp;quot;path\&amp;quot;: \&amp;quot;$(echo -n 'd1184f7f-d755-4c8d-831a-a3793b88f760:/archivematica/archivematica-sampledata/SampleTransfers/DemoTransfer' | base64 -w 0)\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;name\&amp;quot;: \&amp;quot;demo_transfer_relative\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;processing_config\&amp;quot;: \&amp;quot;automated\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;type\&amp;quot;: \&amp;quot;standard\&amp;quot; \&lt;br /&gt;
         }&amp;quot; \&lt;br /&gt;
    &amp;quot;http://&amp;lt;archivematica-uri&amp;gt;/api/v2beta/package&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=12896</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=12896"/>
		<updated>2019-02-26T21:25:41Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Package */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main Page]] &amp;gt; [[Development]] &amp;gt; Archivematica API&lt;br /&gt;
&lt;br /&gt;
Endpoints require authentication with a username and API key.  This can be submitted as GET parameters (eg &amp;lt;code&amp;gt;?username=demo&amp;amp;api_key=e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;) or as a header (eg &amp;lt;code&amp;gt;Authorization: ApiKey demo:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Endpoints return JSON.  If there's an error, they will return a 4xx or 5xx HTTP error code and a JSON body &amp;lt;code&amp;gt;{'error': True, 'message': 'message describing error'}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Transfer ==&lt;br /&gt;
&lt;br /&gt;
=== Start Transfer ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/start_transfer/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a transfer.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of new transfer&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Type of the new transfer. One of: standard, unzipped bag, zipped bag, dspace&lt;br /&gt;
** &amp;lt;code&amp;gt;accession&amp;lt;/code&amp;gt;: Accession number of new transfer&lt;br /&gt;
** &amp;lt;code&amp;gt;paths[]&amp;lt;/code&amp;gt;: List of base64-encoded &amp;quot;&amp;lt;location_uuid&amp;gt;:&amp;lt;relative_path&amp;gt;&amp;quot; to be copied into the new transfer. Location UUIDs should be associated with this pipeline, and relative path should be relative to the location (TODO confirm relative vs absolute path).  E.g. NWJiYWJjMTMtMTIyNy00MWE3LWIwY2QtZjJhYzM1MjkxZTdmOi92YWdyYW50L3NhbXBsZWRhdGEvQ1NWbWV0YWRhdGE= (decoded: 5bbabc13-1227-41a7-b0cd-f2ac35291e7f:/vagrant/sampledata/CSVmetadata)&lt;br /&gt;
** &amp;lt;code&amp;gt;row_ids[]&amp;lt;/code&amp;gt;: ID of the associated TransferMetadataSet for disk image ingest.  Can be provided as [&amp;quot;&amp;quot;]&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Copy successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path the transfer was copied to on start?&lt;br /&gt;
&lt;br /&gt;
=== List Unapproved Transfers ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/unapproved&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns a list of transfers waiting for approval.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched unapproved transfers successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of dicts with keys:&lt;br /&gt;
*** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Transfer type. One of: standard, unzipped bag, zipped bag, dspace&lt;br /&gt;
*** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Directory the transfer is in currently&lt;br /&gt;
*** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the transfer&lt;br /&gt;
&lt;br /&gt;
=== Approve Transfer ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/approve&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Approve a transfer waiting to be started.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Type of the transfer to approved. One of: standard, unzipped bag, zipped bag, dspace.&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory for the transfer to approve&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the approved transfer&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/transfer/status/&amp;lt;transfer UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns the status of the transfer.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the transfer, e.g. &amp;quot;imgs&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: If status is COMPLETE, this field will exist with either the UUID of the SIP or 'BACKLOG'&lt;br /&gt;
** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory, e.g. &amp;quot;imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Full path to the transfer, e.g. &amp;quot;/var/archivematica/sharedDirectory/watchedDirectories/SIPCreation/completedTransfers/imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c/&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched status for &amp;lt;transfer UUID&amp;gt; successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: &amp;quot;transfer&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the transfer, e.g. &amp;quot;52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Hide ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/&amp;lt;transfer UUID&amp;gt;/delete/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
* Hide a transfer&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;removed&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/completed/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return list of Transfers that are completed&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched completed transfers successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of UUIDs of completed Transfers&lt;br /&gt;
* Added in Archivematica 1.6&lt;br /&gt;
&lt;br /&gt;
=== Start Reingest ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/transfer/reingest&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a full reingest.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the AIP. The AIP should also be found at &amp;lt;code&amp;gt;%sharedDirectory%/tmp/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the AIP to reingest&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_uuid&amp;lt;/code&amp;gt;: UUID of the reingested transfer&lt;br /&gt;
&lt;br /&gt;
== Ingest ==&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/ingest/status/&amp;lt;unit UUID&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns the status of the SIP&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: One of FAILED, REJECTED, USER_INPUT, COMPLETE or PROCESSING&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the SIP, e.g. &amp;quot;imgs&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
** &amp;lt;code&amp;gt;directory&amp;lt;/code&amp;gt;: Name of the directory, e.g. &amp;quot;imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Full path to the transfer, e.g. &amp;quot;/var/archivematica/sharedDirectory/currentlyProcessing/imgs-52dd0c01-e803-423a-be5f-b592b5d5d61c/&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched status for &amp;lt;SIP UUID&amp;gt; successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: &amp;quot;SIP&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the SIP, e.g. &amp;quot;52dd0c01-e803-423a-be5f-b592b5d5d61c&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Hide ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/&amp;lt;SIP UUID&amp;gt;/delete/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': DELETE&lt;br /&gt;
* Hide a SIP&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;removed&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== List SIPS Waiting for User Input ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/waiting&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Returns a list of SIPs waiting for user input.&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched units successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of dicts with keys:&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_directory&amp;lt;/code&amp;gt;: Directory the SIP is in currently&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: UUID of the SIP&lt;br /&gt;
*** &amp;lt;code&amp;gt;sip_name&amp;lt;/code&amp;gt;: Name of the SIP&lt;br /&gt;
*** &amp;lt;code&amp;gt;microservice&amp;lt;/code&amp;gt;: Name of the current microservice&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color:#ffeecc;&amp;quot; cellpadding=&amp;quot;10&amp;quot;;&lt;br /&gt;
| Improvement Note: Despite the URL, this currently returns both SIPs &amp;amp; transfers that are waiting for user input. A separate &amp;lt;code&amp;gt;/api/transfer/waiting&amp;lt;/code&amp;gt; should be added for transfers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/completed/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET&lt;br /&gt;
* Return list of SIPs that are completed&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Fetched completed ingests successfully.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;results&amp;lt;/code&amp;gt;: List of UUIDs of completed SIPs&lt;br /&gt;
* Added in Archivematica 1.6&lt;br /&gt;
&lt;br /&gt;
=== Reingest ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/reingest&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a partial or metadata-only reingest.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Name of the AIP. The AIP should also be found at &amp;lt;code&amp;gt;%sharedDirectory%/tmp/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;uuid&amp;lt;/code&amp;gt;: UUID of the AIP to reingest&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Approval successful.&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;reingest_uuid&amp;lt;/code&amp;gt;: UUID of the reingested SIP&lt;br /&gt;
&lt;br /&gt;
=== Copy Metadata ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/ingest/copy_metadata_files/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Add metadata files to a SIP.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** &amp;lt;code&amp;gt;sip_uuid&amp;lt;/code&amp;gt;: UUID of the SIP to put files in&lt;br /&gt;
** &amp;lt;code&amp;gt;source_paths[]&amp;lt;/code&amp;gt;: List of files to be copied, base64 encoded, in the format 'source_location_uuid:full_path'&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt;: False&lt;br /&gt;
** &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt;: &amp;quot;Files added successfully.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Levels of Description ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/administration/dips/atom/levels/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Returns a JSON-encoded set of the configured levels of description.&lt;br /&gt;
* ''Response'': JSON. List of AtoM Levels of description with key 'UUID' and value 'name of level of description'.&lt;br /&gt;
&lt;br /&gt;
=== Fetch Levels of Description ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/administration/dips/atom/fetch_levels/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Fetch all levels of description from an AtoM database, replacing any previously existing.&lt;br /&gt;
* '''Response''': JSON. Updated list of AtoM Levels of description with key 'UUID' and value 'name of level of description'.&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
=== Path Metadata ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/filesystem/metadata/&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET, POST&lt;br /&gt;
* Fetch (GET) or update (POST) metadata for a path (currently only level of description).&lt;br /&gt;
* '''Parameters''': Query string parameters (GET) or JSON body (POST)&lt;br /&gt;
** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Arranged path to get metadata on&lt;br /&gt;
* '''GET response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;level_of_description&amp;lt;/code&amp;gt;: Level of description&lt;br /&gt;
* '''POST response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;success&amp;lt;/code&amp;gt;: True&lt;br /&gt;
&lt;br /&gt;
=== Processing Configuration ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/processing-configuration/&amp;lt;name&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': GET?&lt;br /&gt;
* Return processing configuration with &amp;lt;name&amp;gt;&lt;br /&gt;
* '''Response''': The processing config file as a stream.&lt;br /&gt;
* '''Content type''': text/xml&lt;br /&gt;
&lt;br /&gt;
== Beta endpoints ==&lt;br /&gt;
&lt;br /&gt;
API endpoints which are still in-flux and that could potentially change. &lt;br /&gt;
&lt;br /&gt;
=== Package ===&lt;br /&gt;
&lt;br /&gt;
Provides additional functionality over the start and approve transfer endpoints, for example, wrapping both those steps into a single call.&lt;br /&gt;
&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/api/v2beta/package&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Verb''': POST&lt;br /&gt;
* Start a new transfer type.&lt;br /&gt;
* '''Parameters''': JSON body&lt;br /&gt;
** Mandatory&lt;br /&gt;
*** &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;: Transfer name&lt;br /&gt;
*** &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;: Path relative, or absolute to a storage service transfer source&lt;br /&gt;
**Optional&lt;br /&gt;
*** &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;: Transfer type, e.g. standard, dataverse, zipped bag, default: &amp;lt;code&amp;gt;standard&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;accession&amp;lt;/code&amp;gt;: Accession ID&lt;br /&gt;
*** &amp;lt;code&amp;gt;access_system_id&amp;lt;/code&amp;gt;: Access system ID (see [https://www.archivematica.org/en/docs/latest/user-manual/access/access docs])&lt;br /&gt;
*** &amp;lt;code&amp;gt;metadata_set_id&amp;lt;/code&amp;gt;: TBC&lt;br /&gt;
*** &amp;lt;code&amp;gt;auto_approve&amp;lt;/code&amp;gt;: Boolean &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt; to set the transfer to auto-approve, default: &amp;lt;code&amp;gt;True&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Response''': JSON&lt;br /&gt;
** &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;: Transfer UUID&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Only a subset of these options might be needed for most use-cases. A fundamental difference between the &amp;lt;code&amp;gt;package&amp;lt;/code&amp;gt; endpoint and others from which a transfer can be initiated is that a storage service transfer location UUID isnt always required. In some cases that might still be ideal.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
''Starting a transfer using an absolute path:''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   curl -v POST \&lt;br /&gt;
     -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
     -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
     -d &amp;quot;{\&lt;br /&gt;
         \&amp;quot;path\&amp;quot;: \&amp;quot;$(echo -n '/home/archivematica/archivematica-sampledata/SampleTransfers/DemoTransfer' | base64 -w 0)\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;name\&amp;quot;: \&amp;quot;demo_transfer_absolute\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;processing_config\&amp;quot;: \&amp;quot;automated\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;type\&amp;quot;: \&amp;quot;standard\&amp;quot; \&lt;br /&gt;
         }&amp;quot; \&lt;br /&gt;
    &amp;quot;http://&amp;lt;archivematica-uri&amp;gt;/api/v2beta/package&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
''Starting a transfer using an relative path with a transfer source UUID:''&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   curl -v POST \&lt;br /&gt;
     -H &amp;quot;Authorization: ApiKey test:test&amp;quot; \&lt;br /&gt;
     -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
     -d &amp;quot;{\&lt;br /&gt;
         \&amp;quot;path\&amp;quot;: \&amp;quot;$(echo -n 'd1184f7f-d755-4c8d-831a-a3793b88f760:/archivematica/archivematica-sampledata/SampleTransfers/DemoTransfer' | base64 -w 0)\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;name\&amp;quot;: \&amp;quot;demo_transfer_relative\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;processing_config\&amp;quot;: \&amp;quot;automated\&amp;quot;, \&lt;br /&gt;
         \&amp;quot;type\&amp;quot;: \&amp;quot;standard\&amp;quot; \&lt;br /&gt;
         }&amp;quot; \&lt;br /&gt;
    &amp;quot;http://&amp;lt;archivematica-uri&amp;gt;/api/v2beta/package&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category:Development documentation]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=12853</id>
		<title>Release Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=12853"/>
		<updated>2019-01-10T17:58:32Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Release Day Checklist */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an outline/checklist of the process to create Archivematica &amp;amp; Storage service releases.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
# Merge new features&lt;br /&gt;
# Test new features&lt;br /&gt;
# [[#Update PRONOM]]&lt;br /&gt;
# Write documentation&lt;br /&gt;
# Update dependencies&lt;br /&gt;
# Update version&lt;br /&gt;
# [[#Build deb/rpm packages]]&lt;br /&gt;
# Test packages for new installs and upgrades&lt;br /&gt;
# [[#Tag Release]]&lt;br /&gt;
# Update ansible roles&lt;br /&gt;
# Announce release&lt;br /&gt;
&lt;br /&gt;
== Translations ==&lt;br /&gt;
&lt;br /&gt;
'''Needs to be improved!'''&lt;br /&gt;
&lt;br /&gt;
* Determine code freeze / call for translations process&lt;br /&gt;
* Describe processes: push and pull - and when it needs to happen&lt;br /&gt;
* We made a choice on how we're using Transifex to keep things simple: only one branch at a time pushed to Transifex. E.g. once SS 0.10.0 is released we have to decide if:&lt;br /&gt;
*# We move Transifex to stable/0.10.x for a while so we can work on a minor release with translation fixes (e.g. 0.10.1), or&lt;br /&gt;
*# We move to qa/0.11.x which would only make possible to bring new translations to SS 0.11.0.&lt;br /&gt;
* Affected repositories&lt;br /&gt;
** archivematica-storage-service&lt;br /&gt;
** archivematica-workflow&lt;br /&gt;
** archivematica-dashboard&lt;br /&gt;
*** Includes archivematica-fpr-admin&lt;br /&gt;
*** Includes appraisal-tab&lt;br /&gt;
&lt;br /&gt;
== Update PRONOM ==&lt;br /&gt;
&lt;br /&gt;
PRONOM needs to be updated in our file identification tools, FIDO &amp;amp; Siegfried, as well as in the FPR.&lt;br /&gt;
&lt;br /&gt;
=== Update FIDO ===&lt;br /&gt;
&lt;br /&gt;
The FPR update currently use FIDO as a source for new PRONOM, since it is formatted nicer than PRONOM offers, so we depend on FIDO having updated their PRONOM.  If that has not happened, we can generate a new formats-v##.xml by updating signatures manually. Artefactual can also update PRONOM and submit a PR to FIDO.&lt;br /&gt;
&lt;br /&gt;
# Checkout fido from https://github.com/openpreserve/fido&lt;br /&gt;
# Update signatures&lt;br /&gt;
#* Run &amp;lt;code&amp;gt;python2 -m fido.update_signatures&amp;lt;/code&amp;gt; from the fido repository root&lt;br /&gt;
# Add:&lt;br /&gt;
#* New signature file &amp;lt;code&amp;gt;fido/conf/DROID_SignatureFile-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New formats file &amp;lt;code&amp;gt;fido/conf/formats-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New PRONOM zip file &amp;lt;code&amp;gt;fido/conf/pronom-xml-v##.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Updated &amp;lt;code&amp;gt;fido/conf/versions.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Remove:&lt;br /&gt;
#* Old signature file&lt;br /&gt;
#* Old formats file&lt;br /&gt;
#* Old PRONOM zip file&lt;br /&gt;
# Update the container signatures (download here: https://www.nationalarchives.gov.uk/aboutapps/pronom/droid-signature-files.htm)&lt;br /&gt;
#* See this pull request submitted to update to PRONOM 90: https://github.com/openpreserve/fido/pull/110&lt;br /&gt;
# Update &amp;lt;code&amp;gt;fido/fido.py&amp;lt;/code&amp;gt; to point to the new format_files&lt;br /&gt;
# Create pull request. &lt;br /&gt;
# Release new version of FIDO. Make sure to update __init__.py AND the versions XML with a new version before creating a release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remember to package FIDO and Siegfried in Archivematica! See next step below.&lt;br /&gt;
&lt;br /&gt;
=== Package FIDO ===&lt;br /&gt;
&lt;br /&gt;
FIDO is packaged via [http://pypi.org/ PyPi] under opf-fido. The Makefile includes a `make package` command that will do the update.&lt;br /&gt;
&lt;br /&gt;
MCPClient's base.txt [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/requirements/base.txt] will need to be updated with the latest version.&lt;br /&gt;
&lt;br /&gt;
=== Package Siegfried ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild] repo. Update the Makefiles available at &amp;lt;code&amp;gt;rpm/siegfried/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/siegfried/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Update FPR ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;text-alert&amp;quot;&amp;gt;&lt;br /&gt;
* In https://github.com/artefactual/archivematica-fpr-admin/pull/51, the devtools used here to generate the migration were included in archivematica-fpr-admin as django-admin management tools.&lt;br /&gt;
* At the end of the process: '''remember''' to remove &amp;quot;pk&amp;quot;s from the final migration fixture! E.g. see PR #55&lt;br /&gt;
* Examples&lt;br /&gt;
** PRONOM 92:&lt;br /&gt;
*** https://github.com/artefactual/archivematica-fpr-admin/pull/63&lt;br /&gt;
*** ???&lt;br /&gt;
** PRONOM 90:&lt;br /&gt;
*** https://github.com/artefactual/archivematica-fpr-admin/pull/51&lt;br /&gt;
*** https://github.com/artefactual/archivematica-fpr-admin/pull/55&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This process is currently more convoluted than it needs to be, and should be simplified.&lt;br /&gt;
&lt;br /&gt;
This depends on FIDO having updated their PRONOM files. See [[#Update FIDO]]&lt;br /&gt;
&lt;br /&gt;
# Generate a JSON with the current version of the FPR (for use later)&lt;br /&gt;
#* &amp;lt;code&amp;gt;python testproject/manage.py dumpdata fpr &amp;gt; fpr-current.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate a blank data migration&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;python testproject/manage.py makemigrations --empty --name pronom_89 fpr&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate the FPR migration body.  This also updates the local database's FPR with the new PRONOM IDs&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;python testproject/manage.py import_pronom_ids path/to/fido/fido/conf/formats-v89.xml --output-filename pronom89.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Copy the output into the blank migration above the Migration class&lt;br /&gt;
# Add the below RunPython operation into the Migration class, in the operations list&lt;br /&gt;
#* &amp;lt;code&amp;gt;migrations.RunPython(data_migration),&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;Due to a [https://projects.artefactual.com/issues/10466#change-46673 bug], fix the imports&amp;lt;/s&amp;gt;&lt;br /&gt;
#* &amp;lt;s&amp;gt;Remove the &amp;lt;code&amp;gt;apps.get_model&amp;lt;/code&amp;gt; lines&amp;lt;/s&amp;gt;&lt;br /&gt;
#* &amp;lt;s&amp;gt;Import the models directly with &amp;lt;code&amp;gt;from fpr.models import Format, FormatVersion, IDRule&amp;lt;/code&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
# Commit&lt;br /&gt;
# Deploy on testing pipeline or locally&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
(Analysts) &lt;br /&gt;
# Update the new entries&lt;br /&gt;
#* '''Ask to edit ONLY entries added by the latest PRONOM update otherwise the fixture won't work properly'''&lt;br /&gt;
#* Move new formats to a more appropriate category&lt;br /&gt;
#* Create rules &amp;amp; commands&lt;br /&gt;
#* Test with data for new formats&lt;br /&gt;
(End Analysts) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
# Generate a JSON with the updated version of the FPR on the testing pipeline&lt;br /&gt;
#* &amp;lt;code&amp;gt;python testproject/manage.py dumpdata fpr &amp;gt; fpr-updated.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get the updates as JSON&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;python testproject/manage.py get_fpr_changes fpr-current.json fpr-updated.json fpr/migrations/pronom_89.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Update the migration to load the JSON updates&lt;br /&gt;
#* Replace the contents of the data migration function with&lt;br /&gt;
#** &amp;lt;code&amp;gt;fixture_file = os.path.join(os.path.dirname(__file__), 'pronom_89.json')&amp;lt;/code&amp;gt;&lt;br /&gt;
#** &amp;lt;code&amp;gt;call_command('loaddata', fixture_file, app_label='fpr')&amp;lt;/code&amp;gt;&lt;br /&gt;
# Review JSON -- some IDs with multipleformats are being imported and will have to be manually reviewed until bug is identified/corrected.&lt;br /&gt;
#* Remove the direct imports from the bug&lt;br /&gt;
#* '''Remove the pk's from the entries in the JSON document.'''&lt;br /&gt;
#* Improvement Note: Because this is using loaddata, this will have problems if the FPR models are changed. A possible solution is to update get-fpr-changes to generate a migration instead of JSON&lt;br /&gt;
# Commit&lt;br /&gt;
# Merge&lt;br /&gt;
# Make new FPR release. Don't forget to update fpr/__init__.py! Then tag the release (e.g. `v.1.7.9`) and push the latest tag.&lt;br /&gt;
# Update AM's dashboard base.txt [https://github.com/artefactual/archivematica/blob/qa/1.x/src/dashboard/src/requirements/base.txt]&lt;br /&gt;
&lt;br /&gt;
== Update dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Python Packages ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/artefactual-labs/mets-reader-writer metsrw] and [https://github.com/artefactual-labs/agentarchives agentarchives] both have Makefiles that handle most of the packaging&lt;br /&gt;
&lt;br /&gt;
# Check for open PRs, merge as necessary&lt;br /&gt;
# Update &amp;lt;code&amp;gt;setup.py&amp;lt;/code&amp;gt; with the new version, create a pull request, code review, [[Merging | merge]].&lt;br /&gt;
# Tag new release, push tag&lt;br /&gt;
#* &amp;lt;code&amp;gt;git push --tags&amp;lt;/code&amp;gt;&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make package&amp;lt;/code&amp;gt;&lt;br /&gt;
#* This will build the package and upload it to PyPI. It will prompt for your PyPI username and password for the upload&lt;br /&gt;
#* The Makefile was created from instructions at https://packaging.python.org/distributing/&lt;br /&gt;
# &amp;lt;code&amp;gt;make clean&amp;lt;/code&amp;gt; will delete packaging related files&lt;br /&gt;
&lt;br /&gt;
== Update version ==&lt;br /&gt;
&lt;br /&gt;
# Update PREMIS agent to Archivematica-X.X.X&lt;br /&gt;
# Update Dashboard-Administration-Version to X.X.X&lt;br /&gt;
# Update Storage services-Admin-Version to X.X.X&lt;br /&gt;
&lt;br /&gt;
== Build deb/rpm packages ==&lt;br /&gt;
&lt;br /&gt;
The am-packbuild repository has all the code related to building packages, except the building gpg keys. The steps to follow in order to build production production packages are as follow&lt;br /&gt;
&lt;br /&gt;
=== Debian packages ===&lt;br /&gt;
&lt;br /&gt;
# Clone the [https://github.com/artefactual-labs/am-packbuild am-packbuild] repo. Latest work is available in master&lt;br /&gt;
# Put your gpg private key into &amp;lt;code&amp;gt;debs/GPG-KEYS-REPOS&amp;lt;/code&amp;gt;. That's the place the Dockerfile looks for it when building the environment.&lt;br /&gt;
# Update the makefile at &amp;lt;code&amp;gt;debs/archivematica/Makefile&amp;lt;/code&amp;gt; in order to reflect version/keys you want to use.&lt;br /&gt;
# Run &amp;lt;make&amp;gt;, and the packages will be available in the &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; once the building finishes.&lt;br /&gt;
# Upload packages to public debian repository&lt;br /&gt;
&lt;br /&gt;
=== Debian reposities ===&lt;br /&gt;
&lt;br /&gt;
There are two debian repositories, one for archivematica packages, and one for dependencies. The procedure in order to create new ones, or upload packages to them, is the same:&lt;br /&gt;
&lt;br /&gt;
#* Create folder for repo, and configuration file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
mkdir -p /path/to/repos/repo/conf&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /path/to/repos/repo/conf/distributions &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
Codename: trusty&lt;br /&gt;
&lt;br /&gt;
Components: main&lt;br /&gt;
&lt;br /&gt;
Architectures: amd64 source&lt;br /&gt;
&lt;br /&gt;
SignWith: &amp;lt;short gpg keyid&amp;gt; &lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#* Go inside the repo, and import the packages previously uploaded with:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd /path/to/repos/repo/&lt;br /&gt;
&lt;br /&gt;
reprepro includedeb trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
reprepro includedsc trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current official repo is at packages.archivematica.org&lt;br /&gt;
&lt;br /&gt;
=== RPM Packages ===&lt;br /&gt;
&lt;br /&gt;
# Package specs are available in [https://github.com/artefactual-labs/am-packbuild/tree/dev/packaging-1.6-docker/rpm am-packbuild/rpms]&lt;br /&gt;
# There are vars in the Makefiles for version/release , so update them when needed&lt;br /&gt;
# In order to build them, just go into the directory you want to build, and run “make”&lt;br /&gt;
&lt;br /&gt;
=== RPM Repositories ===&lt;br /&gt;
&lt;br /&gt;
Once the packages are built, upload them to packages.archivematica.org/&amp;lt;version&amp;gt;/centos&lt;br /&gt;
Sign the packages with rpm --addsign *.rpm (already signed packages will be skipped)&lt;br /&gt;
&lt;br /&gt;
Go inside that dir, and as user ohbot run:&lt;br /&gt;
&lt;br /&gt;
* ''rpm --addsign *.rpm'' (already signed packages will be skipped)&lt;br /&gt;
&lt;br /&gt;
* ''createrepo .'' (For packages other than archivematica , use  “centos-extras” repository)&lt;br /&gt;
&lt;br /&gt;
* ''gpg --detach-sign --armor repodata/repomd.xml'' &lt;br /&gt;
&lt;br /&gt;
The first gpg command signs the rpms, and the later signs the repository content.&lt;br /&gt;
&lt;br /&gt;
=== Development stage ===&lt;br /&gt;
&lt;br /&gt;
In the final stages of development, the repositories for the new releases are created, but packages are signed with a development key to avoid mistakes. Once the development stage finishes, all new packages need to be rebuild using the production keys.&lt;br /&gt;
&lt;br /&gt;
Development packages are built on each new commit to stable branches by Jenkins. Repositories are available at http://jenkins-ci.archivematica.org/repos/&lt;br /&gt;
&lt;br /&gt;
== Website ==&lt;br /&gt;
&lt;br /&gt;
'''Needs to be improved!'''&lt;br /&gt;
&lt;br /&gt;
==== Homepage ====&lt;br /&gt;
&lt;br /&gt;
* Make changes in archivematica-web.git&lt;br /&gt;
** Update links&lt;br /&gt;
** Add new doc repos&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-web.sh&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-docs.sh&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
&lt;br /&gt;
* Release notes&lt;br /&gt;
* Installation notes&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== News ==&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Mailing list&lt;br /&gt;
* News section in artefactual.com&lt;br /&gt;
&lt;br /&gt;
== Update ansible roles ==&lt;br /&gt;
&lt;br /&gt;
Check that the deploy-pub vars files for archivematica are updated, and the ansible-ansiblematica-src and ansible-archivematica-pkg roles are able to deploy the new version&lt;br /&gt;
&lt;br /&gt;
== Tag Release ==&lt;br /&gt;
&lt;br /&gt;
# Add release tags to repositories&lt;br /&gt;
#* Archivematica&lt;br /&gt;
#* Storage Service&lt;br /&gt;
#* FPR-admin&lt;br /&gt;
#* appraisal tab&lt;br /&gt;
#* transfer browser&lt;br /&gt;
#* Others?&lt;br /&gt;
# Create stable/#.x branch&lt;br /&gt;
# Delete qa/#.x branch if necessary&lt;br /&gt;
&lt;br /&gt;
== Release Day Checklist == &lt;br /&gt;
&lt;br /&gt;
'''Step 0''': Operations Team checklist tasks are complete (as of September 2018, this is an internal Trello list).&lt;br /&gt;
*At this point, there should be a release candidate that has been tested. A release candidate always precedes a tagged release. If any new issues have been uncovered, a new release candidate should be made and tested before proceeding with the rest of the steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 1''': Release Captain decides whether the current release candidate is ready to release&lt;br /&gt;
&lt;br /&gt;
* Look at all recently filed issues in GitHub -- is anything concerning / relevant for this release? Does anything need to be addressed? If an issue is uncovered that does need to be fixed, this restarts the checklist back to Step 0.&lt;br /&gt;
* Have automated tests passed?&lt;br /&gt;
&lt;br /&gt;
'''Step 2''': Release Captain creates a new tag for the release via gitolite (e.g. `v1.7.0` or `v0.11.0` for the Storage Service) or assigns someone else to do it.&lt;br /&gt;
&lt;br /&gt;
* Ensure you are adding the tag to the right commit! It should match the last commit of the final release candidate.&lt;br /&gt;
* You can create the tags from GitHub or from CLI: &amp;lt;code&amp;gt;git tag $VERSION $REVISION&amp;lt;/code&amp;gt;and &amp;lt;code&amp;gt;git push origin refs/tags/$VERSION&amp;lt;/code&amp;gt;&lt;br /&gt;
* Make sure that the version is valid,&lt;br /&gt;
** Valid values: v1.8.1, v1.8.1-rc.1&lt;br /&gt;
** Invalid values: 1.8.1, 1.8, 1.8.1-rc1, v1.8.1-rc1&lt;br /&gt;
&lt;br /&gt;
'''Step 3''': Sysadmin (for now; hopefully Jenkins for 1.8) builds new packages using the release tag.&lt;br /&gt;
&lt;br /&gt;
* See the internal wiki for steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 4''': Sysadmin copies new packages to the proper repository (e.g., https://packages.archivematica.org/1.7.x/)&lt;br /&gt;
&lt;br /&gt;
* See the internal wiki for steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 5''': Analyst updates the Archivematica documentation links in the install / upgrade section with the correct package names and locations (e.g. conf.py in docs repo)&lt;br /&gt;
&lt;br /&gt;
'''Step 6''': Sysadmin updates deploy-pub to use the new links.&lt;br /&gt;
&lt;br /&gt;
'''Step 7''': Developer updates archivematica-web (managed in Gitolite / Gitlab) to show the new release.&lt;br /&gt;
&lt;br /&gt;
* See the internal wiki for steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 8''': Developer changes the default branches in GitHub and Gitolite and updates references in https://gist.github.com/qubot.&lt;br /&gt;
&lt;br /&gt;
'''Step 9''': Systems administrator updates am-packbuild and upgrades public and private demo sites.&lt;br /&gt;
&lt;br /&gt;
* See the internal wiki for steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 10''': Release Captain finalizes the [https://wiki.archivematica.org/Release_Notes release notes] and adds a link to them in the [https://github.com/artefactual/archivematica/releases GitHub release]. Make sure that the releases are marked as &amp;quot;published&amp;quot;.&lt;br /&gt;
* https://github.com/artefactual/archivematica/releases&lt;br /&gt;
* https://github.com/artefactual/archivematica-storage-service/releases&lt;br /&gt;
&lt;br /&gt;
'''Step 11''': Release Captain posts a notification to the [https://groups.google.com/forum/#!forum/archivematica Archivematica Google Group] and the News section of the Artefactual website.&lt;br /&gt;
&lt;br /&gt;
'''Step 12''': Release Captain closes all release-related issues in the Verified column in Waffle.&lt;br /&gt;
&lt;br /&gt;
'''Step 13''': All involved eat cake (for a major release) or cupcakes (for a minor release).&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=12852</id>
		<title>Release Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=12852"/>
		<updated>2019-01-10T17:58:16Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Release Day Checklist */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an outline/checklist of the process to create Archivematica &amp;amp; Storage service releases.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
# Merge new features&lt;br /&gt;
# Test new features&lt;br /&gt;
# [[#Update PRONOM]]&lt;br /&gt;
# Write documentation&lt;br /&gt;
# Update dependencies&lt;br /&gt;
# Update version&lt;br /&gt;
# [[#Build deb/rpm packages]]&lt;br /&gt;
# Test packages for new installs and upgrades&lt;br /&gt;
# [[#Tag Release]]&lt;br /&gt;
# Update ansible roles&lt;br /&gt;
# Announce release&lt;br /&gt;
&lt;br /&gt;
== Translations ==&lt;br /&gt;
&lt;br /&gt;
'''Needs to be improved!'''&lt;br /&gt;
&lt;br /&gt;
* Determine code freeze / call for translations process&lt;br /&gt;
* Describe processes: push and pull - and when it needs to happen&lt;br /&gt;
* We made a choice on how we're using Transifex to keep things simple: only one branch at a time pushed to Transifex. E.g. once SS 0.10.0 is released we have to decide if:&lt;br /&gt;
*# We move Transifex to stable/0.10.x for a while so we can work on a minor release with translation fixes (e.g. 0.10.1), or&lt;br /&gt;
*# We move to qa/0.11.x which would only make possible to bring new translations to SS 0.11.0.&lt;br /&gt;
* Affected repositories&lt;br /&gt;
** archivematica-storage-service&lt;br /&gt;
** archivematica-workflow&lt;br /&gt;
** archivematica-dashboard&lt;br /&gt;
*** Includes archivematica-fpr-admin&lt;br /&gt;
*** Includes appraisal-tab&lt;br /&gt;
&lt;br /&gt;
== Update PRONOM ==&lt;br /&gt;
&lt;br /&gt;
PRONOM needs to be updated in our file identification tools, FIDO &amp;amp; Siegfried, as well as in the FPR.&lt;br /&gt;
&lt;br /&gt;
=== Update FIDO ===&lt;br /&gt;
&lt;br /&gt;
The FPR update currently use FIDO as a source for new PRONOM, since it is formatted nicer than PRONOM offers, so we depend on FIDO having updated their PRONOM.  If that has not happened, we can generate a new formats-v##.xml by updating signatures manually. Artefactual can also update PRONOM and submit a PR to FIDO.&lt;br /&gt;
&lt;br /&gt;
# Checkout fido from https://github.com/openpreserve/fido&lt;br /&gt;
# Update signatures&lt;br /&gt;
#* Run &amp;lt;code&amp;gt;python2 -m fido.update_signatures&amp;lt;/code&amp;gt; from the fido repository root&lt;br /&gt;
# Add:&lt;br /&gt;
#* New signature file &amp;lt;code&amp;gt;fido/conf/DROID_SignatureFile-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New formats file &amp;lt;code&amp;gt;fido/conf/formats-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New PRONOM zip file &amp;lt;code&amp;gt;fido/conf/pronom-xml-v##.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Updated &amp;lt;code&amp;gt;fido/conf/versions.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Remove:&lt;br /&gt;
#* Old signature file&lt;br /&gt;
#* Old formats file&lt;br /&gt;
#* Old PRONOM zip file&lt;br /&gt;
# Update the container signatures (download here: https://www.nationalarchives.gov.uk/aboutapps/pronom/droid-signature-files.htm)&lt;br /&gt;
#* See this pull request submitted to update to PRONOM 90: https://github.com/openpreserve/fido/pull/110&lt;br /&gt;
# Update &amp;lt;code&amp;gt;fido/fido.py&amp;lt;/code&amp;gt; to point to the new format_files&lt;br /&gt;
# Create pull request. &lt;br /&gt;
# Release new version of FIDO. Make sure to update __init__.py AND the versions XML with a new version before creating a release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remember to package FIDO and Siegfried in Archivematica! See next step below.&lt;br /&gt;
&lt;br /&gt;
=== Package FIDO ===&lt;br /&gt;
&lt;br /&gt;
FIDO is packaged via [http://pypi.org/ PyPi] under opf-fido. The Makefile includes a `make package` command that will do the update.&lt;br /&gt;
&lt;br /&gt;
MCPClient's base.txt [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/requirements/base.txt] will need to be updated with the latest version.&lt;br /&gt;
&lt;br /&gt;
=== Package Siegfried ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild] repo. Update the Makefiles available at &amp;lt;code&amp;gt;rpm/siegfried/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/siegfried/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Update FPR ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;text-alert&amp;quot;&amp;gt;&lt;br /&gt;
* In https://github.com/artefactual/archivematica-fpr-admin/pull/51, the devtools used here to generate the migration were included in archivematica-fpr-admin as django-admin management tools.&lt;br /&gt;
* At the end of the process: '''remember''' to remove &amp;quot;pk&amp;quot;s from the final migration fixture! E.g. see PR #55&lt;br /&gt;
* Examples&lt;br /&gt;
** PRONOM 92:&lt;br /&gt;
*** https://github.com/artefactual/archivematica-fpr-admin/pull/63&lt;br /&gt;
*** ???&lt;br /&gt;
** PRONOM 90:&lt;br /&gt;
*** https://github.com/artefactual/archivematica-fpr-admin/pull/51&lt;br /&gt;
*** https://github.com/artefactual/archivematica-fpr-admin/pull/55&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This process is currently more convoluted than it needs to be, and should be simplified.&lt;br /&gt;
&lt;br /&gt;
This depends on FIDO having updated their PRONOM files. See [[#Update FIDO]]&lt;br /&gt;
&lt;br /&gt;
# Generate a JSON with the current version of the FPR (for use later)&lt;br /&gt;
#* &amp;lt;code&amp;gt;python testproject/manage.py dumpdata fpr &amp;gt; fpr-current.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate a blank data migration&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;python testproject/manage.py makemigrations --empty --name pronom_89 fpr&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate the FPR migration body.  This also updates the local database's FPR with the new PRONOM IDs&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;python testproject/manage.py import_pronom_ids path/to/fido/fido/conf/formats-v89.xml --output-filename pronom89.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Copy the output into the blank migration above the Migration class&lt;br /&gt;
# Add the below RunPython operation into the Migration class, in the operations list&lt;br /&gt;
#* &amp;lt;code&amp;gt;migrations.RunPython(data_migration),&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;Due to a [https://projects.artefactual.com/issues/10466#change-46673 bug], fix the imports&amp;lt;/s&amp;gt;&lt;br /&gt;
#* &amp;lt;s&amp;gt;Remove the &amp;lt;code&amp;gt;apps.get_model&amp;lt;/code&amp;gt; lines&amp;lt;/s&amp;gt;&lt;br /&gt;
#* &amp;lt;s&amp;gt;Import the models directly with &amp;lt;code&amp;gt;from fpr.models import Format, FormatVersion, IDRule&amp;lt;/code&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
# Commit&lt;br /&gt;
# Deploy on testing pipeline or locally&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
(Analysts) &lt;br /&gt;
# Update the new entries&lt;br /&gt;
#* '''Ask to edit ONLY entries added by the latest PRONOM update otherwise the fixture won't work properly'''&lt;br /&gt;
#* Move new formats to a more appropriate category&lt;br /&gt;
#* Create rules &amp;amp; commands&lt;br /&gt;
#* Test with data for new formats&lt;br /&gt;
(End Analysts) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
# Generate a JSON with the updated version of the FPR on the testing pipeline&lt;br /&gt;
#* &amp;lt;code&amp;gt;python testproject/manage.py dumpdata fpr &amp;gt; fpr-updated.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get the updates as JSON&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;python testproject/manage.py get_fpr_changes fpr-current.json fpr-updated.json fpr/migrations/pronom_89.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Update the migration to load the JSON updates&lt;br /&gt;
#* Replace the contents of the data migration function with&lt;br /&gt;
#** &amp;lt;code&amp;gt;fixture_file = os.path.join(os.path.dirname(__file__), 'pronom_89.json')&amp;lt;/code&amp;gt;&lt;br /&gt;
#** &amp;lt;code&amp;gt;call_command('loaddata', fixture_file, app_label='fpr')&amp;lt;/code&amp;gt;&lt;br /&gt;
# Review JSON -- some IDs with multipleformats are being imported and will have to be manually reviewed until bug is identified/corrected.&lt;br /&gt;
#* Remove the direct imports from the bug&lt;br /&gt;
#* '''Remove the pk's from the entries in the JSON document.'''&lt;br /&gt;
#* Improvement Note: Because this is using loaddata, this will have problems if the FPR models are changed. A possible solution is to update get-fpr-changes to generate a migration instead of JSON&lt;br /&gt;
# Commit&lt;br /&gt;
# Merge&lt;br /&gt;
# Make new FPR release. Don't forget to update fpr/__init__.py! Then tag the release (e.g. `v.1.7.9`) and push the latest tag.&lt;br /&gt;
# Update AM's dashboard base.txt [https://github.com/artefactual/archivematica/blob/qa/1.x/src/dashboard/src/requirements/base.txt]&lt;br /&gt;
&lt;br /&gt;
== Update dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Python Packages ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/artefactual-labs/mets-reader-writer metsrw] and [https://github.com/artefactual-labs/agentarchives agentarchives] both have Makefiles that handle most of the packaging&lt;br /&gt;
&lt;br /&gt;
# Check for open PRs, merge as necessary&lt;br /&gt;
# Update &amp;lt;code&amp;gt;setup.py&amp;lt;/code&amp;gt; with the new version, create a pull request, code review, [[Merging | merge]].&lt;br /&gt;
# Tag new release, push tag&lt;br /&gt;
#* &amp;lt;code&amp;gt;git push --tags&amp;lt;/code&amp;gt;&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make package&amp;lt;/code&amp;gt;&lt;br /&gt;
#* This will build the package and upload it to PyPI. It will prompt for your PyPI username and password for the upload&lt;br /&gt;
#* The Makefile was created from instructions at https://packaging.python.org/distributing/&lt;br /&gt;
# &amp;lt;code&amp;gt;make clean&amp;lt;/code&amp;gt; will delete packaging related files&lt;br /&gt;
&lt;br /&gt;
== Update version ==&lt;br /&gt;
&lt;br /&gt;
# Update PREMIS agent to Archivematica-X.X.X&lt;br /&gt;
# Update Dashboard-Administration-Version to X.X.X&lt;br /&gt;
# Update Storage services-Admin-Version to X.X.X&lt;br /&gt;
&lt;br /&gt;
== Build deb/rpm packages ==&lt;br /&gt;
&lt;br /&gt;
The am-packbuild repository has all the code related to building packages, except the building gpg keys. The steps to follow in order to build production production packages are as follow&lt;br /&gt;
&lt;br /&gt;
=== Debian packages ===&lt;br /&gt;
&lt;br /&gt;
# Clone the [https://github.com/artefactual-labs/am-packbuild am-packbuild] repo. Latest work is available in master&lt;br /&gt;
# Put your gpg private key into &amp;lt;code&amp;gt;debs/GPG-KEYS-REPOS&amp;lt;/code&amp;gt;. That's the place the Dockerfile looks for it when building the environment.&lt;br /&gt;
# Update the makefile at &amp;lt;code&amp;gt;debs/archivematica/Makefile&amp;lt;/code&amp;gt; in order to reflect version/keys you want to use.&lt;br /&gt;
# Run &amp;lt;make&amp;gt;, and the packages will be available in the &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; once the building finishes.&lt;br /&gt;
# Upload packages to public debian repository&lt;br /&gt;
&lt;br /&gt;
=== Debian reposities ===&lt;br /&gt;
&lt;br /&gt;
There are two debian repositories, one for archivematica packages, and one for dependencies. The procedure in order to create new ones, or upload packages to them, is the same:&lt;br /&gt;
&lt;br /&gt;
#* Create folder for repo, and configuration file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
mkdir -p /path/to/repos/repo/conf&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /path/to/repos/repo/conf/distributions &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
Codename: trusty&lt;br /&gt;
&lt;br /&gt;
Components: main&lt;br /&gt;
&lt;br /&gt;
Architectures: amd64 source&lt;br /&gt;
&lt;br /&gt;
SignWith: &amp;lt;short gpg keyid&amp;gt; &lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#* Go inside the repo, and import the packages previously uploaded with:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd /path/to/repos/repo/&lt;br /&gt;
&lt;br /&gt;
reprepro includedeb trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
reprepro includedsc trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current official repo is at packages.archivematica.org&lt;br /&gt;
&lt;br /&gt;
=== RPM Packages ===&lt;br /&gt;
&lt;br /&gt;
# Package specs are available in [https://github.com/artefactual-labs/am-packbuild/tree/dev/packaging-1.6-docker/rpm am-packbuild/rpms]&lt;br /&gt;
# There are vars in the Makefiles for version/release , so update them when needed&lt;br /&gt;
# In order to build them, just go into the directory you want to build, and run “make”&lt;br /&gt;
&lt;br /&gt;
=== RPM Repositories ===&lt;br /&gt;
&lt;br /&gt;
Once the packages are built, upload them to packages.archivematica.org/&amp;lt;version&amp;gt;/centos&lt;br /&gt;
Sign the packages with rpm --addsign *.rpm (already signed packages will be skipped)&lt;br /&gt;
&lt;br /&gt;
Go inside that dir, and as user ohbot run:&lt;br /&gt;
&lt;br /&gt;
* ''rpm --addsign *.rpm'' (already signed packages will be skipped)&lt;br /&gt;
&lt;br /&gt;
* ''createrepo .'' (For packages other than archivematica , use  “centos-extras” repository)&lt;br /&gt;
&lt;br /&gt;
* ''gpg --detach-sign --armor repodata/repomd.xml'' &lt;br /&gt;
&lt;br /&gt;
The first gpg command signs the rpms, and the later signs the repository content.&lt;br /&gt;
&lt;br /&gt;
=== Development stage ===&lt;br /&gt;
&lt;br /&gt;
In the final stages of development, the repositories for the new releases are created, but packages are signed with a development key to avoid mistakes. Once the development stage finishes, all new packages need to be rebuild using the production keys.&lt;br /&gt;
&lt;br /&gt;
Development packages are built on each new commit to stable branches by Jenkins. Repositories are available at http://jenkins-ci.archivematica.org/repos/&lt;br /&gt;
&lt;br /&gt;
== Website ==&lt;br /&gt;
&lt;br /&gt;
'''Needs to be improved!'''&lt;br /&gt;
&lt;br /&gt;
==== Homepage ====&lt;br /&gt;
&lt;br /&gt;
* Make changes in archivematica-web.git&lt;br /&gt;
** Update links&lt;br /&gt;
** Add new doc repos&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-web.sh&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-docs.sh&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
&lt;br /&gt;
* Release notes&lt;br /&gt;
* Installation notes&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== News ==&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Mailing list&lt;br /&gt;
* News section in artefactual.com&lt;br /&gt;
&lt;br /&gt;
== Update ansible roles ==&lt;br /&gt;
&lt;br /&gt;
Check that the deploy-pub vars files for archivematica are updated, and the ansible-ansiblematica-src and ansible-archivematica-pkg roles are able to deploy the new version&lt;br /&gt;
&lt;br /&gt;
== Tag Release ==&lt;br /&gt;
&lt;br /&gt;
# Add release tags to repositories&lt;br /&gt;
#* Archivematica&lt;br /&gt;
#* Storage Service&lt;br /&gt;
#* FPR-admin&lt;br /&gt;
#* appraisal tab&lt;br /&gt;
#* transfer browser&lt;br /&gt;
#* Others?&lt;br /&gt;
# Create stable/#.x branch&lt;br /&gt;
# Delete qa/#.x branch if necessary&lt;br /&gt;
&lt;br /&gt;
== Release Day Checklist == &lt;br /&gt;
&lt;br /&gt;
'''Step 0''': Operations Team checklist tasks are complete (as of September 2018, this is an internal Trello list).&lt;br /&gt;
*At this point, there should be a release candidate that has been tested. A release candidate always precedes a tagged release. If any new issues have been uncovered, a new release candidate should be made and tested before proceeding with the rest of the steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 1''': Release Captain decides whether the current release candidate is ready to release&lt;br /&gt;
&lt;br /&gt;
* Look at all recently filed issues in GitHub -- is anything concerning / relevant for this release? Does anything need to be addressed? If an issue is uncovered that does need to be fixed, this restarts the checklist back to Step 0.&lt;br /&gt;
* Have automated tests passed?&lt;br /&gt;
&lt;br /&gt;
'''Step 2''': Release Captain creates a new tag for the release via gitolite (e.g. `v1.7.0` or `v0.11.0` for the Storage Service) or assigns someone else to do it.&lt;br /&gt;
&lt;br /&gt;
* Ensure you are adding the tag to the right commit! It should match the last commit of the final release candidate.&lt;br /&gt;
* You can create the tags from GitHub or from CLI: &amp;lt;code&amp;gt;git tag $VERSION $REVISION&amp;lt;/code&amp;gt;and &amp;lt;code&amp;gt;git push origin refs/tags/$VERSION&amp;lt;/code&amp;gt;&lt;br /&gt;
* Make sure that the version is valid,&lt;br /&gt;
** Valid values: v1.8.1, v1.8.1-rc.1&lt;br /&gt;
** Invalid values: 1.8.1, 1.8, 1.8.1-rc1, v1.8.1-rc1&lt;br /&gt;
&lt;br /&gt;
'''Step 3''': Sysadmin (for now; hopefully Jenkins for 1.8) builds new packages using the release tag.&lt;br /&gt;
&lt;br /&gt;
* See the internal wiki for steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 4''': Sysadmin copies new packages to the proper repository (e.g., https://packages.archivematica.org/1.7.x/)&lt;br /&gt;
&lt;br /&gt;
* See the internal wiki for steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 5''': Analyst updates the Archivematica documentation links in the install / upgrade section with the correct package names and locations (e.g. conf.py in docs repo)&lt;br /&gt;
&lt;br /&gt;
'''Step 6''': Sysadmin updates deploy-pub to use the new links.&lt;br /&gt;
&lt;br /&gt;
'''Step 7''': Developer updates archivematica-web (managed in Gitolite / Gitlab) to show the new release.&lt;br /&gt;
&lt;br /&gt;
* See the internal wiki for steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 8''': Developer changes the default branches in GitHub and Gitolite and updates references in https://gist.github.com/qubot.&lt;br /&gt;
&lt;br /&gt;
'''Step 9''': Systems administrator updates am-packbuild and upgrades public and private demo sites.&lt;br /&gt;
&lt;br /&gt;
* See the internal wiki for steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 10''': Release Captain finalizes the [https://wiki.archivematica.org/Release_Notes release notes] and adds a link to them in the [https://github.com/artefactual/archivematica/releases GitHub release]. Make sure that the releases are marked as &amp;quot;published&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
** https://github.com/artefactual/archivematica/releases&lt;br /&gt;
** https://github.com/artefactual/archivematica-storage-service/releases&lt;br /&gt;
&lt;br /&gt;
'''Step 11''': Release Captain posts a notification to the [https://groups.google.com/forum/#!forum/archivematica Archivematica Google Group] and the News section of the Artefactual website.&lt;br /&gt;
&lt;br /&gt;
'''Step 12''': Release Captain closes all release-related issues in the Verified column in Waffle.&lt;br /&gt;
&lt;br /&gt;
'''Step 13''': All involved eat cake (for a major release) or cupcakes (for a minor release).&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=12851</id>
		<title>Release Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Release_Process&amp;diff=12851"/>
		<updated>2019-01-10T17:57:23Z</updated>

		<summary type="html">&lt;p&gt;Sevein: /* Release Day Checklist */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an outline/checklist of the process to create Archivematica &amp;amp; Storage service releases.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
# Merge new features&lt;br /&gt;
# Test new features&lt;br /&gt;
# [[#Update PRONOM]]&lt;br /&gt;
# Write documentation&lt;br /&gt;
# Update dependencies&lt;br /&gt;
# Update version&lt;br /&gt;
# [[#Build deb/rpm packages]]&lt;br /&gt;
# Test packages for new installs and upgrades&lt;br /&gt;
# [[#Tag Release]]&lt;br /&gt;
# Update ansible roles&lt;br /&gt;
# Announce release&lt;br /&gt;
&lt;br /&gt;
== Translations ==&lt;br /&gt;
&lt;br /&gt;
'''Needs to be improved!'''&lt;br /&gt;
&lt;br /&gt;
* Determine code freeze / call for translations process&lt;br /&gt;
* Describe processes: push and pull - and when it needs to happen&lt;br /&gt;
* We made a choice on how we're using Transifex to keep things simple: only one branch at a time pushed to Transifex. E.g. once SS 0.10.0 is released we have to decide if:&lt;br /&gt;
*# We move Transifex to stable/0.10.x for a while so we can work on a minor release with translation fixes (e.g. 0.10.1), or&lt;br /&gt;
*# We move to qa/0.11.x which would only make possible to bring new translations to SS 0.11.0.&lt;br /&gt;
* Affected repositories&lt;br /&gt;
** archivematica-storage-service&lt;br /&gt;
** archivematica-workflow&lt;br /&gt;
** archivematica-dashboard&lt;br /&gt;
*** Includes archivematica-fpr-admin&lt;br /&gt;
*** Includes appraisal-tab&lt;br /&gt;
&lt;br /&gt;
== Update PRONOM ==&lt;br /&gt;
&lt;br /&gt;
PRONOM needs to be updated in our file identification tools, FIDO &amp;amp; Siegfried, as well as in the FPR.&lt;br /&gt;
&lt;br /&gt;
=== Update FIDO ===&lt;br /&gt;
&lt;br /&gt;
The FPR update currently use FIDO as a source for new PRONOM, since it is formatted nicer than PRONOM offers, so we depend on FIDO having updated their PRONOM.  If that has not happened, we can generate a new formats-v##.xml by updating signatures manually. Artefactual can also update PRONOM and submit a PR to FIDO.&lt;br /&gt;
&lt;br /&gt;
# Checkout fido from https://github.com/openpreserve/fido&lt;br /&gt;
# Update signatures&lt;br /&gt;
#* Run &amp;lt;code&amp;gt;python2 -m fido.update_signatures&amp;lt;/code&amp;gt; from the fido repository root&lt;br /&gt;
# Add:&lt;br /&gt;
#* New signature file &amp;lt;code&amp;gt;fido/conf/DROID_SignatureFile-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New formats file &amp;lt;code&amp;gt;fido/conf/formats-v##.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
#* New PRONOM zip file &amp;lt;code&amp;gt;fido/conf/pronom-xml-v##.zip&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Updated &amp;lt;code&amp;gt;fido/conf/versions.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Remove:&lt;br /&gt;
#* Old signature file&lt;br /&gt;
#* Old formats file&lt;br /&gt;
#* Old PRONOM zip file&lt;br /&gt;
# Update the container signatures (download here: https://www.nationalarchives.gov.uk/aboutapps/pronom/droid-signature-files.htm)&lt;br /&gt;
#* See this pull request submitted to update to PRONOM 90: https://github.com/openpreserve/fido/pull/110&lt;br /&gt;
# Update &amp;lt;code&amp;gt;fido/fido.py&amp;lt;/code&amp;gt; to point to the new format_files&lt;br /&gt;
# Create pull request. &lt;br /&gt;
# Release new version of FIDO. Make sure to update __init__.py AND the versions XML with a new version before creating a release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remember to package FIDO and Siegfried in Archivematica! See next step below.&lt;br /&gt;
&lt;br /&gt;
=== Package FIDO ===&lt;br /&gt;
&lt;br /&gt;
FIDO is packaged via [http://pypi.org/ PyPi] under opf-fido. The Makefile includes a `make package` command that will do the update.&lt;br /&gt;
&lt;br /&gt;
MCPClient's base.txt [https://github.com/artefactual/archivematica/blob/qa/1.x/src/MCPClient/requirements/base.txt] will need to be updated with the latest version.&lt;br /&gt;
&lt;br /&gt;
=== Package Siegfried ===&lt;br /&gt;
&lt;br /&gt;
First, clone the [https://github.com/artefactual-labs/am-packbuild/  am-packbuild] repo. Update the Makefiles available at &amp;lt;code&amp;gt;rpm/siegfried/Makefile&amp;lt;/code&amp;gt;, and  &amp;lt;code&amp;gt;deb/siegfried/Makefile&amp;lt;/code&amp;gt; , and run &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; in each directory to build the packages.&lt;br /&gt;
&lt;br /&gt;
=== Update FPR ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;text-alert&amp;quot;&amp;gt;&lt;br /&gt;
* In https://github.com/artefactual/archivematica-fpr-admin/pull/51, the devtools used here to generate the migration were included in archivematica-fpr-admin as django-admin management tools.&lt;br /&gt;
* At the end of the process: '''remember''' to remove &amp;quot;pk&amp;quot;s from the final migration fixture! E.g. see PR #55&lt;br /&gt;
* Examples&lt;br /&gt;
** PRONOM 92:&lt;br /&gt;
*** https://github.com/artefactual/archivematica-fpr-admin/pull/63&lt;br /&gt;
*** ???&lt;br /&gt;
** PRONOM 90:&lt;br /&gt;
*** https://github.com/artefactual/archivematica-fpr-admin/pull/51&lt;br /&gt;
*** https://github.com/artefactual/archivematica-fpr-admin/pull/55&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This process is currently more convoluted than it needs to be, and should be simplified.&lt;br /&gt;
&lt;br /&gt;
This depends on FIDO having updated their PRONOM files. See [[#Update FIDO]]&lt;br /&gt;
&lt;br /&gt;
# Generate a JSON with the current version of the FPR (for use later)&lt;br /&gt;
#* &amp;lt;code&amp;gt;python testproject/manage.py dumpdata fpr &amp;gt; fpr-current.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate a blank data migration&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;python testproject/manage.py makemigrations --empty --name pronom_89 fpr&amp;lt;/code&amp;gt;&lt;br /&gt;
# Generate the FPR migration body.  This also updates the local database's FPR with the new PRONOM IDs&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;python testproject/manage.py import_pronom_ids path/to/fido/fido/conf/formats-v89.xml --output-filename pronom89.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Copy the output into the blank migration above the Migration class&lt;br /&gt;
# Add the below RunPython operation into the Migration class, in the operations list&lt;br /&gt;
#* &amp;lt;code&amp;gt;migrations.RunPython(data_migration),&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;s&amp;gt;Due to a [https://projects.artefactual.com/issues/10466#change-46673 bug], fix the imports&amp;lt;/s&amp;gt;&lt;br /&gt;
#* &amp;lt;s&amp;gt;Remove the &amp;lt;code&amp;gt;apps.get_model&amp;lt;/code&amp;gt; lines&amp;lt;/s&amp;gt;&lt;br /&gt;
#* &amp;lt;s&amp;gt;Import the models directly with &amp;lt;code&amp;gt;from fpr.models import Format, FormatVersion, IDRule&amp;lt;/code&amp;gt;&amp;lt;/s&amp;gt;&lt;br /&gt;
# Commit&lt;br /&gt;
# Deploy on testing pipeline or locally&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
(Analysts) &lt;br /&gt;
# Update the new entries&lt;br /&gt;
#* '''Ask to edit ONLY entries added by the latest PRONOM update otherwise the fixture won't work properly'''&lt;br /&gt;
#* Move new formats to a more appropriate category&lt;br /&gt;
#* Create rules &amp;amp; commands&lt;br /&gt;
#* Test with data for new formats&lt;br /&gt;
(End Analysts) &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
# Generate a JSON with the updated version of the FPR on the testing pipeline&lt;br /&gt;
#* &amp;lt;code&amp;gt;python testproject/manage.py dumpdata fpr &amp;gt; fpr-updated.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Get the updates as JSON&lt;br /&gt;
#* E.g. &amp;lt;code&amp;gt;python testproject/manage.py get_fpr_changes fpr-current.json fpr-updated.json fpr/migrations/pronom_89.json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Update the migration to load the JSON updates&lt;br /&gt;
#* Replace the contents of the data migration function with&lt;br /&gt;
#** &amp;lt;code&amp;gt;fixture_file = os.path.join(os.path.dirname(__file__), 'pronom_89.json')&amp;lt;/code&amp;gt;&lt;br /&gt;
#** &amp;lt;code&amp;gt;call_command('loaddata', fixture_file, app_label='fpr')&amp;lt;/code&amp;gt;&lt;br /&gt;
# Review JSON -- some IDs with multipleformats are being imported and will have to be manually reviewed until bug is identified/corrected.&lt;br /&gt;
#* Remove the direct imports from the bug&lt;br /&gt;
#* '''Remove the pk's from the entries in the JSON document.'''&lt;br /&gt;
#* Improvement Note: Because this is using loaddata, this will have problems if the FPR models are changed. A possible solution is to update get-fpr-changes to generate a migration instead of JSON&lt;br /&gt;
# Commit&lt;br /&gt;
# Merge&lt;br /&gt;
# Make new FPR release. Don't forget to update fpr/__init__.py! Then tag the release (e.g. `v.1.7.9`) and push the latest tag.&lt;br /&gt;
# Update AM's dashboard base.txt [https://github.com/artefactual/archivematica/blob/qa/1.x/src/dashboard/src/requirements/base.txt]&lt;br /&gt;
&lt;br /&gt;
== Update dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Python Packages ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/artefactual-labs/mets-reader-writer metsrw] and [https://github.com/artefactual-labs/agentarchives agentarchives] both have Makefiles that handle most of the packaging&lt;br /&gt;
&lt;br /&gt;
# Check for open PRs, merge as necessary&lt;br /&gt;
# Update &amp;lt;code&amp;gt;setup.py&amp;lt;/code&amp;gt; with the new version, create a pull request, code review, [[Merging | merge]].&lt;br /&gt;
# Tag new release, push tag&lt;br /&gt;
#* &amp;lt;code&amp;gt;git push --tags&amp;lt;/code&amp;gt;&lt;br /&gt;
# Run &amp;lt;code&amp;gt;make package&amp;lt;/code&amp;gt;&lt;br /&gt;
#* This will build the package and upload it to PyPI. It will prompt for your PyPI username and password for the upload&lt;br /&gt;
#* The Makefile was created from instructions at https://packaging.python.org/distributing/&lt;br /&gt;
# &amp;lt;code&amp;gt;make clean&amp;lt;/code&amp;gt; will delete packaging related files&lt;br /&gt;
&lt;br /&gt;
== Update version ==&lt;br /&gt;
&lt;br /&gt;
# Update PREMIS agent to Archivematica-X.X.X&lt;br /&gt;
# Update Dashboard-Administration-Version to X.X.X&lt;br /&gt;
# Update Storage services-Admin-Version to X.X.X&lt;br /&gt;
&lt;br /&gt;
== Build deb/rpm packages ==&lt;br /&gt;
&lt;br /&gt;
The am-packbuild repository has all the code related to building packages, except the building gpg keys. The steps to follow in order to build production production packages are as follow&lt;br /&gt;
&lt;br /&gt;
=== Debian packages ===&lt;br /&gt;
&lt;br /&gt;
# Clone the [https://github.com/artefactual-labs/am-packbuild am-packbuild] repo. Latest work is available in master&lt;br /&gt;
# Put your gpg private key into &amp;lt;code&amp;gt;debs/GPG-KEYS-REPOS&amp;lt;/code&amp;gt;. That's the place the Dockerfile looks for it when building the environment.&lt;br /&gt;
# Update the makefile at &amp;lt;code&amp;gt;debs/archivematica/Makefile&amp;lt;/code&amp;gt; in order to reflect version/keys you want to use.&lt;br /&gt;
# Run &amp;lt;make&amp;gt;, and the packages will be available in the &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; once the building finishes.&lt;br /&gt;
# Upload packages to public debian repository&lt;br /&gt;
&lt;br /&gt;
=== Debian reposities ===&lt;br /&gt;
&lt;br /&gt;
There are two debian repositories, one for archivematica packages, and one for dependencies. The procedure in order to create new ones, or upload packages to them, is the same:&lt;br /&gt;
&lt;br /&gt;
#* Create folder for repo, and configuration file:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
mkdir -p /path/to/repos/repo/conf&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; /path/to/repos/repo/conf/distributions &amp;lt;&amp;lt; EOF&lt;br /&gt;
&lt;br /&gt;
Codename: trusty&lt;br /&gt;
&lt;br /&gt;
Components: main&lt;br /&gt;
&lt;br /&gt;
Architectures: amd64 source&lt;br /&gt;
&lt;br /&gt;
SignWith: &amp;lt;short gpg keyid&amp;gt; &lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#* Go inside the repo, and import the packages previously uploaded with:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd /path/to/repos/repo/&lt;br /&gt;
&lt;br /&gt;
reprepro includedeb trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
reprepro includedsc trusty /path/to/packages/*.deb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current official repo is at packages.archivematica.org&lt;br /&gt;
&lt;br /&gt;
=== RPM Packages ===&lt;br /&gt;
&lt;br /&gt;
# Package specs are available in [https://github.com/artefactual-labs/am-packbuild/tree/dev/packaging-1.6-docker/rpm am-packbuild/rpms]&lt;br /&gt;
# There are vars in the Makefiles for version/release , so update them when needed&lt;br /&gt;
# In order to build them, just go into the directory you want to build, and run “make”&lt;br /&gt;
&lt;br /&gt;
=== RPM Repositories ===&lt;br /&gt;
&lt;br /&gt;
Once the packages are built, upload them to packages.archivematica.org/&amp;lt;version&amp;gt;/centos&lt;br /&gt;
Sign the packages with rpm --addsign *.rpm (already signed packages will be skipped)&lt;br /&gt;
&lt;br /&gt;
Go inside that dir, and as user ohbot run:&lt;br /&gt;
&lt;br /&gt;
* ''rpm --addsign *.rpm'' (already signed packages will be skipped)&lt;br /&gt;
&lt;br /&gt;
* ''createrepo .'' (For packages other than archivematica , use  “centos-extras” repository)&lt;br /&gt;
&lt;br /&gt;
* ''gpg --detach-sign --armor repodata/repomd.xml'' &lt;br /&gt;
&lt;br /&gt;
The first gpg command signs the rpms, and the later signs the repository content.&lt;br /&gt;
&lt;br /&gt;
=== Development stage ===&lt;br /&gt;
&lt;br /&gt;
In the final stages of development, the repositories for the new releases are created, but packages are signed with a development key to avoid mistakes. Once the development stage finishes, all new packages need to be rebuild using the production keys.&lt;br /&gt;
&lt;br /&gt;
Development packages are built on each new commit to stable branches by Jenkins. Repositories are available at http://jenkins-ci.archivematica.org/repos/&lt;br /&gt;
&lt;br /&gt;
== Website ==&lt;br /&gt;
&lt;br /&gt;
'''Needs to be improved!'''&lt;br /&gt;
&lt;br /&gt;
==== Homepage ====&lt;br /&gt;
&lt;br /&gt;
* Make changes in archivematica-web.git&lt;br /&gt;
** Update links&lt;br /&gt;
** Add new doc repos&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-web.sh&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
&lt;br /&gt;
* Deploy&lt;br /&gt;
** Log in sites-pub as archivematica-web and run update-docs.sh&lt;br /&gt;
&lt;br /&gt;
==== Wiki ====&lt;br /&gt;
&lt;br /&gt;
* Release notes&lt;br /&gt;
* Installation notes&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== News ==&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Mailing list&lt;br /&gt;
* News section in artefactual.com&lt;br /&gt;
&lt;br /&gt;
== Update ansible roles ==&lt;br /&gt;
&lt;br /&gt;
Check that the deploy-pub vars files for archivematica are updated, and the ansible-ansiblematica-src and ansible-archivematica-pkg roles are able to deploy the new version&lt;br /&gt;
&lt;br /&gt;
== Tag Release ==&lt;br /&gt;
&lt;br /&gt;
# Add release tags to repositories&lt;br /&gt;
#* Archivematica&lt;br /&gt;
#* Storage Service&lt;br /&gt;
#* FPR-admin&lt;br /&gt;
#* appraisal tab&lt;br /&gt;
#* transfer browser&lt;br /&gt;
#* Others?&lt;br /&gt;
# Create stable/#.x branch&lt;br /&gt;
# Delete qa/#.x branch if necessary&lt;br /&gt;
&lt;br /&gt;
== Release Day Checklist == &lt;br /&gt;
&lt;br /&gt;
'''Step 0''': Operations Team checklist tasks are complete (as of September 2018, this is an internal Trello list).&lt;br /&gt;
*At this point, there should be a release candidate that has been tested. A release candidate always precedes a tagged release. If any new issues have been uncovered, a new release candidate should be made and tested before proceeding with the rest of the steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 1''': Release Captain decides whether the current release candidate is ready to release&lt;br /&gt;
&lt;br /&gt;
* Look at all recently filed issues in GitHub -- is anything concerning / relevant for this release? Does anything need to be addressed? If an issue is uncovered that does need to be fixed, this restarts the checklist back to Step 0.&lt;br /&gt;
* Have automated tests passed?&lt;br /&gt;
&lt;br /&gt;
'''Step 2''': Release Captain creates a new tag for the release via gitolite (e.g. `v1.7.0` or `v0.11.0` for the Storage Service) or assigns someone else to do it.&lt;br /&gt;
&lt;br /&gt;
* Ensure you are adding the tag to the right commit! It should match the last commit of the final release candidate.&lt;br /&gt;
* You can create the tags from GitHub or from CLI: &amp;lt;code&amp;gt;git tag $VERSION $REVISION&amp;lt;/code&amp;gt;and &amp;lt;code&amp;gt;git push origin refs/tags/$VERSION&amp;lt;/code&amp;gt;&lt;br /&gt;
* Make sure that the version is valid,&lt;br /&gt;
** Valid values: v1.8.1, v1.8.1-rc.1&lt;br /&gt;
** Invalid values: 1.8.1, 1.8, 1.8.1-rc1, v1.8.1-rc1&lt;br /&gt;
* Publish the tags in GitHub!&lt;br /&gt;
** https://github.com/artefactual/archivematica/releases&lt;br /&gt;
** https://github.com/artefactual/archivematica-storage-service/releases&lt;br /&gt;
** Do not forget to include a link to the release notes! Use previous releases as a reference on how to do it.&lt;br /&gt;
&lt;br /&gt;
'''Step 3''': Sysadmin (for now; hopefully Jenkins for 1.8) builds new packages using the release tag.&lt;br /&gt;
&lt;br /&gt;
* See the internal wiki for steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 4''': Sysadmin copies new packages to the proper repository (e.g., https://packages.archivematica.org/1.7.x/)&lt;br /&gt;
&lt;br /&gt;
* See the internal wiki for steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 5''': Analyst updates the Archivematica documentation links in the install / upgrade section with the correct package names and locations (e.g. conf.py in docs repo)&lt;br /&gt;
&lt;br /&gt;
'''Step 6''': Sysadmin updates deploy-pub to use the new links.&lt;br /&gt;
&lt;br /&gt;
'''Step 7''': Developer updates archivematica-web (managed in Gitolite / Gitlab) to show the new release.&lt;br /&gt;
&lt;br /&gt;
* See the internal wiki for steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 8''': Developer changes the default branches in GitHub and Gitolite and updates references in https://gist.github.com/qubot.&lt;br /&gt;
&lt;br /&gt;
'''Step 9''': Systems administrator updates am-packbuild and upgrades public and private demo sites.&lt;br /&gt;
&lt;br /&gt;
* See the internal wiki for steps.&lt;br /&gt;
&lt;br /&gt;
'''Step 10''': Release Captain finalizes the [https://wiki.archivematica.org/Release_Notes release notes] and adds a link to them in the [https://github.com/artefactual/archivematica/releases GitHub release].&lt;br /&gt;
&lt;br /&gt;
'''Step 11''': Release Captain posts a notification to the [https://groups.google.com/forum/#!forum/archivematica Archivematica Google Group] and the News section of the Artefactual website.&lt;br /&gt;
&lt;br /&gt;
'''Step 12''': Release Captain closes all release-related issues in the Verified column in Waffle.&lt;br /&gt;
&lt;br /&gt;
'''Step 13''': All involved eat cake (for a major release) or cupcakes (for a minor release).&lt;br /&gt;
&lt;br /&gt;
[[Category:Process documentation]]&lt;/div&gt;</summary>
		<author><name>Sevein</name></author>
	</entry>
</feed>