Skip to content

API Overview

Brian Riley edited this page Mar 13, 2024 · 56 revisions

<- Home

Table of Contents

You can visit our OpenAPI specification page to explore the API functionality.

Authorization

The API supports the OAuth2 client_credentials grant flow. You need to call the oauth2/token endpoint. Like this:

curl -v -H 'Authorization: Basic BASE64(client_id:client_secret)' / 
        -H 'Content-Type: application/x-www-form-urlencoded' /
        -d 'grant_type=client_credentials&scope=https://auth.dmphub.uc3dev.cdlib.net/dev.read https://auth.dmphub.uc3dev.cdlib.net/dev.write' /
   https://auth.dmphub.uc3dev.cdlib.net/oauth2/token

Where BASE64(client_id:client_secret) is your client_id and client_secret separated by a colon and encoded as Base64. Here is an example of how to do that in ruby:

encoded = Base64.strict_encode64("#{client_id}:#{client_secret}")

Available Scopes:

  • https://auth.dmphub.uc3dev.cdlib.net/dev.read
  • https://auth.dmphub.uc3dev.cdlib.net/dev.write
  • https://auth.dmphub.uc3dev.cdlib.net/dev.delete
  • https://auth.dmphub.uc3dev.cdlib.net/dev.upload

Once you have a valid access_token, you will need to supply it in the Authorization header. For example: Authorization: Bearer [token]

<- Top

Standard Headers

Aside from the Authorization header required by any endpoint that requires a Scope, you should also include and 'Accept' header and a 'Content-Type' header. The values for both are always application/json unless otherwise noted.

Response structures

All API responses are structured in a standard format:

{
  "status":200,
  "requested":"/funders?search=NIH",
  "requested_at":"2023-02-08T18:49:45621UTC",
  "total_items":1,
  "page":1,
  "per_page":25,
  "items": [],
  "errors": []
}

A successful response will include a 'status' of 2xx and entries in the 'items' array. Error responses with include a 'status' or 4xx or 5xx (depending on the error) and entries in the 'errors' array.

The examples below would all be included in the 'items' array of the response. We omit the standard response structure from these examples for the sake of brevity.

<- Top

Error Codes

Pagination

The standard response includes information to help you traverse the possible results from the endpoint.

  • total_items provides you with the number of potential records available from the endpoint.
  • page the current page you are on
  • per_page the number of items included on the page
  • first a link to the first page (assuming there are more than 1 page)
  • last a link to the last page (assuming there are more than 1 page)
  • prev a link to the prior page (assuming there are more than 1 page and you are not on the 1st page)
  • next a link to the next page (assuming there are more than 1 page and you are not on the last page)

For endpoints that allow it, you can specify the total number of items per_page you would like to receive (default: 25, maximum: 250) and which page (default: 1) you would like to receive. For example: endpoint?page=3&per_page=100

<- Top

Available endpoints

Funder Awards Search

The following endpoints are meant to support Funder award/grant searches. See the individual endpoint documentation for the available search terms and filters.

All of these endpoints return the award/grant information in the same format. See below for an example.

GET api.dmphub.uc3dev.cdlib.net/awards/crossref/{funder_id}

  • Required Scope: https://api.dmphub.uc3dev.cdlib.net/dev.read
  • Path Param(s): funder_id should match the Crossref funder id returned by a result from api.dmphub.uc3dev.cdlib.net/funders
  • Query Param(s): Either a project/award id OR a combination of title keywords, PI names and award year must be specified.
    • project a project id or award id that is relevant to the funder (e.g. project=1R0134BC1531)
    • keyword param should contain keywords that can be used to help search the project title and description (e.g. keyword=particle+physics)
    • pi_names the names of the principal investigators (PIs) (e.g. pi_names=Jane+Doe,Smith,John+A.+Jones)
    • years the year that the award was granted (e.g. years=2022,2023)
  • Successful Response Code: 200

The ‘funder_id’ in the path should match the Crossref funder id value for the funder record For example: 10.12345/10000002.

GET api.dmphub.uc3dev.cdlib.net/awards/nih

