<?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=Mcurran</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=Mcurran"/>
	<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/Special:Contributions/Mcurran"/>
	<updated>2026-05-02T17:41:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.4</generator>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13131</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13131"/>
		<updated>2019-07-12T16:41:54Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: Added note regarding limitation of string queries.&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;
* 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;/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;/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/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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13127</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13127"/>
		<updated>2019-07-12T00:47:48Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: Removed extra character&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;
* 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;
=== List jobs ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/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;/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/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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13126</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13126"/>
		<updated>2019-07-12T00:45:46Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: Added microservices and task API endpoints per @replaceafill. #722&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;
* 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;
=== List jobs ===&lt;br /&gt;
* '''URL''': &amp;lt;code&amp;gt;/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;/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/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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13125</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13125"/>
		<updated>2019-07-12T00:37:30Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
* 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;
=== List jobs ===&lt;br /&gt;
* '''URL''': /v2beta/jobs/&amp;lt;unit UUID&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''': /v2beta/task/&amp;lt;task UUID&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/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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13117</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13117"/>
		<updated>2019-07-05T00:21:07Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;/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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13116</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13116"/>
		<updated>2019-07-05T00:20:25Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;''your 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;/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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13115</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13115"/>
		<updated>2019-07-05T00:18:45Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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=demo&amp;amp;api_key=&amp;lt;your 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;/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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13114</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13114"/>
		<updated>2019-07-04T23:35:52Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
'''NOTE:'''&amp;lt;br \&amp;gt;&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is as follows: &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;&lt;br /&gt;
See Tastypie docs for [https://django-tastypie.readthedocs.io/en/latest/authentication.html#apikeyauthentication ApiKeyAuthentication].''&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;/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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13113</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13113"/>
		<updated>2019-07-04T23:33:51Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
'''NOTE:'''&amp;lt;br \&amp;gt;&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is as follows: &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;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
See Tastypie docs for [https://django-tastypie.readthedocs.io/en/latest/authentication.html#apikeyauthentication ApiKeyAuthentication].''&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;
'''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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13112</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13112"/>
		<updated>2019-07-04T23:33:17Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
