Create a programming-langague-independent API for a modern headless archival digital repository for an academic research library. Start with an overall list of the major functions that need to be supported text that explains what the general functionality area covers, then list individual endpoints under each heading along with possible arguments and error conditions that would need to provide feedbasck via the return values.
-
-
Save billdueber/29d9c7fe4ded8655677e8398ae14a50f to your computer and use it in GitHub Desktop.
This document defines a language-independent REST API for a modern headless archival digital repository system designed for academic research libraries.
Purpose: Manage hierarchical collections that organize repository content. Collections can contain both items and sub-collections, enabling flexible organizational structures.
Create a new collection.
Arguments:
title(string, required): Collection titledescription(string, optional): Collection descriptionparent_id(string, optional): Parent collection UUIDmetadata(object, optional): Custom metadata fieldsvisibility(enum, required):public,restricted,privateaccess_policy_id(string, optional): Associated access policy UUID
Returns:
201 Created: Collection object with UUID400 Bad Request: Invalid input data401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Parent collection not found409 Conflict: Collection with same identifier already exists
Retrieve collection details.
Arguments:
collection_id(string, required): Collection UUIDinclude_items(boolean, optional): Include item list (default: false)include_subcollections(boolean, optional): Include subcollection list (default: true)page(integer, optional): Page number for paginationper_page(integer, optional): Items per page (max: 100)
Returns:
200 OK: Collection object401 Unauthorized: Authentication required403 Forbidden: Access denied404 Not Found: Collection not found
Update collection metadata.
Arguments:
collection_id(string, required): Collection UUIDtitle(string, optional): Updated titledescription(string, optional): Updated descriptionmetadata(object, optional): Updated metadata fieldsvisibility(enum, optional): Updated visibility
Returns:
200 OK: Updated collection object400 Bad Request: Invalid input data401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Collection not found409 Conflict: Update conflicts with existing data
Delete a collection.
Arguments:
collection_id(string, required): Collection UUIDcascade(boolean, optional): Delete child items/collections (default: false)
Returns:
204 No Content: Collection deleted400 Bad Request: Cannot delete non-empty collection without cascade401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Collection not found409 Conflict: Collection has active preservation actions
List and search collections.
Arguments:
query(string, optional): Search queryparent_id(string, optional): Filter by parent collectionvisibility(enum, optional): Filter by visibilitysort(enum, optional):title,created_at,updated_at,item_countorder(enum, optional):asc,descpage(integer, optional): Page numberper_page(integer, optional): Items per page (max: 100)
Returns:
200 OK: Array of collection objects with pagination metadata400 Bad Request: Invalid query parameters401 Unauthorized: Authentication required
Purpose: Manage individual repository items (digital objects). Items are the fundamental units of content, containing metadata and associated files/bitstreams.
Create a new repository item.
Arguments:
title(string, required): Item titledescription(string, optional): Item descriptioncollection_id(string, required): Parent collection UUIDmetadata(object, required): Metadata according to schemaitem_type(string, required): Item type identifiervisibility(enum, required):public,restricted,private,embargoembargo_date(datetime, optional): Embargo lift dateaccess_policy_id(string, optional): Access policy UUID
Returns:
201 Created: Item object with UUID400 Bad Request: Invalid input or metadata validation failure401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Collection not found422 Unprocessable Entity: Metadata schema validation failed
Retrieve item details.
Arguments:
item_id(string, required): Item UUIDinclude_files(boolean, optional): Include file list (default: true)include_metadata(boolean, optional): Include full metadata (default: true)version(integer, optional): Specific version number
Returns:
200 OK: Item object401 Unauthorized: Authentication required403 Forbidden: Access denied404 Not Found: Item or version not found
Update item metadata.
Arguments:
item_id(string, required): Item UUIDtitle(string, optional): Updated titledescription(string, optional): Updated descriptionmetadata(object, optional): Updated metadata fieldsvisibility(enum, optional): Updated visibilitycreate_version(boolean, optional): Create new version (default: false)
Returns:
200 OK: Updated item object400 Bad Request: Invalid input data401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Item not found422 Unprocessable Entity: Metadata validation failed
Delete or withdraw an item.
Arguments:
item_id(string, required): Item UUIDpermanent(boolean, optional): Permanent deletion vs withdrawal (default: false)reason(string, optional): Withdrawal/deletion reason
Returns:
204 No Content: Item deleted/withdrawn401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Item not found409 Conflict: Item has active preservation processes
Search and list items.
Arguments:
query(string, optional): Full-text search querycollection_id(string, optional): Filter by collectionitem_type(string, optional): Filter by typevisibility(enum, optional): Filter by visibilitymetadata_filters(object, optional): Filter by metadata fieldsfrom_date(datetime, optional): Filter by creation dateto_date(datetime, optional): Filter by creation datefacets(array, optional): Requested facet fieldssort(enum, optional): Sort fieldorder(enum, optional):asc,descpage(integer, optional): Page numberper_page(integer, optional): Items per page (max: 100)
Returns:
200 OK: Search results with items array, facets, and pagination400 Bad Request: Invalid query syntax401 Unauthorized: Authentication required
Purpose: Handle upload, storage, retrieval, and versioning of files (bitstreams) associated with repository items. Supports multiple file formats and preservation formats.
Upload a file to an item.
Arguments:
item_id(string, required): Item UUIDfile(binary, required): File content (multipart upload)filename(string, required): Original filenamebundle(enum, required):ORIGINAL,DERIVATIVE,THUMBNAIL,METADATA,TEXTmime_type(string, optional): MIME type (auto-detected if not provided)description(string, optional): File descriptionchecksum(string, optional): Pre-calculated checksum for verificationchecksum_algorithm(enum, optional):MD5,SHA256,SHA512
Returns:
201 Created: File object with UUID and download URL400 Bad Request: Invalid file or parameters401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Item not found409 Conflict: File with same name exists413 Payload Too Large: File exceeds size limit415 Unsupported Media Type: File type not allowed422 Unprocessable Entity: Checksum verification failed
List files for an item.
Arguments:
item_id(string, required): Item UUIDbundle(enum, optional): Filter by bundle typeversion(integer, optional): Specific item version
Returns:
200 OK: Array of file objects401 Unauthorized: Authentication required403 Forbidden: Access denied404 Not Found: Item not found
Download a file.
Arguments:
file_id(string, required): File UUIDdisposition(enum, optional):inline,attachment(default: inline)
Returns:
200 OK: File content with appropriate headers302 Found: Redirect to CDN/storage URL401 Unauthorized: Authentication required403 Forbidden: Access denied404 Not Found: File not found410 Gone: File deleted or permanently unavailable
Update file metadata.
Arguments:
file_id(string, required): File UUIDfilename(string, optional): Updated filenamedescription(string, optional): Updated descriptionbundle(enum, optional): Updated bundle type
Returns:
200 OK: Updated file object400 Bad Request: Invalid input401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: File not found
Delete a file.
Arguments:
file_id(string, required): File UUIDreason(string, optional): Deletion reason
Returns:
204 No Content: File deleted401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: File not found409 Conflict: File is only preservation copy
Generate derivative files.
Arguments:
file_id(string, required): Source file UUIDformat(enum, required): Target format (e.g.,PDF,JPEG,PNG,WEBP)options(object, optional): Format-specific options (resolution, quality, etc.)
Returns:
201 Created: Derivative file object202 Accepted: Derivative generation queued400 Bad Request: Invalid format or options401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: File not found415 Unsupported Media Type: Conversion not supported
Purpose: Define, validate, and manage metadata schemas and vocabularies. Supports multiple metadata standards (Dublin Core, MODS, PREMIS, etc.) and custom schemas.
List available metadata schemas.
Arguments:
type(string, optional): Filter by schema typeactive(boolean, optional): Filter active schemas
Returns:
200 OK: Array of schema objects401 Unauthorized: Authentication required
Retrieve a metadata schema.
Arguments:
schema_id(string, required): Schema UUID or identifierversion(string, optional): Schema version
Returns:
200 OK: Schema definition (JSON Schema format)404 Not Found: Schema not found
Create a custom metadata schema.
Arguments:
name(string, required): Schema namedescription(string, optional): Schema descriptionversion(string, required): Schema versionschema(object, required): JSON Schema definitionnamespace(string, optional): XML namespace for export
Returns:
201 Created: Schema object400 Bad Request: Invalid schema definition401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions409 Conflict: Schema already exists
Validate metadata against a schema.
Arguments:
schema_id(string, required): Schema UUIDmetadata(object, required): Metadata to validate
Returns:
200 OK: Validation result with errors/warnings400 Bad Request: Invalid request404 Not Found: Schema not found
List controlled vocabularies.
Arguments:
type(string, optional): Vocabulary typelanguage(string, optional): Language code
Returns:
200 OK: Array of vocabulary objects401 Unauthorized: Authentication required
Search vocabulary terms.
Arguments:
vocab_id(string, required): Vocabulary UUIDquery(string, optional): Search queryparent_term(string, optional): Filter by parent termpage(integer, optional): Page numberper_page(integer, optional): Terms per page
Returns:
200 OK: Array of term objects404 Not Found: Vocabulary not found
Purpose: Manage user authentication, authorization, access policies, and embargo management. Supports role-based access control (RBAC) and fine-grained permissions.
Authenticate a user.
Arguments:
username(string, required): Username or emailpassword(string, required): Passwordmfa_code(string, optional): Multi-factor authentication code
Returns:
200 OK: Authentication token and user object400 Bad Request: Missing credentials401 Unauthorized: Invalid credentials403 Forbidden: Account locked or disabled428 Precondition Required: MFA code required
Invalidate authentication token.
Arguments:
- None (uses Authorization header)
Returns:
204 No Content: Successfully logged out401 Unauthorized: Invalid or expired token
Refresh authentication token.
Arguments:
refresh_token(string, required): Refresh token
Returns:
200 OK: New authentication token401 Unauthorized: Invalid refresh token
Get user permissions.
Arguments:
user_id(string, required): User UUIDresource_type(enum, optional): Filter by resource typeresource_id(string, optional): Specific resource UUID
Returns:
200 OK: Array of permission objects401 Unauthorized: Authentication required403 Forbidden: Cannot view other user's permissions404 Not Found: User not found
Create an access policy.
Arguments:
name(string, required): Policy namedescription(string, optional): Policy descriptionrules(array, required): Array of access rulesdefault_action(enum, required):allow,deny
Returns:
201 Created: Access policy object400 Bad Request: Invalid policy definition401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
Retrieve an access policy.
Arguments:
policy_id(string, required): Policy UUID
Returns:
200 OK: Access policy object401 Unauthorized: Authentication required404 Not Found: Policy not found
Update an access policy.
Arguments:
policy_id(string, required): Policy UUIDname(string, optional): Updated namedescription(string, optional): Updated descriptionrules(array, optional): Updated rules
Returns:
200 OK: Updated policy object400 Bad Request: Invalid policy definition401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Policy not found
Delete an access policy.
Arguments:
policy_id(string, required): Policy UUIDreplacement_policy_id(string, optional): Replacement policy for affected resources
Returns:
204 No Content: Policy deleted400 Bad Request: Policy in use without replacement401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Policy not found
Set embargo on an item.
Arguments:
item_id(string, required): Item UUIDembargo_date(datetime, required): Embargo lift dateembargo_type(enum, required):metadata,files,fullreason(string, optional): Embargo reason
Returns:
201 Created: Embargo object400 Bad Request: Invalid embargo date or type401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Item not found
Lift embargo.
Arguments:
item_id(string, required): Item UUIDembargo_id(string, required): Embargo UUID
Returns:
204 No Content: Embargo lifted401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Item or embargo not found
Purpose: Digital preservation actions including fixity checking, format validation, migration, and audit trail management. Ensures long-term accessibility and authenticity of digital objects.
Schedule fixity check.
Arguments:
resource_type(enum, required):item,file,collectionresource_id(string, required): Resource UUIDalgorithm(enum, optional):MD5,SHA256,SHA512(default: SHA256)recursive(boolean, optional): Check all child resources (default: false)
Returns:
202 Accepted: Fixity check scheduled with job ID400 Bad Request: Invalid parameters401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Resource not found
Get fixity check status.
Arguments:
job_id(string, required): Job UUID
Returns:
200 OK: Fixity check result object202 Accepted: Check still in progress401 Unauthorized: Authentication required404 Not Found: Job not found
List fixity check history.
Arguments:
resource_type(enum, optional): Filter by resource typeresource_id(string, optional): Filter by resourcestatus(enum, optional):pending,running,success,failedfrom_date(datetime, optional): Filter by date rangeto_date(datetime, optional): Filter by date rangepage(integer, optional): Page numberper_page(integer, optional): Results per page
Returns:
200 OK: Array of fixity check objects with pagination401 Unauthorized: Authentication required
Validate file format.
Arguments:
file_id(string, required): File UUIDvalidation_profile(string, optional): Specific validation profile
Returns:
200 OK: Validation result with format identification and conformance202 Accepted: Validation queued400 Bad Request: Invalid parameters401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: File not found
Schedule format migration.
Arguments:
file_id(string, required): Source file UUIDtarget_format(string, required): Target format identifiermigration_strategy(enum, required):replace,derivative,versionvalidation_required(boolean, optional): Validate before/after (default: true)options(object, optional): Migration tool options
Returns:
202 Accepted: Migration job created400 Bad Request: Invalid migration parameters401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: File not found415 Unsupported Media Type: Migration not supported
Get migration job status.
Arguments:
job_id(string, required): Migration job UUID
Returns:
200 OK: Migration job status and results202 Accepted: Migration in progress401 Unauthorized: Authentication required404 Not Found: Job not found
Query preservation audit log.
Arguments:
resource_type(enum, optional): Filter by resource typeresource_id(string, optional): Filter by resourceevent_type(enum, optional): Filter by event typeuser_id(string, optional): Filter by userfrom_date(datetime, required): Start of date rangeto_date(datetime, required): End of date rangepage(integer, optional): Page numberper_page(integer, optional): Results per page
Returns:
200 OK: Array of audit log entries with pagination400 Bad Request: Invalid query parameters401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
List supported preservation formats.
Arguments:
category(string, optional): Format category (image, document, video, etc.)migration_source(boolean, optional): Formats that can be migrated frommigration_target(boolean, optional): Formats that can be migrated to
Returns:
200 OK: Array of format objects with metadata401 Unauthorized: Authentication required
Purpose: Perform bulk operations on multiple items, files, or collections. Supports asynchronous processing with progress tracking and error reporting.
Batch import items.
Arguments:
source_type(enum, required):csv,zip,bag,metscollection_id(string, required): Target collection UUIDsource_url(string, optional): URL to import sourcesource_file(binary, optional): Upload import filemapping(object, optional): Metadata field mappingoptions(object, optional): Import optionsvalidate_only(boolean, optional): Dry run (default: false)
Returns:
202 Accepted: Import job created with job ID400 Bad Request: Invalid import configuration401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Collection not found413 Payload Too Large: Import file too large
Get batch job status.
Arguments:
job_id(string, required): Job UUID
Returns:
200 OK: Job status with progress and results401 Unauthorized: Authentication required404 Not Found: Job not found
Cancel a batch job.
Arguments:
job_id(string, required): Job UUID
Returns:
204 No Content: Job cancelled400 Bad Request: Job cannot be cancelled401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Job not found
Batch update metadata.
Arguments:
item_ids(array, required): Array of item UUIDsmetadata_updates(object, required): Metadata fields to updateupdate_strategy(enum, required):merge,replace,append
Returns:
202 Accepted: Update job created400 Bad Request: Invalid update configuration401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
Batch delete items.
Arguments:
item_ids(array, required): Array of item UUIDspermanent(boolean, optional): Permanent deletion (default: false)reason(string, optional): Deletion reason
Returns:
202 Accepted: Deletion job created400 Bad Request: Invalid parameters401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
Batch export items.
Arguments:
item_ids(array, optional): Specific items to exportcollection_id(string, optional): Export entire collectionformat(enum, required):csv,json,mets,baginclude_files(boolean, optional): Include bitstreams (default: false)metadata_format(string, optional): Metadata export format
Returns:
202 Accepted: Export job created400 Bad Request: Invalid export configuration401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
List batch jobs.
Arguments:
status(enum, optional): Filter by statusjob_type(enum, optional): Filter by job typeuser_id(string, optional): Filter by userfrom_date(datetime, optional): Filter by creation dateto_date(datetime, optional): Filter by creation datepage(integer, optional): Page numberper_page(integer, optional): Jobs per page
Returns:
200 OK: Array of job objects with pagination401 Unauthorized: Authentication required
Purpose: Provide usage statistics, analytics, and reporting for items, collections, and overall repository activity. Supports customizable dashboards and data export.
Get item statistics.
Arguments:
item_id(string, required): Item UUIDfrom_date(datetime, optional): Start date for metricsto_date(datetime, optional): End date for metricsmetrics(array, optional): Specific metrics to retrieve
Returns:
200 OK: Item statistics object (views, downloads, citations, etc.)401 Unauthorized: Authentication required403 Forbidden: Access denied404 Not Found: Item not found
Get collection statistics.
Arguments:
collection_id(string, required): Collection UUIDfrom_date(datetime, optional): Start dateto_date(datetime, optional): End dateinclude_subcollections(boolean, optional): Include child collections (default: true)
Returns:
200 OK: Collection statistics object401 Unauthorized: Authentication required403 Forbidden: Access denied404 Not Found: Collection not found
Get repository-wide statistics.
Arguments:
from_date(datetime, optional): Start dateto_date(datetime, optional): End datebreakdown_by(enum, optional):collection,item_type,user,date
Returns:
200 OK: Repository statistics object401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
Download statistics query.
Arguments:
resource_type(enum, optional):item,file,collectionresource_id(string, optional): Specific resource UUIDfrom_date(datetime, optional): Start dateto_date(datetime, optional): End dategroup_by(enum, optional):day,week,month,yearcountry(string, optional): Filter by country codepage(integer, optional): Page numberper_page(integer, optional): Results per page
Returns:
200 OK: Download statistics with pagination400 Bad Request: Invalid query parameters401 Unauthorized: Authentication required
Get most accessed items.
Arguments:
metric(enum, required):views,downloads,citationsfrom_date(datetime, optional): Start dateto_date(datetime, optional): End datecollection_id(string, optional): Filter by collectionlimit(integer, optional): Number of results (max: 100)
Returns:
200 OK: Array of items with statistics400 Bad Request: Invalid parameters401 Unauthorized: Authentication required
Generate custom report.
Arguments:
report_type(string, required): Report type identifierparameters(object, required): Report parametersformat(enum, required):json,csv,pdf,xlsxdelivery_method(enum, optional):download,email(default: download)
Returns:
202 Accepted: Report generation started400 Bad Request: Invalid report configuration401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
Get generated report.
Arguments:
report_id(string, required): Report UUID
Returns:
200 OK: Report file or download URL202 Accepted: Report still generating401 Unauthorized: Authentication required404 Not Found: Report not found410 Gone: Report expired
Purpose: Manage submission workflows, peer review processes, and approval chains. Supports configurable multi-step workflows with notifications and delegation.
List available workflows.
Arguments:
active(boolean, optional): Filter active workflowstype(string, optional): Filter by workflow type
Returns:
200 OK: Array of workflow definitions401 Unauthorized: Authentication required
Get workflow definition.
Arguments:
workflow_id(string, required): Workflow UUID
Returns:
200 OK: Workflow definition object401 Unauthorized: Authentication required404 Not Found: Workflow not found
Start a workflow for an item.
Arguments:
workflow_id(string, required): Workflow UUIDitem_id(string, optional): Existing item UUIDcollection_id(string, required): Target collectioninitial_data(object, optional): Initial workflow data
Returns:
201 Created: Workflow item object400 Bad Request: Invalid workflow configuration401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Workflow or collection not found
Get workflow item status.
Arguments:
workflow_item_id(string, required): Workflow item UUID
Returns:
200 OK: Workflow item with current state and history401 Unauthorized: Authentication required403 Forbidden: Access denied404 Not Found: Workflow item not found
Perform workflow action.
Arguments:
workflow_item_id(string, required): Workflow item UUIDaction(enum, required):approve,reject,request_changes,claim,unclaimcomment(string, optional): Action commentdata(object, optional): Action-specific data
Returns:
200 OK: Updated workflow item400 Bad Request: Invalid action or data401 Unauthorized: Authentication required403 Forbidden: Action not allowed in current state404 Not Found: Workflow item not found409 Conflict: Workflow item in wrong state for action
List workflow items.
Arguments:
workflow_id(string, optional): Filter by workflowstate(string, optional): Filter by current stateassigned_to(string, optional): Filter by assigned usersubmitter(string, optional): Filter by submittercollection_id(string, optional): Filter by collectionpage(integer, optional): Page numberper_page(integer, optional): Items per page
Returns:
200 OK: Array of workflow items with pagination401 Unauthorized: Authentication required
Get workflow history.
Arguments:
workflow_item_id(string, required): Workflow item UUID
Returns:
200 OK: Array of workflow actions and state changes401 Unauthorized: Authentication required403 Forbidden: Access denied404 Not Found: Workflow item not found
Purpose: Enable integration with external systems through standard protocols (OAI-PMH, SWORD, IIIF) and custom webhooks. Support data export in various formats.
OAI-PMH endpoint.
Arguments:
verb(enum, required): OAI-PMH verb (Identify,ListMetadataFormats,ListSets,ListIdentifiers,ListRecords,GetRecord)metadataPrefix(string, conditional): Metadata formatidentifier(string, conditional): Item identifierfrom(datetime, optional): Selective harvesting start dateuntil(datetime, optional): Selective harvesting end dateset(string, optional): Set specificationresumptionToken(string, optional): Resumption token for pagination
Returns:
200 OK: OAI-PMH XML response400 Bad Request: Bad argument404 Not Found: ID does not exist422 Unprocessable Entity: Cannot disseminate format
SWORD deposit endpoint.
Arguments:
collection_id(string, required): Target collection UUID- Content in request body (ZIP, METS, etc.)
- Headers:
Content-Type,Content-Disposition,Content-MD5
Returns:
201 Created: Deposit receipt400 Bad Request: Invalid deposit401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Collection not found415 Unsupported Media Type: Format not accepted
IIIF Presentation API manifest.
Arguments:
item_id(string, required): Item UUID
Returns:
200 OK: IIIF manifest JSON404 Not Found: Item not found or no suitable images
IIIF Image API endpoint.
Arguments:
item_id(string, required): Item UUIDfile_id(string, required): File UUIDregion(string, required): Image regionsize(string, required): Image sizerotation(string, required): Rotationquality(string, required): Qualityformat(string, required): Output format
Returns:
200 OK: Image data400 Bad Request: Invalid IIIF parameters404 Not Found: Item or file not found
Register a webhook.
Arguments:
url(string, required): Webhook endpoint URLevents(array, required): Array of event types to subscribe tosecret(string, optional): Webhook signing secretactive(boolean, optional): Webhook active status (default: true)
Returns:
201 Created: Webhook registration object with UUID400 Bad Request: Invalid webhook configuration401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
List registered webhooks.
Arguments:
active(boolean, optional): Filter by active status
Returns:
200 OK: Array of webhook objects401 Unauthorized: Authentication required
Delete a webhook.
Arguments:
webhook_id(string, required): Webhook UUID
Returns:
204 No Content: Webhook deleted401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: Webhook not found
List available export formats.
Arguments:
resource_type(enum, optional):item,collection,metadata
Returns:
200 OK: Array of supported export format objects401 Unauthorized: Authentication required
Export resources.
Arguments:
resource_type(enum, required):item,collectionresource_ids(array, required): Array of resource UUIDsformat(enum, required): Export formatoptions(object, optional): Format-specific optionsinclude_files(boolean, optional): Include bitstreams (default: false)
Returns:
202 Accepted: Export job created400 Bad Request: Invalid export configuration401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
Purpose: System configuration, user management, monitoring, and maintenance operations. Restricted to administrative users.
System health check.
Arguments:
detailed(boolean, optional): Include component details (default: false)
Returns:
200 OK: Health status object503 Service Unavailable: System unhealthy401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
Get system information.
Arguments: None
Returns:
200 OK: System version, configuration, and capacity info401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
List users.
Arguments:
query(string, optional): Search queryrole(string, optional): Filter by rolestatus(enum, optional):active,inactive,lockedpage(integer, optional): Page numberper_page(integer, optional): Users per page
Returns:
200 OK: Array of user objects with pagination401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
Create a user.
Arguments:
username(string, required): Usernameemail(string, required): Email addresspassword(string, required): Initial passwordfirst_name(string, required): First namelast_name(string, required): Last nameroles(array, optional): Array of role identifiers
Returns:
201 Created: User object400 Bad Request: Invalid user data401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions409 Conflict: Username or email already exists
Update user.
Arguments:
user_id(string, required): User UUIDemail(string, optional): Updated emailfirst_name(string, optional): Updated first namelast_name(string, optional): Updated last nameroles(array, optional): Updated rolesstatus(enum, optional): Updated status
Returns:
200 OK: Updated user object400 Bad Request: Invalid update data401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: User not found
Delete or deactivate user.
Arguments:
user_id(string, required): User UUIDpermanent(boolean, optional): Permanent deletion (default: false)
Returns:
204 No Content: User deleted/deactivated401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions404 Not Found: User not found409 Conflict: User owns resources
Query system audit log.
Arguments:
user_id(string, optional): Filter by useraction(string, optional): Filter by action typeresource_type(enum, optional): Filter by resource typeresource_id(string, optional): Filter by resourcefrom_date(datetime, required): Start dateto_date(datetime, required): End datepage(integer, optional): Page numberper_page(integer, optional): Entries per page
Returns:
200 OK: Array of audit log entries with pagination400 Bad Request: Invalid query parameters401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
Trigger search index rebuild.
Arguments:
resource_type(enum, optional):item,collection,allresource_id(string, optional): Specific resource UUID
Returns:
202 Accepted: Reindex job started401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
Clear application caches.
Arguments:
cache_type(enum, optional): Specific cache to clear
Returns:
204 No Content: Cache cleared401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
Get storage usage statistics.
Arguments:
breakdown_by(enum, optional):collection,item_type,file_type
Returns:
200 OK: Storage usage statistics401 Unauthorized: Authentication required403 Forbidden: Insufficient permissions
All endpoints may return the following error codes:
500 Internal Server Error: Unexpected server error502 Bad Gateway: Upstream service failure503 Service Unavailable: Service temporarily unavailable504 Gateway Timeout: Request timeout
Authorization: Bearer token for authenticationContent-Type: Request content typeAccept: Desired response content typeX-API-Version: API version (optional, defaults to latest)
Content-Type: Response content typeX-Rate-Limit-Limit: Rate limit maximumX-Rate-Limit-Remaining: Remaining requestsX-Rate-Limit-Reset: Rate limit reset timeX-Request-ID: Unique request identifier for debugging
List endpoints support pagination with the following query parameters:
page: Page number (1-based)per_page: Items per page (default: 20, max: 100)
Pagination metadata is included in responses:
{
"data": [...],
"pagination": {
"page": 1,
"per_page": 20,
"total_pages": 10,
"total_count": 200
}
}The API uses URL-based versioning (/api/v1/). Clients should specify the API version in the URL. Deprecated endpoints will be supported for at least one major version cycle.
- Default: 1000 requests per hour per authenticated user
- Anonymous: 100 requests per hour per IP address
- Rate limits may vary by endpoint and user role
All error responses follow a consistent format:
{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable error message",
"details": {
"field": "Specific field error information"
},
"request_id": "unique-request-id"
}
}Document Version: 1.0.0
Last Updated: 2026-02-26
Contact: Digital Repository Team