Same as awards/crossref/{funder_id} above. This endpoint requires the scope, accepts the same query parameters and returns results in the same format. It does not require a funder_id as part of the path.

GET api.dmphub.uc3dev.cdlib.net/awards/nsf

Same as awards/crossref/{funder_id} above. This endpoint requires the scope, accepts the same query parameters and returns results in the same format. It does not require a funder_id as part of the path.

Example award/grant response

All of the funder award endpoints return results in the following format. The structure of these responses is designed to make it easier to attach to a DMP ID metadata record.

[
  {
    "funding": {
      "title": "Example Research Project",
      "description": "Lorem ipsum ...",
      "dmproadmap_opportunity_number": "ABC123",
      "dmproadmap_project_number": "zyx987",
      "start": "2023-09-13",
      "end": "2026-01-01",
      "grant_id": {
        "identifier": "u3h93h35t435t",
        "type": "other"
      }
    },
    "contact": {
      "name": "Smith, John",
      "mbox": "jsmith@example.com",
      "contact_id": {
        "identifier": "https://orcid.org/0000-0000-0000-000Y",
        "type": "orcid"
      },
      "dmproadmap_affiliation": {
        "name": "California Digital Library (cdlib.org)",
        "affiliation_id": {
          "identifier": "https://ror.org/03yrm5c26",
          "type": "ror"
        }
      }
    },
    "contributor": [
      {
        "name": "Smith, John",
        "contributor_id": {
          "identifier": "https://orcid.org/0000-0000-0000-000Y",
          "type": "orcid"
        },
        "roles": [
          "http://credit.niso.org/contributor-roles/data_curation"
        ], 
        "dmproadmap_affiliation": {
          "name": "California Digital Library (cdlib.org)",
          "affiliation_id": {
            "identifier": "https://ror.org/03yrm5c26",
            "type": "ror"
          }
        }
      },
      {
        "name": "Doe, Jane",
        "contributor_id": {
          "identifier": "https://orcid.org/0000-0000-0000-000X",
          "type": "orcid"
        },
        "roles": [
          "http://credit.niso.org/contributor-roles/investigation"
        ], 
        "dmproadmap_affiliation": {
          "name": "California Digital Library (cdlib.org)",
          "affiliation_id": {
            "identifier": "https://ror.org/03yrm5c26",
            "type": "ror"
          }
        }
      }
    ]
  }
]

Citation Retrieval

The following endpoints are meant to support the retrieval of citations for DOIs.

All of these endpoints return the citation information in the same format. See below for an example.

POST api.dmphub.uc3dev.cdlib.net/citations

  • Required Scope: https://api.dmphub.uc3dev.cdlib.net/dev.read
  • Headers(s): Content-Type should be application/json
  • Body: A JSON object containing:
    • dois: An array of DOIs that you want to convert to citations (e.g. ["https://doi.org/11.2222/ABC123","99.8888/ZYX987"])
    • style: (optional) the citation style you would like to receive see the list of styles here. The system returns chicago-author-date by default.
  • Successful Response Code: 200

Please note that many hosts behind a DOI (e.g. a journal website) can be slow to return the BibTex citation format for a DOI. This means you should limit the size of the dois array to 5 DOIs at a time. This endpoint will automatically timeout after 1 minute.