''NOTE:&amp;lt;br \&amp;gt;&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is as follows: &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;amp;nbsp;&lt;br /&gt;
See Tastypie docs for [https://django-tastypie.readthedocs.io/en/latest/authentication.html#apikeyauthentication ApiKeyAuthentication].''&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;
'''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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13111</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13111"/>
		<updated>2019-07-04T23:32:17Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
'''NOTE:'''&amp;lt;br \&amp;gt;&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is as follows: &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;amp;nbsp;&lt;br /&gt;
See Tastypie docs for [https://django-tastypie.readthedocs.io/en/latest/authentication.html#apikeyauthentication ApiKeyAuthentication].&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;
'''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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13110</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13110"/>
		<updated>2019-07-04T23:31:47Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
'''NOTE:'''&amp;lt;br \&amp;gt;&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is as follows: &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;amp;nbsp;&lt;br /&gt;
See Tastypie docs for [https://django-tastypie.readthedocs.io/en/latest/authentication.html#apikeyauthentication APIKeyAuthentication].&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;
'''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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13109</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13109"/>
		<updated>2019-07-04T23:28:54Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
'''NOTE:'''&amp;lt;br \&amp;gt;&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is as follows: &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;amp;nbsp;&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;
'''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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13108</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13108"/>
		<updated>2019-07-04T23:28:29Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
'''NOTE:'''&amp;lt;br \&amp;gt;&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is as follows: &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;&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;/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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13107</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13107"/>
		<updated>2019-07-04T23:27:58Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
'''NOTE:'''&amp;lt;br \&amp;gt;&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is as follows: &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;&lt;br /&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;
'''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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13106</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13106"/>
		<updated>2019-07-04T23:27:22Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
'''NOTE:'''&amp;lt;br \&amp;gt;&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is as follows: &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;&lt;br /&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;
'''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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13105</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13105"/>
		<updated>2019-07-04T23:26:42Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
'''NOTE:'''&amp;lt;br \&amp;gt;&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is as follows: &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;
Example: &amp;lt;code&amp;gt;Authorization: ApiKey demo:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&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;
'''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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13104</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13104"/>
		<updated>2019-07-04T23:25:53Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
'''NOTE:'''&amp;lt;br \&amp;gt;&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is as follows: &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;
For example: &amp;lt;code&amp;gt;Authorization: ApiKey demo:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&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;
'''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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13103</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13103"/>
		<updated>2019-07-04T23:24:02Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
'''NOTE:'''&amp;lt;br \&amp;gt;&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is `ApiKey &amp;lt;username&amp;gt;:&amp;lt;api_key&amp;gt;`; the above example is &amp;lt;code&amp;gt;Authorization: ApiKey demo:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&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;
'''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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13102</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13102"/>
		<updated>2019-07-04T23:23:11Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
'''NOTE:''' &amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is `ApiKey &amp;lt;username&amp;gt;:&amp;lt;api_key&amp;gt;`; the above example is &amp;lt;code&amp;gt;Authorization: ApiKey demo:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&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;
'''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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13101</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13101"/>
		<updated>2019-07-04T23:22:44Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
'''NOTE:''' &amp;amp;nbsp;&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is `ApiKey &amp;lt;username&amp;gt;:&amp;lt;api_key&amp;gt;`; the above example is &amp;lt;code&amp;gt;Authorization: ApiKey demo:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&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;
'''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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13100</id>
		<title>Archivematica API</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_API&amp;diff=13100"/>
		<updated>2019-07-04T23:22:12Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: &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;
'''NOTE:'''&lt;br /&gt;
When submitting as a header, be sure to include the 'ApiKey' prefix, as this is the required formatting for the Tastypie library in use.&lt;br /&gt;
In other words, the header format is `ApiKey &amp;lt;username&amp;gt;:&amp;lt;api_key&amp;gt;`; the above example is &amp;lt;code&amp;gt;Authorization: ApiKey demo:e6282adabed84e39ffe451f8bf6ff1a67c1fc9f2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&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;
'''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>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.8_and_Storage_Service_0.13_release_notes&amp;diff=12736</id>
		<title>Archivematica 1.8 and Storage Service 0.13 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.8_and_Storage_Service_0.13_release_notes&amp;diff=12736"/>
		<updated>2018-10-25T19:56:08Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Major release notes template&lt;br /&gt;
&lt;br /&gt;
'''Work in progress'''&lt;br /&gt;
&lt;br /&gt;
==Supported environments==&lt;br /&gt;
&lt;br /&gt;
Link to installation instructions.&lt;br /&gt;
&lt;br /&gt;
Specify supported environments.&lt;br /&gt;
&lt;br /&gt;
Make special note of any changes to supported environment.&lt;br /&gt;
&lt;br /&gt;
==Added==&lt;br /&gt;
&lt;br /&gt;
===Dataverse integration===&lt;br /&gt;
&lt;br /&gt;
Archivematica can now be configured to use a [https://dataverse.org/ Dataverse] research data repository as a transfer source location. Dataverse transfer source locations can be configured to display all available datasets or a subset of them. Datasets are retrieved directly using the Dataverse API and processed using a new “Dataverse” transfer type. New dataverse specific processing includes:&lt;br /&gt;
&lt;br /&gt;
* fixity checking using checksums generated by dataverse&lt;br /&gt;
* retrieval of derivative and metadata files associated with tabular data files&lt;br /&gt;
* creation of a Dataverse METS file describing the dataset as retrieved from Dataverse&lt;br /&gt;
* Dataverse metadata included in the AIP METS&lt;br /&gt;
&lt;br /&gt;
Some advanced or more complex use cases are not fully supported, such as handling of datasets with restricted files, versioning of datasets and reingest of datasets. For a full list of known issues and enhancement ideas, refer to the [https://github.com/archivematica/Issues/labels/OCUL%3A%20AM-Dataverse Archivematica issues repository using Dataverse label] and the [https://wiki.archivematica.org/Dataverse Archivematica Wiki].   &lt;br /&gt;
&lt;br /&gt;
This work was sponsored by [https://scholarsportal.info/ Scholars Portal], a service of the Ontario Council of University Libraries (OCUL). Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: See [https://waffle.io/artefactual/archivematica?label=OCUL:%20AM-Dataverse waffle board] for all issues with the Dataverse label. &lt;br /&gt;
* Documentation: [https://www.archivematica.org/en/docs/archivematica-1.8/user-manual/transfer/dataverse/ Dataverse Integration]&lt;br /&gt;
&lt;br /&gt;
===Processing configuration reset and download buttons===&lt;br /&gt;
&lt;br /&gt;
A new installation of Archivematica comes with a pre-set processing configuration called &amp;quot;default&amp;quot;, and a second one (used only in Jisc workflows) called &amp;quot;automated&amp;quot;. In testing, users are encouraged to change the configurations to suit their workflows, but may need to reset the configuration to the installation pre-sets. A reset button has been added so that users can easily change the default and automated processing configurations back to their installation pre-sets.&lt;br /&gt;
&lt;br /&gt;
The second part of this feature is the addition of a download button for the processing configuration files. If you create a custom processing configuration, you can download the resulting processingMCP.xml file using the button and then include it at the top level of your transfer. Archivematica will then use this to automate your transfer selections, rather than the default configuration.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1138 #1138]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/docs/archivematica-1.8/user-manual/administer/dashboard-admin/#processing-configuration Processing configuration documentation]&lt;br /&gt;
&lt;br /&gt;
===Public URL===&lt;br /&gt;
&lt;br /&gt;
Archivematica now has a concept of a public URL in the general configuration. Archivematica usually registers itself with the Storage Service, but if you have deployed Archivematica in an environment where the URL or IP address changes frequently (i.e. in some Docker environments) this can cause issues. In these types of environments, users can now declare a stable public URL that Archivematica can use to register with the Storage Service.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1140 1140]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/docs/archivematica-1.8/admin-manual/installation-setup/customization/dashboard-config/#admin-dashboard-general General configuration]&lt;br /&gt;
&lt;br /&gt;
==Changed==&lt;br /&gt;
&lt;br /&gt;
Enhancements or major fixes.&lt;br /&gt;
&lt;br /&gt;
===Streamline checksum verification===&lt;br /&gt;
&lt;br /&gt;
This enhancement de-duplicates checksum verification in Archivematica, which helps to improve the performance of Archivematica in processing large transfers (many files and/or large files). This enhancement includes three changes:&lt;br /&gt;
&lt;br /&gt;
* Remove the &amp;quot;Verify checksums generated on ingest&amp;quot; micro-service&lt;br /&gt;
* Enhance the &amp;quot;Verify AIP&amp;quot; micro-service to bulk query the database for transfer-generated checksums and then verify that they match what is documented in the bag-generated manifest-&amp;lt;ALGORITHM&amp;gt;.txt.&lt;br /&gt;
* Have &amp;quot;Verify AIP&amp;quot; create an AIP-level &amp;quot;fixity check&amp;quot; PREMIS:EVENT that it can pass to the Storage Service, which will document this verification in the pointer file.&lt;br /&gt;
&lt;br /&gt;
This should not impact regular workflows, but it is worth noting that there is no AIP-level fixity check PREMIS event for uncompressed AIPs, which don't have pointer files. For uncompressed AIPs, there are still object-level fixity events in place. Note that there is an issue in the Archivematica Issues repository regarding this note - [https://github.com/artefactual/archivematica-storage-service/issues/324 Problem: uncompressed AIPs need pointer files #32]&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Columbia University Library. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/918 918]&lt;br /&gt;
&lt;br /&gt;
===Indexing can be enabled/disabled for Transfers and/or Archival Storage===&lt;br /&gt;
&lt;br /&gt;
Previously, the ElasticSearch index feature could be disabled globally as a scalability measure since indexing consumes a lot of resources. However, this also disabled Backlog and Appraisal features (which also uses indexing) and which some users still wanted to access. As of release 1.8, Archivematica can be deployed to run with indexing enabled just for Transfers (Backlog and Appraisal enabled), just for Archival Storage (Backlog and Appraisal disabled), for both indexes, or for none.&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1172 1172]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/docs/archivematica-1.8/admin-manual/installation-setup/installation/installation/#elasticsearch Installation &amp;gt; Elasticsearch]&lt;br /&gt;
&lt;br /&gt;
===Configure email settings===&lt;br /&gt;
&lt;br /&gt;
This change improves the ways that the email client in Archivematica can be configured, including allowing an administrator to set the sender email address for emails sent by Archivematica (i.e. normalization reports, failure reports) to comply with local IT requirements.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1128 1128]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/docs/archivematica-1.8/admin-manual/installation-setup/customization/customization/#email-notification-configuration Email notification configuration]&lt;br /&gt;
&lt;br /&gt;
===Download processing configuration and reset to default===&lt;br /&gt;
&lt;br /&gt;
Previous versions of Archivematica introduced the ability to add custom processing configurations, but users had to retrieve the custom configuration file via the command line to use it. There is now a download button on Administration &amp;gt; Processing configuration so that you can download the processing config from the user interface.&lt;br /&gt;
&lt;br /&gt;
You can also reset a processing configuration to the installation pre-set by clicking on the new reset button on Administration &amp;gt; Processing configuration.&lt;br /&gt;
&lt;br /&gt;
The documentation for using a custom processing configuration has also been updated.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1138 1138], [https://github.com/artefactual/archivematica/issues/800 800]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/en/docs/archivematica-1.8/user-manual/administer/dashboard-admin/#processing-configuration Processing configuration (user manual)], [https://www.archivematica.org/en/docs/archivematica-1.8/admin-manual/installation-setup/customization/dashboard-config/#processing-configuration Processing configuration (administrator manual)], [https://www.archivematica.org/en/docs/archivematica-1.8/admin-manual/installation-setup/customization/dashboard-config/#using-a-custom-processing-configuration-file Using a custom processing configuration file]&lt;br /&gt;
&lt;br /&gt;
===MCP batching for scalability &amp;amp; performance===&lt;br /&gt;
&lt;br /&gt;
This feature refactors how tasks are scheduled, executed &amp;amp; managed within Archivematica, by grouping tasks into batches. It introduces processing efficiencies that significantly decrease the processing power and time required to complete Transfer and Ingest. It includes new configuration options to further optimize processing efficiency for particular types of Transfers (e.g. few large files vs. many small files) and for different deployment patterns (e.g. installing components across multiple machines). &lt;br /&gt;
&lt;br /&gt;
This feature does not impact the functionality or appearance of Archivematica.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!  &lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/938 938]&lt;br /&gt;
* Documentation: Scaling Archivematica [update with link when PR 182 is merged];&lt;br /&gt;
&lt;br /&gt;
===Binder integration improvements===&lt;br /&gt;
&lt;br /&gt;
Archivematica has had an integration with [https://binder.readthedocs.io/en/latest/user-manual/overview/intro.html Binder] for several years. Binder is an open-source web application for managing time-based media and born-digital artworks that also depends on TMS.&lt;br /&gt;
&lt;br /&gt;
Since Binder is built off of [https://www.accesstomemory.org/ AtoM], much of the integration configuration was repurposed from the AtoM integration. Archivematica 1.8 makes it explicit, for example, that the job &amp;quot;DIP Upload to AtoM&amp;quot; is actually &amp;quot;DIP Upload to AtoM/Binder&amp;quot;. In the Administration tab, the configuration section for AtoM has also been renamed to include Binder.&lt;br /&gt;
&lt;br /&gt;
Enhancing the Binder integration itself, Archivematica's transfer tab now includes an &amp;quot;Access system ID&amp;quot; box. This allows users to pre-populate an access system ID for AtoM or Binder, so that DIPs can be automatically uploaded without having to stop at the Upload DIP microservice. Users can still use the Upload DIP popup if desired.&lt;br /&gt;
&lt;br /&gt;
Finally, we've added documentation on using Binder with Archivematica.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Tate. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Documentation: [https://www.archivematica.org/en/docs/archivematica-1.8/admin-manual/installation-setup/integrations/integrations/#binder-integration Binder integration], [https://www.archivematica.org/en/docs/archivematica-1.8/admin-manual/installation-setup/integrations/binder-setup/#binder-setup Using Binder with Archivematica], [https://www.archivematica.org/en/docs/archivematica-1.8/user-manual/access/access/#upload-a-dip-to-binder Upload a DIP to Binder]&lt;br /&gt;
* Issues: [https://github.com/archivematica/Issues/issues/23 23]&lt;br /&gt;
&lt;br /&gt;
===File format identification updates===&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.8 is now up to date with PRONOM v.94! For more information on new data added to PRONOM, check the [http://www.nationalarchives.gov.uk/aboutapps/pronom/release-notes.xml PRONOM release notes].&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by the Denver Art Museum. Thank you!&lt;br /&gt;
&lt;br /&gt;
==Fixed==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/16 ASCII codes can't decode when the filename contains a backtick]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/42 AIP re-ingest fails]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/43 PREMIS events from previous transfers are re-appearing]&lt;br /&gt;
* [https://github.com/artefactual/archivematica/issues/1132 Metadata reingest fails when dc:type is null]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/46 Use 7-zip without compression (Copy) mode]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/69 Cannot store AIP in DSpace due to file extension returned]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/123 DSpace REST login error in SS]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/124 Unable to edit DSpace REST Space settings in SS]&lt;br /&gt;
* [https://github.com/artefactual/archivematica-storage-service/issues/391 Packages cannot be stored in DSpace via its REST API]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/140 Metadata added before &amp;quot;Approve Transfer&amp;quot; disappears]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/173 Generate AIP METS fails for bag SIPs if bag-info.txt has multiple instances of the same label]&lt;br /&gt;
* [https://github.com/artefactual/archivematica/issues/1104 Zip files with diacritic characters are failing to extract]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/220 restructureBagForComplianceFileUUIDsAssigned needs to create intermediate directories for Zipped bag transfers] - '''Community contribution''' by Hillel Arnold. Thank you!&lt;br /&gt;
* [https://github.com/artefactual/archivematica/issues/1050 Ingest fails if Archivematica isn't connected to the Internet]&lt;br /&gt;
&lt;br /&gt;
==Upgraded tools and dependencies==&lt;br /&gt;
&lt;br /&gt;
* Fido has been upgraded to version 1.3.12&lt;br /&gt;
* Siegfried has been upgraded to version 1.7.10&lt;br /&gt;
* FITS has been upgraded to version 1.1.0&lt;br /&gt;
&lt;br /&gt;
==End of life dependencies==&lt;br /&gt;
&lt;br /&gt;
===Archivists' Toolkit integration===&lt;br /&gt;
&lt;br /&gt;
Archivists' Toolkit has been deprecated since 2013. The Archivists' Toolkit DIP upload feature has not had active development or testing since then. There are no plans to start testing or to fix any problems with the feature. As a result, there is a [https://github.com/archivematica/Issues/issues/174 proposal deprecate this feature in Archivematica 1.9]. Community response is welcome via a comment on the issue in GitHub.&lt;/div&gt;</summary>
		<author><name>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.8_and_Storage_Service_0.13_release_notes&amp;diff=12735</id>
		<title>Archivematica 1.8 and Storage Service 0.13 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.8_and_Storage_Service_0.13_release_notes&amp;diff=12735"/>
		<updated>2018-10-25T19:49:49Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Major release notes template&lt;br /&gt;
&lt;br /&gt;
'''Work in progress'''&lt;br /&gt;
&lt;br /&gt;
==Supported environments==&lt;br /&gt;
&lt;br /&gt;
Link to installation instructions.&lt;br /&gt;
&lt;br /&gt;
Specify supported environments.&lt;br /&gt;
&lt;br /&gt;
Make special note of any changes to supported environment.&lt;br /&gt;
&lt;br /&gt;
==Added==&lt;br /&gt;
&lt;br /&gt;
===Dataverse integration===&lt;br /&gt;
&lt;br /&gt;
Archivematica can now be configured to use a [https://dataverse.org/ Dataverse] research data repository as a transfer source location. Dataverse transfer source locations can be configured to display all available datasets or a subset of them. Datasets are retrieved directly using the Dataverse API and processed using a new “Dataverse” transfer type. New dataverse specific processing includes:&lt;br /&gt;
&lt;br /&gt;
* fixity checking using checksums generated by dataverse&lt;br /&gt;
* retrieval of derivative and metadata files associated with tabular data files&lt;br /&gt;
* creation of a Dataverse METS file describing the dataset as retrieved from Dataverse&lt;br /&gt;
* Dataverse metadata included in the AIP METS&lt;br /&gt;
&lt;br /&gt;
Some advanced or more complex use cases are not fully supported, such as handling of datasets with restricted files, versioning of datasets and reingest of datasets. For a full list of known issues and enhancement ideas, refer to the [https://github.com/archivematica/Issues/labels/OCUL%3A%20AM-Dataverse Archivematica issues repository using Dataverse label] and the [https://wiki.archivematica.org/Dataverse Archivematica Wiki].   &lt;br /&gt;
&lt;br /&gt;
This work was sponsored by [https://scholarsportal.info/ Scholars Portal], a service of the Ontario Council of University Libraries (OCUL). Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: See [https://waffle.io/artefactual/archivematica?label=OCUL:%20AM-Dataverse waffle board] for all issues with the Dataverse label. &lt;br /&gt;
* Documentation: [https://www.archivematica.org/en/docs/archivematica-1.8/user-manual/transfer/dataverse/ Dataverse Integration]&lt;br /&gt;
&lt;br /&gt;
===Processing configuration reset and download buttons===&lt;br /&gt;
&lt;br /&gt;
A new installation of Archivematica comes with a pre-set processing configuration called &amp;quot;default&amp;quot;, and a second one (used only in Jisc workflows) called &amp;quot;automated&amp;quot;. In testing, users are encouraged to change the configurations to suit their workflows, but may need to reset the configuration to the installation pre-sets. A reset button has been added so that users can easily change the default and automated processing configurations back to their installation pre-sets.&lt;br /&gt;
&lt;br /&gt;
The second part of this feature is the addition of a download button for the processing configuration files. If you create a custom processing configuration, you can download the resulting processingMCP.xml file using the button and then include it at the top level of your transfer. Archivematica will then use this to automate your transfer selections, rather than the default configuration.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1138 #1138]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/docs/archivematica-1.8/user-manual/administer/dashboard-admin/#processing-configuration Processing configuration documentation]&lt;br /&gt;
&lt;br /&gt;
===Public URL===&lt;br /&gt;
&lt;br /&gt;
Archivematica now has a concept of a public URL in the general configuration. Archivematica usually registers itself with the Storage Service, but if you have deployed Archivematica in an environment where the URL or IP address changes frequently (i.e. in some Docker environments) this can cause issues. In these types of environments, users can now declare a stable public URL that Archivematica can use to register with the Storage Service.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1140 1140]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/docs/archivematica-1.8/admin-manual/installation-setup/customization/dashboard-config/#admin-dashboard-general General configuration]&lt;br /&gt;
&lt;br /&gt;
==Changed==&lt;br /&gt;
&lt;br /&gt;
Enhancements or major fixes.&lt;br /&gt;
&lt;br /&gt;
===Streamline checksum verification===&lt;br /&gt;
&lt;br /&gt;
This enhancement de-duplicates checksum verification in Archivematica, which helps to improve the performance of Archivematica in processing large transfers (many files and/or large files). This enhancement includes three changes:&lt;br /&gt;
&lt;br /&gt;
* Remove the &amp;quot;Verify checksums generated on ingest&amp;quot; micro-service&lt;br /&gt;
* Enhance the &amp;quot;Verify AIP&amp;quot; micro-service to bulk query the database for transfer-generated checksums and then verify that they match what is documented in the bag-generated manifest-&amp;lt;ALGORITHM&amp;gt;.txt.&lt;br /&gt;
* Have &amp;quot;Verify AIP&amp;quot; create an AIP-level &amp;quot;fixity check&amp;quot; PREMIS:EVENT that it can pass to the Storage Service, which will document this verification in the pointer file.&lt;br /&gt;
&lt;br /&gt;
This should not impact regular workflows, but it is worth noting that there is no AIP-level fixity check PREMIS event for uncompressed AIPs, which don't have pointer files. For uncompressed AIPs, there are still object-level fixity events in place. Note that there is an issue in the Archivematica Issues repository regarding this note - [https://github.com/artefactual/archivematica-storage-service/issues/324 Problem: uncompressed AIPs need pointer files #32]&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Columbia University Library. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/918 918]&lt;br /&gt;
&lt;br /&gt;
===Indexing can be enabled/disabled for Transfers and/or Archival Storage===&lt;br /&gt;
&lt;br /&gt;
Previously, the ElasticSearch index feature could be disabled globally as a scalability measure since indexing consumes a lot of resources. However, this also disabled Backlog and Appraisal features (which also uses indexing) and which some users still wanted to access. As of release 1.8, Archivematica can be deployed to run with indexing enabled just for Transfers (Backlog and Appraisal enabled), just for Archival Storage (Backlog and Appraisal disabled), for both indexes, or for none.&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1172 1172]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/docs/archivematica-1.8/admin-manual/installation-setup/installation/installation/#elasticsearch Installation &amp;gt; Elasticsearch]&lt;br /&gt;
&lt;br /&gt;
===Configure email settings===&lt;br /&gt;
&lt;br /&gt;
This change improves the ways that the email client in Archivematica can be configured, including allowing an administrator to set the sender email address for emails sent by Archivematica (i.e. normalization reports, failure reports) to comply with local IT requirements.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1128 1128]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/docs/archivematica-1.8/admin-manual/installation-setup/customization/customization/#email-notification-configuration Email notification configuration]&lt;br /&gt;
&lt;br /&gt;
===Download processing configuration and reset to default===&lt;br /&gt;
&lt;br /&gt;
Previous versions of Archivematica introduced the ability to add custom processing configurations, but users had to retrieve the custom configuration file via the command line to use it. There is now a download button on Administration &amp;gt; Processing configuration so that you can download the processing config from the user interface.&lt;br /&gt;
&lt;br /&gt;
You can also reset a processing configuration to the installation pre-set by clicking on the new reset button on Administration &amp;gt; Processing configuration.&lt;br /&gt;
&lt;br /&gt;
The documentation for using a custom processing configuration has also been updated.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1138 1138], [https://github.com/artefactual/archivematica/issues/800 800]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/en/docs/archivematica-1.8/user-manual/administer/dashboard-admin/#processing-configuration Processing configuration (user manual)], [https://www.archivematica.org/en/docs/archivematica-1.8/admin-manual/installation-setup/customization/dashboard-config/#processing-configuration Processing configuration (administrator manual)], [https://www.archivematica.org/en/docs/archivematica-1.8/admin-manual/installation-setup/customization/dashboard-config/#using-a-custom-processing-configuration-file Using a custom processing configuration file]&lt;br /&gt;
&lt;br /&gt;
===MCP batching for scalability &amp;amp; performance===&lt;br /&gt;
&lt;br /&gt;
This feature refactors how tasks are scheduled, executed &amp;amp; managed within Archivematica, by grouping tasks into batches. It introduces processing efficiencies that significantly decrease the processing power and time required to complete Transfer and Ingest. It includes new configuration options to further optimize processing efficiency for particular types of Transfers (e.g. few large files vs. many small files) and for different deployment patterns (e.g. installing components across multiple machines). &lt;br /&gt;
&lt;br /&gt;
This feature does not impact the functionality or appearance of Archivematica.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!  &lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/938 938]&lt;br /&gt;
* Documentation: Scaling Archivematica [update with link when PR 182 is merged];&lt;br /&gt;
&lt;br /&gt;
===Binder integration improvements===&lt;br /&gt;
&lt;br /&gt;
Archivematica has had an integration with [https://binder.readthedocs.io/en/latest/user-manual/overview/intro.html Binder] for several years. Binder is an open-source web application for managing time-based media and born-digital artworks that also depends on TMS.&lt;br /&gt;
&lt;br /&gt;
Since Binder is built off of [https://www.accesstomemory.org/ AtoM], much of the integration configuration was repurposed from the AtoM integration. Archivematica 1.8 makes it explicit, for example, that the job &amp;quot;DIP Upload to AtoM&amp;quot; is actually &amp;quot;DIP Upload to AtoM/Binder&amp;quot;. In the Administration tab, the configuration section for AtoM has also been renamed to include Binder.&lt;br /&gt;
&lt;br /&gt;
Enhancing the Binder integration itself, Archivematica's transfer tab now includes an &amp;quot;Access system ID&amp;quot; box. This allows users to pre-populate an access system ID for AtoM or Binder, so that DIPs can be automatically uploaded without having to stop at the Upload DIP microservice. Users can still use the Upload DIP popup if desired.&lt;br /&gt;
&lt;br /&gt;
Finally, we've added documentation on using Binder with Archivematica.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Tate. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Documentation: [https://www.archivematica.org/en/docs/archivematica-1.8/admin-manual/installation-setup/integrations/integrations/#binder-integration Binder integration], [https://www.archivematica.org/en/docs/archivematica-1.8/admin-manual/installation-setup/integrations/binder-setup/#binder-setup Using Binder with Archivematica], [https://www.archivematica.org/en/docs/archivematica-1.8/user-manual/access/access/#upload-a-dip-to-binder Upload a DIP to Binder]&lt;br /&gt;
* Issues: [https://github.com/archivematica/Issues/issues/23 23]&lt;br /&gt;
&lt;br /&gt;
===File format identification updates===&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.8 is now up to date with PRONOM v.94! For more information on new data added to PRONOM, check the [http://www.nationalarchives.gov.uk/aboutapps/pronom/release-notes.xml PRONOM release notes].&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by the Denver Art Museum. Thank you!&lt;br /&gt;
&lt;br /&gt;
==Fixed==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/16 ASCII codes can't decode when the filename contains a backtick]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/42 AIP re-ingest fails]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/43 PREMIS events from previous transfers are re-appearing]&lt;br /&gt;
* [https://github.com/artefactual/archivematica/issues/1132 Metadata reingest fails when dc:type is null]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/46 Use 7-zip without compression (Copy) mode]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/69 Cannot store AIP in DSpace due to file extension returned]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/123 DSpace REST login error in SS]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/124 Unable to edit DSpace REST Space settings in SS]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/140 Metadata added before &amp;quot;Approve Transfer&amp;quot; disappears]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/173 Generate AIP METS fails for bag SIPs if bag-info.txt has multiple instances of the same label]&lt;br /&gt;
* [https://github.com/artefactual/archivematica/issues/1104 Zip files with diacritic characters are failing to extract]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/220 restructureBagForComplianceFileUUIDsAssigned needs to create intermediate directories for Zipped bag transfers] - '''Community contribution''' by Hillel Arnold. Thank you!&lt;br /&gt;
* [https://github.com/artefactual/archivematica/issues/1050 Ingest fails if Archivematica isn't connected to the Internet]&lt;br /&gt;
&lt;br /&gt;
==Upgraded tools and dependencies==&lt;br /&gt;
&lt;br /&gt;
* Fido has been upgraded to version 1.3.12&lt;br /&gt;
* Siegfried has been upgraded to version 1.7.10&lt;br /&gt;
* FITS has been upgraded to version 1.1.0&lt;br /&gt;
&lt;br /&gt;
==End of life dependencies==&lt;br /&gt;
&lt;br /&gt;
===Archivists' Toolkit integration===&lt;br /&gt;
&lt;br /&gt;
Archivists' Toolkit has been deprecated since 2013. The Archivists' Toolkit DIP upload feature has not had active development or testing since then. There are no plans to start testing or to fix any problems with the feature. As a result, there is a [https://github.com/archivematica/Issues/issues/174 proposal deprecate this feature in Archivematica 1.9]. Community response is welcome via a comment on the issue in GitHub.&lt;/div&gt;</summary>
		<author><name>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.8_and_Storage_Service_0.13_release_notes&amp;diff=12734</id>
		<title>Archivematica 1.8 and Storage Service 0.13 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.8_and_Storage_Service_0.13_release_notes&amp;diff=12734"/>
		<updated>2018-10-25T19:47:12Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Major release notes template&lt;br /&gt;
&lt;br /&gt;
'''Work in progress'''&lt;br /&gt;
&lt;br /&gt;
==Supported environments==&lt;br /&gt;
&lt;br /&gt;
Link to installation instructions.&lt;br /&gt;
&lt;br /&gt;
Specify supported environments.&lt;br /&gt;
&lt;br /&gt;
Make special note of any changes to supported environment.&lt;br /&gt;
&lt;br /&gt;
==Added==&lt;br /&gt;
&lt;br /&gt;
===Dataverse integration===&lt;br /&gt;
&lt;br /&gt;
Archivematica can now be configured to use a [https://dataverse.org/ Dataverse] research data repository as a transfer source location. Dataverse transfer source locations can be configured to display all available datasets or a subset of them. Datasets are retrieved directly using the Dataverse API and processed using a new “Dataverse” transfer type. New dataverse specific processing includes:&lt;br /&gt;
&lt;br /&gt;
* fixity checking using checksums generated by dataverse&lt;br /&gt;
* retrieval of derivative and metadata files associated with tabular data files&lt;br /&gt;
* creation of a Dataverse METS file describing the dataset as retrieved from Dataverse&lt;br /&gt;
* Dataverse metadata included in the AIP METS&lt;br /&gt;
&lt;br /&gt;
Some advanced or more complex use cases are not fully supported, such as handling of datasets with restricted files, versioning of datasets and reingest of datasets. For a full list of known issues and enhancement ideas, refer to the [https://github.com/archivematica/Issues/labels/OCUL%3A%20AM-Dataverse Archivematica issues repository using Dataverse label] and the [https://wiki.archivematica.org/Dataverse Archivematica Wiki].   &lt;br /&gt;
&lt;br /&gt;
This work was sponsored by [https://scholarsportal.info/ Scholars Portal], a service of the Ontario Council of University Libraries (OCUL). Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: See [https://waffle.io/artefactual/archivematica?label=OCUL:%20AM-Dataverse waffle board] for all issues with the Dataverse label. &lt;br /&gt;
* Documentation: [https://www.archivematica.org/en/docs/archivematica-1.8/user-manual/transfer/dataverse/ Dataverse Integration]&lt;br /&gt;
&lt;br /&gt;
===Processing configuration reset and download buttons===&lt;br /&gt;
&lt;br /&gt;
A new installation of Archivematica comes with a pre-set processing configuration called &amp;quot;default&amp;quot;, and a second one (used only in Jisc workflows) called &amp;quot;automated&amp;quot;. In testing, users are encouraged to change the configurations to suit their workflows, but may need to reset the configuration to the installation pre-sets. A reset button has been added so that users can easily change the default and automated processing configurations back to their installation pre-sets.&lt;br /&gt;
&lt;br /&gt;
The second part of this feature is the addition of a download button for the processing configuration files. If you create a custom processing configuration, you can download the resulting processingMCP.xml file using the button and then include it at the top level of your transfer. Archivematica will then use this to automate your transfer selections, rather than the default configuration.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1138 #1138]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/docs/archivematica-1.8/user-manual/administer/dashboard-admin/#processing-configuration Processing configuration documentation]&lt;br /&gt;
&lt;br /&gt;
===Public URL===&lt;br /&gt;
&lt;br /&gt;
Archivematica now has a concept of a public URL in the general configuration. Archivematica usually registers itself with the Storage Service, but if you have deployed Archivematica in an environment where the URL or IP address changes frequently (i.e. in some Docker environments) this can cause issues. In these types of environments, users can now declare a stable public URL that Archivematica can use to register with the Storage Service.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1140 1140]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/docs/archivematica-1.8/admin-manual/installation-setup/customization/dashboard-config/#admin-dashboard-general General configuration]&lt;br /&gt;
&lt;br /&gt;
==Changed==&lt;br /&gt;
&lt;br /&gt;
Enhancements or major fixes.&lt;br /&gt;
&lt;br /&gt;
===Streamline checksum verification===&lt;br /&gt;
&lt;br /&gt;
This enhancement de-duplicates checksum verification in Archivematica, which helps to improve the performance of Archivematica in processing large transfers (many files and/or large files). This enhancement includes three changes:&lt;br /&gt;
&lt;br /&gt;
* Remove the &amp;quot;Verify checksums generated on ingest&amp;quot; micro-service&lt;br /&gt;
* Enhance the &amp;quot;Verify AIP&amp;quot; micro-service to bulk query the database for transfer-generated checksums and then verify that they match what is documented in the bag-generated manifest-&amp;lt;ALGORITHM&amp;gt;.txt.&lt;br /&gt;
* Have &amp;quot;Verify AIP&amp;quot; create an AIP-level &amp;quot;fixity check&amp;quot; PREMIS:EVENT that it can pass to the Storage Service, which will document this verification in the pointer file.&lt;br /&gt;
&lt;br /&gt;
This should not impact regular workflows, but it is worth noting that there is no AIP-level fixity check PREMIS event for uncompressed AIPs, which don't have pointer files. For uncompressed AIPs, there are still object-level fixity events in place. Note that there is an issue in the Archivematica Issues repository regarding this note - [https://github.com/artefactual/archivematica-storage-service/issues/324 Problem: uncompressed AIPs need pointer files #32]&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Columbia University Library. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/918 918]&lt;br /&gt;
&lt;br /&gt;
===Indexing can be enabled/disabled for Transfers and/or Archival Storage===&lt;br /&gt;
&lt;br /&gt;
Previously, the ElasticSearch index feature could be disabled globally as a scalability measure since indexing consumes a lot of resources. However, this also disabled Backlog and Appraisal features (which also uses indexing) and which some users still wanted to access. As of release 1.8, Archivematica can be deployed to run with indexing enabled just for Transfers (Backlog and Appraisal enabled), just for Archival Storage (Backlog and Appraisal disabled), for both indexes, or for none.&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1172 1172]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/docs/archivematica-1.8/admin-manual/installation-setup/installation/installation/#elasticsearch Installation &amp;gt; Elasticsearch]&lt;br /&gt;
&lt;br /&gt;
===Configure email settings===&lt;br /&gt;
&lt;br /&gt;
This change improves the ways that the email client in Archivematica can be configured, including allowing an administrator to set the sender email address for emails sent by Archivematica (i.e. normalization reports, failure reports) to comply with local IT requirements.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1128 1128]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/docs/archivematica-1.8/admin-manual/installation-setup/customization/customization/#email-notification-configuration Email notification configuration]&lt;br /&gt;
&lt;br /&gt;
===Download processing configuration and reset to default===&lt;br /&gt;
&lt;br /&gt;
Previous versions of Archivematica introduced the ability to add custom processing configurations, but users had to retrieve the custom configuration file via the command line to use it. There is now a download button on Administration &amp;gt; Processing configuration so that you can download the processing config from the user interface.&lt;br /&gt;
&lt;br /&gt;
You can also reset a processing configuration to the installation pre-set by clicking on the new reset button on Administration &amp;gt; Processing configuration.&lt;br /&gt;
&lt;br /&gt;
The documentation for using a custom processing configuration has also been updated.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1138 1138], [https://github.com/artefactual/archivematica/issues/800 800]&lt;br /&gt;
* Documentation: [https://www.archivematica.org/en/docs/archivematica-1.8/user-manual/administer/dashboard-admin/#processing-configuration Processing configuration (user manual)], [https://www.archivematica.org/en/docs/archivematica-1.8/admin-manual/installation-setup/customization/dashboard-config/#processing-configuration Processing configuration (administrator manual)], [https://www.archivematica.org/en/docs/archivematica-1.8/admin-manual/installation-setup/customization/dashboard-config/#using-a-custom-processing-configuration-file Using a custom processing configuration file]&lt;br /&gt;
&lt;br /&gt;
===MCP batching for scalability &amp;amp; performance===&lt;br /&gt;
&lt;br /&gt;
This feature refactors how tasks are scheduled, executed &amp;amp; managed within Archivematica, by grouping tasks into batches. It introduces processing efficiencies that significantly decrease the processing power and time required to complete Transfer and Ingest. It includes new configuration options to further optimize processing efficiency for particular types of Transfers (e.g. few large files vs. many small files) and for different deployment patterns (e.g. installing components across multiple machines). &lt;br /&gt;
&lt;br /&gt;
This feature does not impact the functionality or appearance of Archivematica.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!  &lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/938 938]&lt;br /&gt;
* Documentation: Scaling Archivematica [update with link when PR 182 is merged];&lt;br /&gt;
&lt;br /&gt;
===Binder integration improvements===&lt;br /&gt;
&lt;br /&gt;
Archivematica has had an integration with [https://binder.readthedocs.io/en/latest/user-manual/overview/intro.html Binder] for several years. Binder is an open-source web application for managing time-based media and born-digital artworks that also depends on TMS.&lt;br /&gt;
&lt;br /&gt;
Since Binder is built off of [https://www.accesstomemory.org/ AtoM], much of the integration configuration was repurposed from the AtoM integration. Archivematica 1.8 makes it explicit, for example, that the job &amp;quot;DIP Upload to AtoM&amp;quot; is actually &amp;quot;DIP Upload to AtoM/Binder&amp;quot;. In the Administration tab, the configuration section for AtoM has also been renamed to include Binder.&lt;br /&gt;
&lt;br /&gt;
Enhancing the Binder integration itself, Archivematica's transfer tab now includes an &amp;quot;Access system ID&amp;quot; box. This allows users to pre-populate an access system ID for AtoM or Binder, so that DIPs can be automatically uploaded without having to stop at the Upload DIP microservice. Users can still use the Upload DIP popup if desired.&lt;br /&gt;
&lt;br /&gt;
Finally, we've added documentation on using Binder with Archivematica.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Tate. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Documentation: [https://www.archivematica.org/en/docs/archivematica-1.8/admin-manual/installation-setup/integrations/integrations/#binder-integration Binder integration], [https://www.archivematica.org/en/docs/archivematica-1.8/admin-manual/installation-setup/integrations/binder-setup/#binder-setup Using Binder with Archivematica], [https://www.archivematica.org/en/docs/archivematica-1.8/user-manual/access/access/#upload-a-dip-to-binder Upload a DIP to Binder]&lt;br /&gt;
* Issues: [https://github.com/archivematica/Issues/issues/23 23]&lt;br /&gt;
&lt;br /&gt;
===File format identification updates===&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.8 is now up to date with PRONOM v.94! For more information on new data added to PRONOM, check the [http://www.nationalarchives.gov.uk/aboutapps/pronom/release-notes.xml PRONOM release notes].&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by the Denver Art Museum. Thank you!&lt;br /&gt;
&lt;br /&gt;
==Fixed==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/16 ASCII codes can't decode when the filename contains a backtick]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/42 AIP re-ingest fails]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/43 PREMIS events from previous transfers are re-appearing]&lt;br /&gt;
* [https://github.com/artefactual/archivematica/issues/1132 Metadata reingest fails when dc:type is null]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/46 Use 7-zip without compression (Copy) mode]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/69 Problem: cannot store AIP in DSpace due to file extension returned]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/123 DSpace REST login error in SS]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/124 Unable to edit DSpace REST Space settings in SS]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/140 Metadata added before &amp;quot;Approve Transfer&amp;quot; disappears]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/173 Generate AIP METS fails for bag SIPs if bag-info.txt has multiple instances of the same label]&lt;br /&gt;
* [https://github.com/artefactual/archivematica/issues/1104 Zip files with diacritic characters are failing to extract]&lt;br /&gt;
* [https://github.com/archivematica/Issues/issues/220 restructureBagForComplianceFileUUIDsAssigned needs to create intermediate directories for Zipped bag transfers] - '''Community contribution''' by Hillel Arnold. Thank you!&lt;br /&gt;
* [https://github.com/artefactual/archivematica/issues/1050 Ingest fails if Archivematica isn't connected to the Internet]&lt;br /&gt;
&lt;br /&gt;
==Upgraded tools and dependencies==&lt;br /&gt;
&lt;br /&gt;
* Fido has been upgraded to version 1.3.12&lt;br /&gt;
* Siegfried has been upgraded to version 1.7.10&lt;br /&gt;
* FITS has been upgraded to version 1.1.0&lt;br /&gt;
&lt;br /&gt;
==End of life dependencies==&lt;br /&gt;
&lt;br /&gt;
===Archivists' Toolkit integration===&lt;br /&gt;
&lt;br /&gt;
Archivists' Toolkit has been deprecated since 2013. The Archivists' Toolkit DIP upload feature has not had active development or testing since then. There are no plans to start testing or to fix any problems with the feature. As a result, there is a [https://github.com/archivematica/Issues/issues/174 proposal deprecate this feature in Archivematica 1.9]. Community response is welcome via a comment on the issue in GitHub.&lt;/div&gt;</summary>
		<author><name>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.8_and_Storage_Service_0.13_release_notes&amp;diff=12705</id>
		<title>Archivematica 1.8 and Storage Service 0.13 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.8_and_Storage_Service_0.13_release_notes&amp;diff=12705"/>
		<updated>2018-10-16T04:00:18Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Major release notes template&lt;br /&gt;
&lt;br /&gt;
'''Work in progress'''&lt;br /&gt;
&lt;br /&gt;
==Supported environments==&lt;br /&gt;
&lt;br /&gt;
Link to installation instructions.&lt;br /&gt;
&lt;br /&gt;
Specify supported environments.&lt;br /&gt;
&lt;br /&gt;
Make special note of any changes to supported environment.&lt;br /&gt;
&lt;br /&gt;
==Added==&lt;br /&gt;
&lt;br /&gt;
Describe new features.&lt;br /&gt;
&lt;br /&gt;
===New feature template===&lt;br /&gt;
&lt;br /&gt;
This is a description of this amazing feature! Here's why it's a net benefit to the project and the community. Also included are any special notes, like if it's a beta feature.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by some amazing institution. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Documentation: link&lt;br /&gt;
* Pull requests: link&lt;br /&gt;
&lt;br /&gt;
===Processing configuration reset and download buttons===&lt;br /&gt;
&lt;br /&gt;
A new installation of Archivematica comes with a pre-set processing configuration called &amp;quot;default&amp;quot;, and a second one (used only in Jisc workflows) called &amp;quot;automated&amp;quot;. In testing, users are encouraged to change the configurations to suit their workflows, but may need to reset the configuration to the installation pre-sets. A reset button has been added so that users can easily change the default and automated processing configurations back to their installation pre-sets.&lt;br /&gt;
&lt;br /&gt;
The second part of this feature is the addition of a download button for the processing configuration files. If you create a custom processing configuration, you can download the resulting processingMCP.xml file using the button and then include it at the top level of your transfer. Archivematica will then use this to automate your transfer selections, rather than the default configuration.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Documentation: [https://www.archivematica.org/en/docs/archivematica-1.8/user-manual/administer/dashboard-admin/#processing-configuration Processing configuration documentation]&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1138 #1138]&lt;br /&gt;
&lt;br /&gt;
==Changed==&lt;br /&gt;
&lt;br /&gt;
Describe enhancements or major fixes.&lt;br /&gt;
&lt;br /&gt;
===Streamline checksum verification===&lt;br /&gt;
&lt;br /&gt;
This enhancement de-duplicates checksum verification in Archivematica, which helps to improve the performance of Archivematica in processing large transfers (many files and/or large files). This enhancement includes three changes:&lt;br /&gt;
&lt;br /&gt;
* Remove the &amp;quot;Verify checksums generated on ingest&amp;quot; micro-service&lt;br /&gt;
* Enhance the &amp;quot;Verify AIP&amp;quot; micro-service to bulk query the database for transfer-generated checksums and then verify that they match what is documented in the bag-generated manifest-&amp;lt;ALGORITHM&amp;gt;.txt.&lt;br /&gt;
* Have &amp;quot;Verify AIP&amp;quot; create an AIP-level &amp;quot;fixity check&amp;quot; PREMIS:EVENT that it can pass to the Storage Service, which will document this verification in the pointer file.&lt;br /&gt;
&lt;br /&gt;
This should not impact regular workflows, but it is worth noting that there is no AIP-level fixity check PREMIS event for uncompressed AIPs, which don't have pointer files. For uncompressed AIPs, there are still object-level fixity events in place. Note that there is an issue in the Archivematica Issues repository regarding this note - [https://github.com/artefactual/archivematica-storage-service/issues/324 Problem: uncompressed AIPs need pointer files #32]&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Columbia University Library. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/918 #918]&lt;br /&gt;
* Pull requests: [https://github.com/artefactual/archivematica/pull/1012 PR 1012]&lt;br /&gt;
&lt;br /&gt;
===File format identification updates===&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.8 is now up to date with PRONOM v.94! For more information on new data added to PRONOM, check the [http://www.nationalarchives.gov.uk/aboutapps/pronom/release-notes.xml PRONOM release notes].&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by the Denver Art Museum. Thank you!&lt;br /&gt;
&lt;br /&gt;
===Indexing can be enabled/disabled for Transfers and/or Archival Storage===&lt;br /&gt;
Previously, the ElasticSearch index feature could be disabled globally as a scalability measure since indexing consumes a lot of resources. However, this also disabled Backlog and Appraisal features (which also uses indexing) and which some users still wanted to access. As of release 1.8, Archivematica can be deployed to run with indexing enabled just for Transfers (Backlog and Appraisal enabled), just for Archival Storage (Backlog and Appraisal disabled), for both indexes, or for none.&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1172 1172]&lt;br /&gt;
&lt;br /&gt;
==Fixed==&lt;br /&gt;
&lt;br /&gt;
List bugfixes with a link to the Github issue.&lt;br /&gt;
&lt;br /&gt;
* Bugfix 1: ASCII codes can't decode when the filename contains a backtick https://github.com/archivematica/Issues/issues/16&lt;br /&gt;
* Bugfix 2: AIP re-ingest fails.  https://github.com/archivematica/Issues/issues/42&lt;br /&gt;
* Bugfix 3: PREMIS events from previous transfers are re-appearing https://github.com/archivematica/Issues/issues/43&lt;br /&gt;
* Bugfix 4: Metadata reingest fails when dc:type is null https://github.com/artefactual/archivematica/issues/1132&lt;br /&gt;
* Bugfix 5: Use 7-zip without compression (Copy) mode https://github.com/archivematica/Issues/issues/46&lt;br /&gt;
* Bugfix 6: Metadata added before &amp;quot;Approve Transfer&amp;quot; disappears https://github.com/archivematica/Issues/issues/140&lt;br /&gt;
* Bugfix 7: Generate AIP METS fails for bag SIPs if bag-info.txt has multiple instances of the same label https://github.com/archivematica/Issues/issues/173&lt;br /&gt;
* Bugfix 8: Zip files with diacritic characters are failing to extract https://github.com/artefactual/archivematica/issues/1104&lt;br /&gt;
* Bugfix 9: DSpace REST login error in SS https://github.com/archivematica/Issues/issues/123&lt;br /&gt;
* Bugfix 10: Unable to edit DSpace REST Space settings in SS https://github.com/archivematica/Issues/issues/124&lt;br /&gt;
&lt;br /&gt;
==Upgraded tools and dependencies==&lt;br /&gt;
&lt;br /&gt;
* Tool has been updated to version X.&lt;br /&gt;
* Fido has been upgraded to version 1.3.12&lt;br /&gt;
* Siegfried has been upgraded to version 1.7.10&lt;br /&gt;
&lt;br /&gt;
==End of life dependencies==&lt;br /&gt;
&lt;br /&gt;
===Archivists' Toolkit integration===&lt;br /&gt;
&lt;br /&gt;
Archivists' Toolkit has been deprecated since 2013. The Archivists' Toolkit DIP upload feature has not had active development or testing since then. There are no plans to start testing or to fix any problems with the feature. As a result, there is a [https://github.com/archivematica/Issues/issues/174 proposal deprecate this feature in Archivematica 1.9]. Community response is welcome via a comment on the issue in GitHub.&lt;/div&gt;</summary>
		<author><name>Mcurran</name></author>
	</entry>
	<entry>
		<id>https://wiki.archivematica.org/index.php?title=Archivematica_1.8_and_Storage_Service_0.13_release_notes&amp;diff=12704</id>
		<title>Archivematica 1.8 and Storage Service 0.13 release notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.archivematica.org/index.php?title=Archivematica_1.8_and_Storage_Service_0.13_release_notes&amp;diff=12704"/>
		<updated>2018-10-16T02:59:24Z</updated>

		<summary type="html">&lt;p&gt;Mcurran: /* Fixed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Main_Page|Home]] &amp;gt; [[Release_Notes|Release Notes]] &amp;gt; Major release notes template&lt;br /&gt;
&lt;br /&gt;
'''Work in progress'''&lt;br /&gt;
&lt;br /&gt;
==Supported environments==&lt;br /&gt;
&lt;br /&gt;
Link to installation instructions.&lt;br /&gt;
&lt;br /&gt;
Specify supported environments.&lt;br /&gt;
&lt;br /&gt;
Make special note of any changes to supported environment.&lt;br /&gt;
&lt;br /&gt;
==Added==&lt;br /&gt;
&lt;br /&gt;
Describe new features.&lt;br /&gt;
&lt;br /&gt;
===New feature template===&lt;br /&gt;
&lt;br /&gt;
This is a description of this amazing feature! Here's why it's a net benefit to the project and the community. Also included are any special notes, like if it's a beta feature.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by some amazing institution. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Documentation: link&lt;br /&gt;
* Pull requests: link&lt;br /&gt;
&lt;br /&gt;
===Processing configuration reset and download buttons===&lt;br /&gt;
&lt;br /&gt;
A new installation of Archivematica comes with a pre-set processing configuration called &amp;quot;default&amp;quot;, and a second one (used only in Jisc workflows) called &amp;quot;automated&amp;quot;. In testing, users are encouraged to change the configurations to suit their workflows, but may need to reset the configuration to the installation pre-sets. A reset button has been added so that users can easily change the default and automated processing configurations back to their installation pre-sets.&lt;br /&gt;
&lt;br /&gt;
The second part of this feature is the addition of a download button for the processing configuration files. If you create a custom processing configuration, you can download the resulting processingMCP.xml file using the button and then include it at the top level of your transfer. Archivematica will then use this to automate your transfer selections, rather than the default configuration.&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Jisc. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Documentation: [https://www.archivematica.org/en/docs/archivematica-1.8/user-manual/administer/dashboard-admin/#processing-configuration Processing configuration documentation]&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1138 #1138]&lt;br /&gt;
&lt;br /&gt;
==Changed==&lt;br /&gt;
&lt;br /&gt;
Describe enhancements or major fixes.&lt;br /&gt;
&lt;br /&gt;
===Streamline checksum verification===&lt;br /&gt;
&lt;br /&gt;
This enhancement de-duplicates checksum verification in Archivematica, which helps to improve the performance of Archivematica in processing large transfers (many files and/or large files). This enhancement includes three changes:&lt;br /&gt;
&lt;br /&gt;
* Remove the &amp;quot;Verify checksums generated on ingest&amp;quot; micro-service&lt;br /&gt;
* Enhance the &amp;quot;Verify AIP&amp;quot; micro-service to bulk query the database for transfer-generated checksums and then verify that they match what is documented in the bag-generated manifest-&amp;lt;ALGORITHM&amp;gt;.txt.&lt;br /&gt;
* Have &amp;quot;Verify AIP&amp;quot; create an AIP-level &amp;quot;fixity check&amp;quot; PREMIS:EVENT that it can pass to the Storage Service, which will document this verification in the pointer file.&lt;br /&gt;
&lt;br /&gt;
This should not impact regular workflows, but it is worth noting that there is no AIP-level fixity check PREMIS event for uncompressed AIPs, which don't have pointer files. For uncompressed AIPs, there are still object-level fixity events in place. Note that there is an issue in the Archivematica Issues repository regarding this note - [https://github.com/artefactual/archivematica-storage-service/issues/324 Problem: uncompressed AIPs need pointer files #32]&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by Columbia University Library. Thank you!&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/918 #918]&lt;br /&gt;
* Pull requests: [https://github.com/artefactual/archivematica/pull/1012 PR 1012]&lt;br /&gt;
&lt;br /&gt;
===File format identification updates===&lt;br /&gt;
&lt;br /&gt;
Archivematica 1.8 is now up to date with PRONOM v.94! For more information on new data added to PRONOM, check the [http://www.nationalarchives.gov.uk/aboutapps/pronom/release-notes.xml PRONOM release notes].&lt;br /&gt;
&lt;br /&gt;
This work was sponsored by the Denver Art Museum. Thank you!&lt;br /&gt;
&lt;br /&gt;
===Indexing can be enabled/disabled for Transfers and/or Archival Storage===&lt;br /&gt;
Previously, the ElasticSearch index feature could be disabled globally as a scalability measure since indexing consumes a lot of resources. However, this also disabled Backlog and Appraisal features (which also uses indexing) and which some users still wanted to access. As of release 1.8, Archivematica can be deployed to run with indexing enabled just for Transfers (Backlog and Appraisal enabled), just for Archival Storage (Backlog and Appraisal disabled), for both indexes, or for none.&lt;br /&gt;
&lt;br /&gt;
* Issue: [https://github.com/artefactual/archivematica/issues/1172 1172]&lt;br /&gt;
&lt;br /&gt;
==Fixed==&lt;br /&gt;
&lt;br /&gt;
List bugfixes with a link to the Github issue.&lt;br /&gt;
&lt;br /&gt;
* Bugfix 1: ASCII codes can't decode when the filename contains a backtick https://github.com/archivematica/Issues/issues/16&lt;br /&gt;
* Bugfix 2: AIP re-ingest fails.  https://github.com/archivematica/Issues/issues/42&lt;br /&gt;
* Bugfix 3: PREMIS events from previous transfers are re-appearing https://github.com/archivematica/Issues/issues/43&lt;br /&gt;
* Bugfix 4: Metadata reingest fails when dc:type is null https://github.com/artefactual/archivematica/issues/1132&lt;br /&gt;
* Bugfix 5: Use 7-zip without compression (Copy) mode https://github.com/archivematica/Issues/issues/46&lt;br /&gt;
* Bugfix 6: Metadata added before &amp;quot;Approve Transfer&amp;quot; disappears https://github.com/archivematica/Issues/issues/140&lt;br /&gt;
* Bugfix 7: Generate AIP METS fails for bag SIPs if bag-info.txt has multiple instances of the same label https://github.com/archivematica/Issues/issues/173&lt;br /&gt;
* Bugfix 8: Zip files with diacritic characters are failing to extract https://github.com/artefactual/archivematica/issues/1104&lt;br /&gt;
* Bugfix 9: DSpace REST login error in SS https://github.com/archivematica/Issues/issues/123&lt;br /&gt;
&lt;br /&gt;
==Upgraded tools and dependencies==&lt;br /&gt;
&lt;br /&gt;
* Tool has been updated to version X.&lt;br /&gt;
* Fido has been upgraded to version 1.3.12&lt;br /&gt;
* Siegfried has been upgraded to version 1.7.10&lt;br /&gt;
&lt;br /&gt;
==End of life dependencies==&lt;br /&gt;
&lt;br /&gt;
===Archivists' Toolkit integration===&lt;br /&gt;
&lt;br /&gt;
Archivists' Toolkit has been deprecated since 2013. The Archivists' Toolkit DIP upload feature has not had active development or testing since then. There are no plans to start testing or to fix any problems with the feature. As a result, there is a [https://github.com/archivematica/Issues/issues/174 proposal deprecate this feature in Archivematica 1.9]. Community response is welcome via a comment on the issue in GitHub.&lt;/div&gt;</summary>
		<author><name>Mcurran</name></author>
	</entry>
</feed>