The media industry’s business network

API Requirements

The IMF-MM-API API offers a minimum viable set of operations and data to fulfil a set of requirements defined by the contributors to the project. Those requirements are:

  1. Finding assets from IDs
    • As an Application I want to authenticate with the imf-mm-apiservice so that I can process IMF Assets
    • As an Application I want to resolve a list of URLs for an Asset ID so that I can optimally access the Asset
    • As an Application I want to register a URL for an Asset ID so that other applications can access the Asset
    • As an Application I want to de-register a URL for an Asset ID so that other applications don’t Error 404 and annoy their users
  2. Finding IMF IDs from registered IDs (EIDR, MAM etc.)
    • As an Application I want to resolve a list of Asset IDs for a ContentVersionIdentifier so that I can enumerate the assets required for processing
    • As an Application I want to register a list of Asset IDs for a ContentVersionIdentifier so that other applications can enumerate the assets required for processing
    • As an Application I want to de-register a alist of Asset IDs for a ContentVersionIdentifier so that other applications don’t Error
  3. Optimising a deliver without holding state
    • As an Application I want to negotiate with a downstream application so that I can Deliver only the IMF Assets the downstream application requires

It is also worth noting some additional principles that were applied in the design of the API:

  • The API is authenticated so that access can be controlled, and to follow best practice of building zero-trust systems.
  • The API returns lists of URLs for an asset, not a single URL. This is because an asset may live in multiple locations (e.g. online, near-line, cloud) and only the application knows which is best for its own use.
  • Any identifier found in ContentVersionList is supported by the API.
  • The API enables two applications to negotiate delivery, in order that they do not need to maintain information about the state of other applications. You can see this easily with an example:
App1: "Hello App2, here's a PKL with Asset1, Asset2, Asset3, Asset4"
App2: "Hello App1, I need to retrieve Asset2, Asset3"
App1: "Hello App2, here's a Delivery PKL and AM, with Asset2, Asset3"
App2: "Hello App1, Thanks"
App1: "Here's Delivery xx Receipt"
DPP

DPP