Inventory API Reference
This page documents the RESTful API endpoints for managing bucket inventory configurations.
All inventory operations are scoped to a bucket and use the ?minio-inventory query parameter.
For CLI-based management, see mc inventory.
For configuration details, see the Configuration Reference.
Permissions
Inventory API endpoints require the following IAM permissions:
| Permission | Operations |
|---|---|
s3:GetInventoryConfiguration | Retrieve configurations and job statuses |
s3:PutInventoryConfiguration | Create, update, and delete configurations |
s3:ListBucket | Required on the source bucket for jobs to run |
admin:InventoryControl | Cancel, suspend, and resume jobs (admin only) |
Generate configuration template
Generate a YAML template for a new inventory configuration.
Request:
GET /{bucket}?minio-inventory&generate&id={id}| Parameter | Type | Required | Description |
|---|---|---|---|
bucket | string | yes | Source bucket name |
id | string | yes | ID for the new inventory configuration |
Response: 200 OK with Content-Type: application/x-yaml
Create or update a configuration
Create a new inventory configuration or update an existing one. Provide the configuration in the request body as a YAML document.
Request:
PUT /{bucket}?minio-inventory&id={id}| Parameter | Type | Required | Description |
|---|---|---|---|
bucket | string | yes | Source bucket name |
id | string | yes | Inventory configuration ID |
Request body: Complete inventory configuration in YAML format. See the Configuration Reference for the YAML schema.
Response: 200 OK
Get a configuration
Retrieve a specific inventory configuration.
Request:
GET /{bucket}?minio-inventory&id={id}Response: 200 OK with Content-Type: application/json
{
"bucket": "my-bucket",
"id": "daily-report",
"user": "admin",
"yamlDef": "..."
}Delete a configuration
Delete an inventory configuration from a bucket.
Request:
DELETE /{bucket}?minio-inventory&id={id}Response: 200 OK
List configurations
List all inventory configurations for a bucket. Results are paginated.
Request:
GET /{bucket}?minio-inventory&continuation-token={token}For the first request, provide an empty token: &continuation-token=
Response: 200 OK with Content-Type: application/json
{
"items": [
{
"bucket": "my-bucket",
"id": "daily-report",
"user": "admin"
}
],
"nextContinuationToken": "..."
}Use the nextContinuationToken value to retrieve subsequent pages.
Get job status
Retrieve the status of a specific inventory job.
Request:
GET /{bucket}?minio-inventory&id={id}&statusResponse: 200 OK with Content-Type: application/json
{
"bucket": "my-bucket",
"id": "daily-report",
"user": "admin",
"schedule": "daily",
"state": "completed",
"startTime": "2025-10-11T10:30:00Z",
"endTime": "2025-10-11T10:45:00Z",
"scanned": "my-bucket/path/to/last/scanned/object",
"matched": "my-bucket/path/to/last/matched/object",
"scannedCount": 15234,
"matchedCount": 8421,
"recordsWritten": 8421,
"outputFilesCount": 3,
"executionTime": "15m0s",
"manifestPath": "dest-bucket/prefix/source-bucket/daily-report/2025-10-11T10-30Z/manifest.json"
}Status fields
| Field | Type | Description |
|---|---|---|
bucket | string | Source bucket name |
id | string | Inventory configuration ID |
user | string | User who created the job |
accessKey | string | Access key used for job execution |
schedule | string | Job schedule: once, hourly, daily, weekly, monthly, yearly |
state | string | Current state: sleeping, pending, running, completed, failed, errored, suspended, canceled |
nextScheduledTime | timestamp | Next execution time (periodic jobs in sleeping state only) |
startTime | timestamp | When the current or last execution started |
endTime | timestamp | When the execution completed |
scannedCount | uint64 | Total objects scanned |
scanned | string | Last scanned object path |
matched | string | Last matched object path |
matchedCount | uint64 | Objects matching the configured filters |
recordsWritten | uint64 | Metadata records written to output files |
outputFilesCount | uint64 | Number of output data files created |
executionTime | string | Total execution time (for example, 15m0s, 2h30m) |
numStarts | uint64 | Number of times the job has started |
numErrors | uint64 | Total errors encountered |
numLockLosses | uint64 | Times the job lost its distributed lock |
manifestPath | string | Path to the manifest.json file (present after first output file) |
retryAttempts | uint64 | Retry attempts for failed jobs |
lastFailTime | timestamp | When the last failure occurred (present on errors only) |
lastFailErrors | string[] | Up to 5 most recent error messages (present on errors only) |
Timestamps use RFC 3339 format.
Admin control operations
These operations require admin:InventoryControl permission.
Cancel a job
Cancels a running inventory job.
For periodic jobs, this stops only the current execution.
For once jobs, cancellation is terminal.
POST /minio/admin/v3/inventory/{bucket}/{id}/cancelResponses: 200 OK, 409 Conflict (already canceled), 404 Not Found, 403 Forbidden
Suspend a job
Suspends a job and prevents all future scheduled runs until resumed.
POST /minio/admin/v3/inventory/{bucket}/{id}/suspendResponses: 200 OK, 409 Conflict (already suspended or completed), 404 Not Found, 403 Forbidden
Resume a job
Resumes a suspended job and re-enables scheduling.
POST /minio/admin/v3/inventory/{bucket}/{id}/resumeResponses: 200 OK, 409 Conflict (not suspended), 404 Not Found, 403 Forbidden