Example of the items array for a successful response will include the new DOI and the citation (or null if the BibTex could not be retrieved from the DOI host:

[
  { 
    "doi": "https://doi.org/11.2222/ABC123",
    "citation": "<p>Fin clips and liver samples are sent to the Pacific Biological Station for stock identification. Currently, we have results from 2015-2019.&nbsp;</p> <p>These data could be published in a stand alone data package, with an accompanying data paper. Currently, they reside in the JSP GitHub repo along with the JSP Time-series dataset.</p>"
  }, {
    "doi": "https://doi.org/99.8888/ZYX987", 
    "citation": null 
  }
]

Narrative support

DMP IDs consist of high level metadata about a the intended plans for a project's outputs. Most funders however require a narrative document that a human audience can read. The following endpoints allow for you to upload and retrieve a DMP ID's corresponding narrative document as a PDF.

GET /dmps/narrative/{narrative_id+}

Retrieves the DMP narrative document.

  • Required Scope: N/A - this endpoint is publicly accessible
  • Path Param(s): narrative_id the ID of the document (e.g. abcdefg987654.pdf)
  • Header(s): You should specify Accept: application/pdf
  • Successful Response Code: 200

Note that this endpoint will return an HTTP 404 if the document does not exist.

You can tell if a DMP ID (or work in progress DMP) has a narrative document by the presence of the dmproadmap_related_identifiers array with an entry for "descriptor": "is_metadata_for" and "work_type": "output_management_plan". That entry will contain the URL for this endpoint.

POST api.dmphub.uc3dev.cdlib.net/narratives

  • Required Scope: https://api.dmphub.uc3dev.cdlib.net/dev.upload
  • Headers(s): Content-Type should be multipart/form-data
  • Body: The binary PDF document
  • Successful Response Code: 201

The response from this endpoint returns the retrieval URL for the narrative document as a related identifier that should be attached to the DMP ID record.

Example of the items array for a successful response will include the new download URL for the PDF document:

{
  "dmproadmap_related_identifiers": [
    {
      "descriptor": "is_metadata_for",
      "work_type": "output_management_plan",
      "type": "url",
      "identifier": "https://api.dmphub.uc3dev.cdlib.net/narratives/83t838t83t.pdf"
    }
  ]
}

Data Management Plans

The following endpoints supply CRUD operations for DMP ID records.

GET api.dmphub.uc3dev.cdlib.net/dmps/{dmp_id}

Returns the specified DMP ID metadata.

  • Required Scope: N/A - this endpoint is publicly accessible
  • Path Param(s): dmp_id is the DMP's DMP ID without it's protocol (e.g. 10.12345/ABC123 or doi.org/10.12345/ABC123)
  • Query Param(s): version is the version's date-time stamp (e.g. 2023-02-01T13:09:03+00:00).
  • Successful Response Code: 200

A successful response will include the full DMP ID metadata. Note that if no version is specified the latest version will be returned.

See the DMP ID examples below for an example response.

POST api.dmphub.uc3dev.cdlib.net/dmps

Registers a new DMP ID.

  • Required Scope: https://api.dmphub.uc3dev.cdlib.net/dev.write
  • Body: The should contain the DMP ID metadata see the DMP ID examples below for an example.
  • Successful Response Code: 201

A successful response will include the full DMP ID metadata. The dmp_id entry will contain the newly registered DMP ID.

See the DMP ID examples below for an example response.

POST api.dmphub.uc3dev.cdlib.net/dmps/validate

Validates the DMP ID metadata.

  • Required Scope: N/A - this endpoint is publicly accessible
  • Body: The should contain the DMP ID metadata see the DMP ID examples below for an example.
  • Successful Response Code: 200

A successful response will include 'The JSON is valid' in the items array. An error will include detailed information about what was wrong with the JSON in the errors array

PUT api.dmphub.uc3dev.cdlib.net/dmps/{dmp_id}

Update the specified DMP ID metadata

  • Required Scope: https://api.dmphub.uc3dev.cdlib.net/dev.write
  • Path Param(s): dmp_id is the DMP's DMP ID without it's protocol (e.g. 10.12345/ABC123 or doi.org/10.12345/ABC123)
  • Body: The should contain the DMP ID metadata see the DMP ID examples below for an example.
  • Successful Response Code: 200

A successful response will include the full DMP ID metadata. The dmphub_versions array will contain the links to all prior versions.

See the DMP ID examples below for an example response.

DELETE api.dmphub.uc3dev.cdlib.net/dmps/{dmp_id}

Tombstone the specified DMP ID

  • Required Scope: https://api.dmphub.uc3dev.cdlib.net/dev.delete
  • Path Param(s): dmp_id is the DMP's DMP ID without it's protocol (e.g. 10.12345/ABC123 or doi.org/10.12345/ABC123)
  • Successful Response Code: 200

A successful response will include the full DMP ID metadata.

See the DMP ID examples below for an example response.

<- Top

Forthcoming endpoints

GET api.dmphub.uc3dev.cdlib.net/dmps

Fetch a list of available DMPs. Sort/filter options TBD.

  • Required Scope: https://api.dmphub.uc3dev.cdlib.net/dev.upload
  • Successful Response Code: 200

GET api.dmphub.uc3dev.cdlib.net/narratives/{dmp_id}

Downloads a DMP narrative document. Public DMPs include a direct download link in the dmproadmap_related_identifiers section (e.g. "dmproadmap_related_identifiers":[{ "descriptor": "is_metadata_for", "work_type": "output_management_plan", "type": "url", "identifier": "https://dmphub.uc3dev.cdlib.net/narratives/{narrative_id}"}]. This endpoint is geared towards accessing the PDF of a DMP that is NOT public.

  • Required Scope: https://api.dmphub.uc3dev.cdlib.net/dev.upload
  • Path Param(s): dmp_id the DMP ID you are uploading the document for. Do not include the protocol (e.g. doi.org/10.12345/ABC123)
  • Successful Response Code: 200

A successful response will contain a short lived URL that can be used to download the narrative document. Please note, that this endpoint requires authorization, and you will only be able to access the narrative documents that belong to your organization.

"https://dmphub.uc3dev.cdlib.net/narratives/12345abcdefg12345abcdeg"

<- Top

Examples of DMP JSON metadata

The DMP JSON format this system uses is based on the RDA Common Metadata Standard to describe DMP metadata.

The following are examples of a minimal and a complete DMP JSON object.

See the explanation of DMP JSON contents below for an explanation of each of these fields.

The following is an example of the bare minimum amount of metadata needed for a valid DMP ID:

{
  "dmp": {
    "title": "Example Research Project",
    "modified": "2022-11-14T22:18:18Z",
    "created":"2021-11-08T19:06:04Z",
    "contact": {
      "name": "Doe PhD., Jane A.",
      "dmproadmap_affiliation": {
        "name": "California Digital Library (cdlib.org)",
        "affiliation_id": {
          "type": "ror",
          "identifier": "https://ror.org/03yrm5c26"
        }
      },
      "mbox": "jane.doe@example.com",
      "contact_id":{ 
        "type": "orcid",
        "identifier": "https://orcid.org/0000-0000-0000-000X"
      }
    },
    "dmp_id": {
      "identifier": "https://doi.org/10.12345/A1B2C3D4",
      "type": "doi"
    },
    "project": [
      {
        "title": "Example Research Project"
      }
    ],
    "dataset": [
      {
        "title": "Recordings of the great horned owl"
      }
    ]
  }
}

The following is an example of a complete DMP ID metadata record:

{
  "dmp": {
    "title": "Example Research Project",
    "description": "Lorem ipsum ...",
    "language": "eng",
    "modified": "2022-01-28T17:52:14+00:00",
    "created":"2021-11-08T19:06:04+00:00",
    "contact": {
      "name": "Doe PhD., Jane A.",
      "dmproadmap_affiliation": {
        "name": "California Digital Library (cdlib.org)",
        "affiliation_id": {
          "type": "ror",
          "identifier": "https://ror.org/03yrm5c26"
        }
      },
      "mbox": "jane.doe@example.com",
      "contact_id":{ 
        "type": "orcid",
        "identifier": "https://orcid.org/0000-0000-0000-000X"
      }
    },
    "contributor": [
      {
        "name": "Smith, John",
        "role": ["http://credit.niso.org/contributor-roles/investigation"],
        "dmproadmap_affiliation": {
          "name": "California Digital Library (cdlib.org)",
          "affiliation_id": {
            "type": "ror",
            "identifier": "https://ror.org/03yrm5c26"
          }
        },
        "contributor_id":{ 
          "type": "orcid",
          "identifier": "https://orcid.org/0000-0000-0000-000Z"
        }
      }
    ],
    "dmp_id": {
      "identifier": "https://doi.org/10.12345/ABC123",
      "type": "file"
    },
    "dmproadmap_related_identifiers": [
      {
        "work_type": "output_management_plan",
        "descriptor": "is_metadata_for",
        "type": "url",
        "identifier": "https://api.dmphubdev.cdlib.org/dmps/doi.org/10.12345/ABC123/narrative" 
      },
      {
        "work_type": "software",
        "descriptor": "references",
        "type": "url",
        "identifier": "https://github.com/CDLUC3/dmp-hub-cfn" 
      }
    ],
    "dmproadmap_research_facilities": [
      {
        "name": "Organic and Analytical Chemistry Laboratory",
        "type": "laboratory",
        "facility_id": {
          "type": "ror",
          "identifier": "https://ror.org/04e8pda19"
        }
      }
    ],
    "ethical_issues_description": "The research output may contain PII that will need to be anonymized",
    "ethical_issues_exist": "yes",
    "ethical_issues_report": "https://example.com/privacy_policies.html",
    "project": [
      {
        "title": "Example Research Project",
        "description": "Lorem ipsum ...",
        "start": "2015-05-12",
        "end": "2024-11-29",
        "funding": [
          {
            "name": "National Institutes of Health (nih.gov)",
            "funder_id": {
              "type": "crossref",
              "identifier": "https://api.crossref.org/funders/100000002"
            },
            "dmproadmap_opportunity_number": "ABC123",
            "dmproadmap_project_number": "zyx987",
            "funding_status": "granted",
            "grant_id": {
              "type": "other",
              "identifier": "u3h93h35t435t"
            },
            "dmproadmap_funded_affiliations": [
              {
                "name": "California Digital Library (cdlib.org)",
                "affiliation_id": {
                  "type": "ror",
                  "identifier": "https://ror.org/03yrm5c26"
                }
              }
            ]
          }
        ]
      }
    ],
    "cost": [
      {
        "title": "Annual Preservation",
        "currency_code": "usd",
        "description": "The annual cost to preserve the datasets ...",
        "value": 242
      }
    ],
    "dataset": [
      {
        "title": "Recordings of the great horned owl",
        "type": "dataset",
        "description": "We will collect recordings of the great horned owl in the ...",
        "personal_data": "yes",
        "sensitive_data": "no",
        "data_quality_assurance": [
          "We will use standard naming conventions for the datasets and audio recordings"
        ],
        "dataset_id": {
          "identifier": "99999999",
          "type": "other"
        },
        "distribution": [
          {
            "title": "Distribution to Dryad",
            "data_access": "open",
            "description": "The primary distribution of the dataset ...",
            "byte_size": 23567456,
            "available_until": "2034-12-31",
            "host": {
              "title": "Dryad",
              "description": "Dryad is a great repository ...",
              "url": "https://datadryad.org",
              "dmproadmap_host_id": {
                "type": "url",
                "identifier": "https://www.re3data.org/api/v1/repository/555555555555"
              }
            },
            "license": [
              {
                "license_ref": "https://creativecommons.org/licenses/by/4.0/",
                "start_date": "2023-12-31"
              }
            ]
          }
        ],
        "issued": "2024-12-31",
        "keyword": [
          "biology"
        ],
        "metadata": [
          {
            "description": "Dublin Core",
            "language": "eng",
            "metadata_standard_id": {
              "identifier": "https://doi.org/10.25504/FAIRsharing.3nx7t",
              "type": "doi"
            }
          }
        ],
        "preservation_statement": "The outputs will be shared on the Dryad repository, a professionally managed data repository ...",
        "security_and_privacy": [
          {
            "title": "Oversight of Data Management and Sharing",
            "description": "My research assistant, will be responsible by anonymizing and archiving the data ..."
          }
        ],
        "technical_resource": [
          {
            "name": "Telescope",
            "description": "Open source web application that tracks progress of jobs submitted to remote servers ...",
            "dmproadmap_technical_resource_id": {
              "identifier": "https://scicrunch.org/resolver/RRID:SCR_017626",
              "type": "rrid",
            }
          }
        ]
      }
    ],
    "dmphub_versions": [
      { 
        "timestamp": "2022-01-28T17:52:14+00:00", 
        "url": "https://api.dmphub.uc3dev.cdlib.net/dmps/10.12345/ABCDEFG?version=2022-01-28T17:52:14+00:00"
      },
      { 
        "timestamp": "2022-11-13T08:33:10+00:00", 
        "url": "https://api.dmphub.uc3dev.cdlib.net/dmps/10.12345/ABCDEFG?version=2022-11-13T08:33:10+00:00"
      },
      { 
        "timestamp": "2021-11-08T19:06:04+00:00", 
        "url": "https://api.dmphub.uc3dev.cdlib.net/dmps/10.12345/ABCDEFG?version=2021-11-08T19:06:04+00:00"
      }
    ]
  }
}

<- Top

Explanation of DMP JSON contents:

The following describes each of the DMP JSON attributes including links to the RDA Common Standard definition when the values of the attribute are limited to a specific set of values. It includes a description of items along with their data type and whether or not they are required or immutable. In this case, immutable means that the DMPHub manages this information internally and should not be editable within the UI.

In cases where we note that a parent object (e.g. contributor) is not required, but some of its children are (e.g. name and role), we are specifying that those child elements are required IF there is an entry at all (e.g. contributor is not required, but if you include one you must supply the name and role).

  • title: String required - The title of the DMP (often the same as the project title)
  • description: String - A description of the DMP (often the same as the project decription)
  • created: Datetime (UTC) immutable - When the DMP was added to the DMPHub system (also the point when the DMP ID was registered).
  • modified: Datetime (UTC) immutable - When the DMP was last modified. This corresponds to the DMP version.
  • ethical_issues_exist: String (valid values: [yes, no, unknown]) - Whether or not the project will deal with sensitive data or other ethical concerns
  • ethical_issues_description: String (only applicable if ethical_issues_exist is 'yes') - A summary of the concerns.
  • ethical_issues_report: URL (only applicable if ethical_issues_exist is 'yes') - A link to a policy document or website page
  • language: _String required (default is 'eng') (valid values in RDA common standard) - The language of the DMP

  • dmp_id: immutable - The DMP ID is assigned by the DMPHub API
    • type: String - The type of identifier. This is always 'doi' for the DMPHub
    • identifier: String (a DOI URL) The unique identifier for the DMP. It should be used when interacting with the DMPHub API

  • contact: required for new records and immutable otherwise - The creator/owner of the DMP. In the case of the Upload form, this should default to the currently logged in user
    • name: String required - The full name of the contact 'Last, First'
    • mbox: Email required - The email address
    • dmproadmap_affiliation: required - The user's institution/organization
      • name: String required - The name of the institution/organization (preferably from the ROR record)
      • affiliation_id: required
        • type: String required - The type of identifier. This should always be 'ror'
        • identifier: ROR URL required - The unique ROR id (e.g. https://ror.org/1234567890)
    • contact_id: required

  • contributor: Array 0..n - An array of project contributors
    • name: String required - The full name of the contact 'Last, First'
    • mbox: Email - The email address
    • role: [String] URL at least 1 required (valid values: Credit Niso contributor roles) - An array of contributor roles (e.g. http://credit.niso.org/contributor-roles/investigation)
    • dmproadmap_affiliation
      • name: String required - Example University (example.edu)
      • affiliation_id:
        • type: String required - The type of identifier. This should always be 'ror'
        • identifier: ROR URL required - The unique ROR id (e.g. https://ror.org/1234567890)
    • contributor_id:

  • dataset: Array 0..n - An array of anticipated project outputs (e.g. software, datasets, images, etc.).
    • type: String required (valid values: [audiovisual, collection, data_paper, dataset, event, image, interactive_resource, model_representation, physical_object, service, software, sound, text, workflow, other]) - The type of project output
    • title: String required - A name for the project output
    • description: String - A description of the project output
    • issued: Date (YYY-MM-DD format) - The anticipated release data for the project output
    • keyword: [String] - An array of keywords applicable to the project output
    • dataset_id: - A unique identifier for the project output. Since these are anticipated objects and not yet real, this is often blank.
      • type: String required (valid values in RDA Common Standard) - The type of identifier
      • identifier: String required - The value of the identifier
    • language: _String required (default is 'eng') (valid values in RDA common standard) - The language of the project output
    • personal_data: String required (valid values: [yes, no, unknown]) - Whether or not the project output will contain PII
    • data_quality_assurance: [String] - An array of quality assurance statements about the project output
    • preservation_statement: String - A preservation statement about the project output
    • sensitive_data: String required (valid values: [yes, no, unknown]) - Whether or not the project output will contain other sensitive info
    • security_and_privacy: Array 0..n - Statements about security and privacy
      • title: String required - A title for the security and privacy statement
      • description: String required - The security and privacy statement
    • metadata: - An array 0..n of metadata standards that the project output will follow
      • description: String - A description/name of the metadata standard
      • metadata_standard_id:
        • type: String required (valid values in RDA Common Standard) - The type of identifier
        • identifier: String required - The value of the identifier
    • technical_resource: Array 0..n - Technical resources used to produce the project output (e.g. an electron microscope)
      • name: String required - The name of the resource
      • description: String - A description of the resource
      • dmproadmap_technical_resource_id:
        • type: _String required (valid values: [doi, url, other]) - The type of identifier
        • identifier: String required - The value of the identifier
    • distribution: Array 0..n - An array of repositories where the project output will be distributed to (e.g. GitHub, Dryad, Zenodo, etc.)
      • title: String required - A title for the distribution
      • byte_size: Number - The estimated size of the project output in bytes
      • data_access: String required (valid values in RDA Common Standard) - The initial access level for the project output
      • host: - The repository where the project output will be hosted
        • title: String required The title of the host
        • url: URL - The URL landing page for the host
        • dmproadmap_host_id:
          • type: String required ('url') - The type of identifier
          • identifier: String required (valid values in Re3Data database) - The value of the identifier
        • license: Array 0..n - An array of license types along with their start dates. If there is only one, the start_date should match the project output's issue date
          • license_ref: URL required (valid values in SPDX database) - the URL to the license
          • start_date: Date (YYY-MM-DD format) - The anticipated release data for the project output

  • project: Array 1..n required
    • title: String required - The title of the research project
    • description: String - The research project abstract
    • start: Date (YYYY-MM-DD) - When the research project will begin.
    • end: Date (YYYY-MM-DD) - When the research project will end.
    • funding: Array 0..n
      • name: String required The name of the funding organization/institution
      • funder_id:
        • type: String required (valid values: [ror, fundref]) - The type of identifier
        • identifier: String required (the value from the ROR database) - The value of the identifier
      • funding_status: String required (valid values: [planned, applied, granted, rejected]) - The status of the funding application
      • grant_id:
        • type: String required (valid values: [doi, url, other]) - The type of identifier
        • identifier: String required - The value of the identifier
      • dmproadmap_funded_affiliations: Array 0..n
        • name: String required The name of the institution/organization that received the funding
        • affiliation_id:
          • type: String required (valid values: [ror]) - The type of identifier
          • identifier: String required (the value from the ROR database) - The value of the identifier

  • dmproadmap_sponsors: Array 0..n
    • name: String required - The name of the organization/institution that sponsored the research or where the research was performed (e.g. a research field station, laboratory, etc.). If there are no sponsors defined here, then it is assumed that the research took place at the contributor's affiliations.
    • affiliation_id:
      • type: String required (valid values: [ror, doi, url]) - The type of identifier
      • identifier: String required - The value of the identifier

  • dmproadmap_related_identifiers: Array 0..n
    • descriptor: String required (valid values found in the 'relationType' definition in the DataCite Metadata Schema- Values should be lower case and use an _ to separate words (e.g. The DataCite value isReferencedBy should be is_referenced_by)
    • type: String required (valid values found in the 'relatedIdentifierType' definition in the DataCite Metadata Schema - Values should be in lower case (e.g. The DataCite value ISSN should be issn)
    • identifier: String required - The value of the identifier
    • work_type: String required (valid values are: [article, dataset, preprint, software, supplemental_information, paper, book, protocol]) - The type of object the identifier points to

  • dmphub_versions: Array 1..n - The list of versions for the DMP. Sorted by timestamp descending. The top entry is always the latest version. There will always be an entry for the latest version even if there are no historical versions.
    • timestamp: DateTime (UTC) required - The date and time the version was created. These timestamps are ALWAYS equal to the DMP modified timestamp.
    • url: URL required - A link to fetch the version from the DMPHub API

[<- Top](#table-of-contents)