Download OpenAPI specification:
Administration API of the Nexo object storage server, served on the console
listener under /api/v1. JSON in, JSON out; failures are RFC 9457
application/problem+json documents with a stable snake_case code
(unauthenticated, access_denied, invalid_csrf_token, invalid_argument,
bucket_not_found, object_not_found, user_not_found, policy_not_found,
conflict, malformed_policy, invalid_configuration, object_locked,
entity_too_large, not_implemented...).
Authentication, one of:
nexo_session cookie (HttpOnly, SameSite=Strict,
issued by POST /auth/login). A state-changing request must also carry the
X-CSRF-Token header with the csrfToken of the session (returned by login
and GET /auth/session, never set in a cookie) and come from the console
origin: Sec-Fetch-Site: same-origin or, from a browser that does not send it,
an Origin (else Referer) of the console; otherwise 403
invalid_csrf_token. The ports of a host are same-site, so the pages of the
S3 listener receive the session cookie too: the origin check refuses them;Authorization header (CLI, SDKs), with the
service s3 and the region of the server in the credential scope. Presigned
URLs are not accepted.Authorization: every operation lists in x-nexo-actions the admin:* and
s3:* policy actions it requires, evaluated by the policy engine (docs/04
§4.4). Operations marked x-nexo-authorized-by: service are authorized by the
service object by object (resources in the body) or with the self-service rule
(a user always manages its own access keys and share links).
Lists answer {items, nextCursor} and accept cursor (opaque) and limit
(1-1000, default 1000).
Rate limits: every operation may answer 429 too_many_requests with a
Retry-After header (seconds) when a rate limit of the node refuses the
request (ratelimit.admin_ip per client address, ratelimit.admin_user per
authenticated user; dynamic configuration, off by default).
This document is the source of the TypeScript types of the web console
(web/src/services/http/schema.d.ts, generated with npm run gen:api); the Go
transport (internal/transport/http/admin) is the reference implementation and
pkg/nexoadmin its Go client.
Public endpoint. Sets the nexo_session cookie (HttpOnly); the CSRF token is in the body (csrfToken), never in a cookie. After 5 failed attempts of a client on an access key (or 20 of a client on any key) within 5 minutes, the attempts are refused for a minute (429 too_many_requests with Retry-After), even with the right secret; the client is the peer of the connection or, behind the --trusted-proxies, the address they forward. Against login CSRF the body must be application/json (415 unsupported_media_type) and a browser request must not be cross-site (Sec-Fetch-Site cross-site or same-site: 403 cross_site_request).
| accessKey required | string |
| secretKey required | string |
{- "accessKey": "string",
- "secretKey": "string"
}{- "id": "string",
- "accessKey": "string",
- "identity": {
- "accessKey": "string",
- "isRoot": true,
- "groups": [
- "string"
], - "policyNames": [
- "string"
]
}, - "issuedAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "csrfToken": "string"
}{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}Signed (SigV4) requests have no session and receive 401.
{- "id": "string",
- "accessKey": "string",
- "identity": {
- "accessKey": "string",
- "isRoot": true,
- "groups": [
- "string"
], - "policyNames": [
- "string"
]
}, - "issuedAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "csrfToken": "string"
}Evaluates the catalog of console actions (admin:* and s3:*) with the policy
engine, globally or on bucket (object actions on prefix*). Naming another
user requires admin:GetUser.
| bucket | string |
| prefix | string |
| user | string |
{- "user": "string",
- "isRoot": true,
- "bucket": "string",
- "prefix": "string",
- "allowed": [
- "string"
], - "denied": [
- "string"
]
}{- "version": "string",
- "commit": "string",
- "buildDate": "string",
- "mode": "snsd",
- "region": "string",
- "deploymentId": "string",
- "startedAt": "2019-08-24T14:15:22Z",
- "uptimeSeconds": 0,
- "buckets": 0,
- "objects": 0,
- "usage": 0,
- "pools": [
- {
- "index": 0,
- "sets": 0,
- "drivesPerSet": 0,
- "parity": 0,
- "readQuorum": 0,
- "writeQuorum": 0,
- "erasureSets": [
- {
- "index": 0,
- "drives": 0,
- "online": 0,
- "offline": 0,
- "healing": 0,
- "state": "ok"
}
]
}
], - "nodes": [
- {
- "endpoint": "string",
- "state": "online",
- "version": "string",
- "commit": "string",
- "uptimeSeconds": 0,
- "disks": [
- {
- "endpoint": "string",
- "path": "string",
- "id": "string",
- "poolIdx": 0,
- "setIdx": 0,
- "diskIdx": 0,
- "state": "online",
- "total": 0,
- "free": 0,
- "used": 0,
- "healing": true,
- "healingProgress": {
- "started": "2019-08-24T14:15:22Z",
- "lastUpdate": "2019-08-24T14:15:22Z",
- "bucket": "string",
- "object": "string",
- "healedBuckets": 0,
- "objectsHealed": 0,
- "objectsFailed": 0,
- "bytesDone": 0,
- "bytesFailed": 0,
- "retryAttempts": 0
}, - "error": "string"
}
], - "local": true,
- "clockSkew": {
- "offsetMs": 0,
- "rttMs": 0,
- "exceeded": true
}, - "healQueue": {
- "pending": 0,
- "healed": 0,
- "retried": 0,
- "dropped": 0
}
}
], - "kms": {
- "configured": true,
- "backend": "builtin",
- "defaultKeyId": "string",
- "endpoints": [
- {
- "url": "string",
- "online": true
}
], - "online": true,
- "error": "string",
- "version": "string",
- "keys": [
- "string"
]
}, - "tls": {
- "enabled": true,
- "minVersion": "1.2",
- "internodeVerify": true,
- "certificates": [
- {
- "name": "string",
- "domains": [
- "string"
], - "ips": [
- "string"
], - "subject": "string",
- "issuer": "string",
- "notBefore": "2019-08-24T14:15:22Z",
- "notAfter": "2019-08-24T14:15:22Z",
- "fingerprint": "string"
}
]
}, - "telemetry": {
- "enabled": true,
- "endpoint": "string",
- "protocol": "http/protobuf",
- "sampleRatio": 0
}
}{- "lastUpdate": "2019-08-24T14:15:22Z",
- "objectsCount": 0,
- "versionsCount": 0,
- "totalSize": 0,
- "bucketsCount": 0,
- "buckets": {
- "property1": {
- "size": 0,
- "objectsCount": 0,
- "versionsCount": 0,
- "deleteMarkers": 0,
- "prefixes": {
- "property1": {
- "size": 0,
- "objectsCount": 0,
- "versionsCount": 0,
- "deleteMarkers": 0
}, - "property2": {
- "size": 0,
- "objectsCount": 0,
- "versionsCount": 0,
- "deleteMarkers": 0
}
}
}, - "property2": {
- "size": 0,
- "objectsCount": 0,
- "versionsCount": 0,
- "deleteMarkers": 0,
- "prefixes": {
- "property1": {
- "size": 0,
- "objectsCount": 0,
- "versionsCount": 0,
- "deleteMarkers": 0
}, - "property2": {
- "size": 0,
- "objectsCount": 0,
- "versionsCount": 0,
- "deleteMarkers": 0
}
}
}
}
}Starts a background healing job and answers at once with its initial state; poll
GET /heal/{id} for the progress. Without bucket the job heals the format of the
drives (new or wiped drives) and every bucket; with bucket that bucket; with
recursive every object below the bucket(s) or prefix too (without recursive,
prefix names the one object to heal). deep verifies the bitrot hash of every
shard block, dryRun only reports, remove deletes the dangling objects found
(versions on too few drives to ever be read; never implied). An identical job
already running is returned instead of a new one; too many running jobs answer 429.
A single-drive deployment has nothing to heal: 501.
| bucket | string |
| prefix | string |
| recursive | boolean |
| dryRun | boolean |
| deep | boolean Verify the bitrot hash of every shard block. |
| remove | boolean Delete the dangling objects found. |
{- "bucket": "string",
- "prefix": "string",
- "recursive": true,
- "dryRun": true,
- "deep": true,
- "remove": true
}{- "id": "string",
- "state": "running",
- "request": {
- "bucket": "string",
- "prefix": "string",
- "recursive": true,
- "dryRun": true,
- "deep": true,
- "remove": true
}, - "finished": true,
- "node": "string",
- "startedAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "finishedAt": "2019-08-24T14:15:22Z",
- "current": "string",
- "scanned": 0,
- "healed": 0,
- "failed": 0,
- "dangling": 0,
- "removed": 0,
- "bytes": 0,
- "drives": [
- {
- "endpoint": "string",
- "pool": 0,
- "set": 0,
- "disk": 0,
- "state": "online",
- "missing": 0,
- "corrupt": 0,
- "offline": 0,
- "healed": 0
}
], - "items": [
- {
- "kind": "format",
- "bucket": "string",
- "object": "string",
- "healed": 0,
- "dangling": true,
- "removed": true,
- "error": "string",
- "drives": [
- {
- "endpoint": "string",
- "pool": 0,
- "set": 0,
- "disk": 0,
- "before": "ok",
- "after": "ok"
}
]
}
], - "itemsTruncated": true,
- "error": "string"
}Newest first; a finished job stays listed for an hour.
{- "items": [
- {
- "id": "string",
- "state": "running",
- "request": {
- "bucket": "string",
- "prefix": "string",
- "recursive": true,
- "dryRun": true,
- "deep": true,
- "remove": true
}, - "finished": true,
- "node": "string",
- "startedAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "finishedAt": "2019-08-24T14:15:22Z",
- "current": "string",
- "scanned": 0,
- "healed": 0,
- "failed": 0,
- "dangling": 0,
- "removed": 0,
- "bytes": 0,
- "drives": [
- {
- "endpoint": "string",
- "pool": 0,
- "set": 0,
- "disk": 0,
- "state": "online",
- "missing": 0,
- "corrupt": 0,
- "offline": 0,
- "healed": 0
}
], - "items": [
- {
- "kind": "format",
- "bucket": "string",
- "object": "string",
- "healed": 0,
- "dangling": true,
- "removed": true,
- "error": "string",
- "drives": [
- {
- "endpoint": "string",
- "pool": 0,
- "set": 0,
- "disk": 0,
- "before": "ok",
- "after": "ok"
}
]
}
], - "itemsTruncated": true,
- "error": "string"
}
], - "nextCursor": "string"
}Any node answers, the progress of a job being persisted on the drives.
| id required | string |
{- "id": "string",
- "state": "running",
- "request": {
- "bucket": "string",
- "prefix": "string",
- "recursive": true,
- "dryRun": true,
- "deep": true,
- "remove": true
}, - "finished": true,
- "node": "string",
- "startedAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "finishedAt": "2019-08-24T14:15:22Z",
- "current": "string",
- "scanned": 0,
- "healed": 0,
- "failed": 0,
- "dangling": 0,
- "removed": 0,
- "bytes": 0,
- "drives": [
- {
- "endpoint": "string",
- "pool": 0,
- "set": 0,
- "disk": 0,
- "state": "online",
- "missing": 0,
- "corrupt": 0,
- "offline": 0,
- "healed": 0
}
], - "items": [
- {
- "kind": "format",
- "bucket": "string",
- "object": "string",
- "healed": 0,
- "dangling": true,
- "removed": true,
- "error": "string",
- "drives": [
- {
- "endpoint": "string",
- "pool": 0,
- "set": 0,
- "disk": 0,
- "before": "ok",
- "after": "ok"
}
]
}
], - "itemsTruncated": true,
- "error": "string"
}Every bucket with s3:ListAllMyBuckets, otherwise those the caller may list (s3:ListBucket).
| prefix | string |
| cursor | string Opaque cursor of the next page (nextCursor of the previous one). |
| limit | integer [ 1 .. 1000 ] Page size, 1 to 1000 (default 1000). |
{- "items": [
- {
- "name": "string",
- "created": "2019-08-24T14:15:22Z",
- "region": "string",
- "versioning": "off",
- "objectLockEnabled": true,
- "objects": 0,
- "versions": 0,
- "deleteMarkers": 0,
- "size": 0,
- "quotaBytes": 0,
- "public": true,
- "tags": {
- "property1": "string",
- "property2": "string"
}, - "partial": true
}
], - "nextCursor": "string"
}Versioning, object lock and quota need their own actions on top of s3:CreateBucket.
| name required | string |
| region | string |
| versioning | boolean Enable versioning (implied by objectLock). |
| objectLock | boolean |
| quotaBytes | integer <int64> Hard quota in bytes (0 none). |
{- "name": "string",
- "region": "string",
- "versioning": true,
- "objectLock": true,
- "quotaBytes": 0
}{- "name": "string",
- "created": "2019-08-24T14:15:22Z",
- "region": "string",
- "versioning": "off",
- "objectLockEnabled": true,
- "objects": 0,
- "versions": 0,
- "deleteMarkers": 0,
- "size": 0,
- "quotaBytes": 0,
- "public": true,
- "tags": {
- "property1": "string",
- "property2": "string"
}, - "partial": true
}A caller that may list only a part of the bucket (s3:ListBucket under an s3:prefix condition, a home directory) gets its name, creation date and region only (partial).
| bucket required | string |
{- "name": "string",
- "created": "2019-08-24T14:15:22Z",
- "region": "string",
- "versioning": "off",
- "objectLockEnabled": true,
- "objects": 0,
- "versions": 0,
- "deleteMarkers": 0,
- "size": 0,
- "quotaBytes": 0,
- "public": true,
- "tags": {
- "property1": "string",
- "property2": "string"
}, - "partial": true
}With force=true (and s3:ForceDeleteBucket) the bucket is emptied first through the
object layer: every version, delete marker and pending upload; object lock is
honored, a protected version keeps the bucket (409 bucket_not_empty).
| bucket required | string |
| force | boolean Empty the bucket before deleting it. |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}| bucket required | string |
| status required | string (VersioningState) Enum: "off" "enabled" "suspended" |
{- "status": "off"
}{- "status": "off"
}{- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}The body is the policy document; errors are malformed_policy problems located by line and column.
| bucket required | string |
| Id | string |
| Version required | string |
required | Array of objects (PolicyStatement) |
{- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}| bucket required | string |
| type required | string Enforcement type ("hard"); empty when no quota is set. |
| size required | integer <int64> Limit in bytes; 0 disables the quota. |
{- "type": "string",
- "size": 0
}{- "type": "string",
- "size": 0
}Replaces the tags; an empty set removes them.
| bucket required | string |
required | object |
{- "tags": {
- "property1": "string",
- "property2": "string"
}
}{- "tags": {
- "property1": "string",
- "property2": "string"
}
}The object lock configuration; a bucket without object lock answers {"enabled":false}.
| bucket required | string |
{- "enabled": true,
- "mode": "GOVERNANCE",
- "days": 0,
- "years": 0
}| bucket required | string |
| enabled required | boolean |
| mode | string Enum: "GOVERNANCE" "COMPLIANCE" |
| days | integer |
| years | integer |
{- "enabled": true,
- "mode": "GOVERNANCE",
- "days": 0,
- "years": 0
}{- "enabled": true,
- "mode": "GOVERNANCE",
- "days": 0,
- "years": 0
}| bucket required | string |
| algorithm required | string "AES256" (SSE-S3) or "aws:kms" (SSE-KMS). |
| kmsKeyId | string |
{- "algorithm": "string",
- "kmsKeyId": "string"
}{- "algorithm": "string",
- "kmsKeyId": "string"
}| bucket required | string |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}| bucket required | string |
{- "bucket": "string",
- "rules": [
- {
- "prefix": "string",
- "preset": "private"
}
], - "public": true,
- "hasPolicy": true
}private removes the rule of the prefix; the other statements of the bucket policy are kept.
| bucket required | string |
| prefix | string |
| preset required | string Enum: "private" "download" "upload" "public" |
{- "prefix": "string",
- "preset": "private"
}{- "bucket": "string",
- "rules": [
- {
- "prefix": "string",
- "preset": "private"
}
], - "public": true,
- "hasPolicy": true
}| bucket required | string |
| prefix | string The prefix; the whole bucket when absent. |
{- "bucket": "string",
- "rules": [
- {
- "prefix": "string",
- "preset": "private"
}
], - "public": true,
- "hasPolicy": true
}The rules of the S3 LifecycleConfiguration of the bucket in structured form (what the S3 API stores and reads). A bucket without configuration answers no rule.
| bucket required | string |
{- "rules": [
- {
- "id": "string",
- "enabled": true,
- "filter": {
- "prefix": "string",
- "tags": {
- "property1": "string",
- "property2": "string"
}, - "sizeGreaterThan": 0,
- "sizeLessThan": 0
}, - "expiration": {
- "days": 0,
- "date": "string",
- "expiredObjectDeleteMarker": true
}, - "noncurrentExpiration": {
- "noncurrentDays": 0,
- "newerNoncurrentVersions": 0
}, - "abortIncompleteUpload": {
- "daysAfterInitiation": 0
}, - "transitions": [
- {
- "days": 0,
- "date": "string",
- "storageClass": "string"
}
], - "noncurrentTransitions": [
- {
- "noncurrentDays": 0,
- "newerNoncurrentVersions": 0,
- "storageClass": "string"
}
]
}
]
}Every rule is validated on its own with the rules of the S3 API: a rejected
configuration answers 400 invalid_configuration with every invalid rule in
ruleErrors (index, id, S3 code, message) and nothing is stored. Rules without
id get one. No rule removes the configuration. Transitions need a remote tier
(P2): without one they are refused (code NotImplemented).
| bucket required | string |
required | Array of objects (LifecycleRule) <= 1000 items |
{- "rules": [
- {
- "id": "string",
- "enabled": true,
- "filter": {
- "prefix": "string",
- "tags": {
- "property1": "string",
- "property2": "string"
}, - "sizeGreaterThan": 0,
- "sizeLessThan": 0
}, - "expiration": {
- "days": 0,
- "date": "string",
- "expiredObjectDeleteMarker": true
}, - "noncurrentExpiration": {
- "noncurrentDays": 0,
- "newerNoncurrentVersions": 0
}, - "abortIncompleteUpload": {
- "daysAfterInitiation": 0
}, - "transitions": [
- {
- "days": 0,
- "date": "string",
- "storageClass": "string"
}
], - "noncurrentTransitions": [
- {
- "noncurrentDays": 0,
- "newerNoncurrentVersions": 0,
- "storageClass": "string"
}
]
}
]
}{- "rules": [
- {
- "id": "string",
- "enabled": true,
- "filter": {
- "prefix": "string",
- "tags": {
- "property1": "string",
- "property2": "string"
}, - "sizeGreaterThan": 0,
- "sizeLessThan": 0
}, - "expiration": {
- "days": 0,
- "date": "string",
- "expiredObjectDeleteMarker": true
}, - "noncurrentExpiration": {
- "noncurrentDays": 0,
- "newerNoncurrentVersions": 0
}, - "abortIncompleteUpload": {
- "daysAfterInitiation": 0
}, - "transitions": [
- {
- "days": 0,
- "date": "string",
- "storageClass": "string"
}
], - "noncurrentTransitions": [
- {
- "noncurrentDays": 0,
- "newerNoncurrentVersions": 0,
- "storageClass": "string"
}
]
}
]
}| bucket required | string |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}Applies the rules to every version and incomplete upload of the bucket at once,
as the scanner does over its cycle: the expired versions are removed (those
Object Lock protects only get a delete marker, counted in locked). A bucket
without configuration is left as is.
| bucket required | string |
{- "buckets": 0,
- "versions": 0,
- "deleted": 0,
- "deleteMarkers": 0,
- "uploadsAborted": 0,
- "locked": 0
}The S3 NotificationConfiguration of the bucket in structured form; a bucket without configuration answers no subscription.
| bucket required | string |
{- "subscriptions": [
- {
- "id": "string",
- "arn": "string",
- "events": [
- "string"
], - "prefix": "string",
- "suffix": "string"
}
]
}Every subscription is validated on its own (known events, prefix/suffix filters, an
ARN naming a configured target, see GET /notify/targets): a rejected
configuration answers 400 invalid_configuration with every invalid subscription in
ruleErrors. Subscriptions without id get one. No subscription removes them all.
| bucket required | string |
required | Array of objects (EventSubscription) |
{- "subscriptions": [
- {
- "id": "string",
- "arn": "string",
- "events": [
- "string"
], - "prefix": "string",
- "suffix": "string"
}
]
}{- "subscriptions": [
- {
- "id": "string",
- "arn": "string",
- "events": [
- "string"
], - "prefix": "string",
- "suffix": "string"
}
]
}| bucket required | string |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}The rules of the S3 CORSConfiguration, evaluated in order; a bucket without configuration answers no rule.
| bucket required | string |
{- "rules": [
- {
- "id": "string",
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAgeSeconds": 0
}
]
}1 to 100 rules, each validated on its own: a rejected configuration answers 400
invalid_configuration with every invalid rule in ruleErrors. No rule removes
the configuration.
| bucket required | string |
required | Array of objects (CorsRule) <= 100 items |
{- "rules": [
- {
- "id": "string",
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAgeSeconds": 0
}
]
}{- "rules": [
- {
- "id": "string",
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAgeSeconds": 0
}
]
}| bucket required | string |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}| bucket required | string |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}| bucket required | string |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}Objects and common prefixes ("folders") directly under prefix, without the
folder placeholder object prefix itself. delimiter defaults to "/"; an empty
delimiter lists recursively. The object browser authorizes s3:ListBucket with the
conditions s3:prefix, s3:delimiter (the effective one) and s3:max-keys.
| bucket required | string |
| prefix | string |
| delimiter | string Default "/"; empty lists recursively. |
| cursor | string Opaque cursor of the next page (nextCursor of the previous one). |
| limit | integer [ 1 .. 1000 ] Page size, 1 to 1000 (default 1000). |
{- "objects": [
- {
- "key": "string",
- "versionId": "string",
- "size": 0,
- "etag": "string",
- "lastModified": "2019-08-24T14:15:22Z",
- "contentType": "string",
- "isDeleteMarker": true,
- "isLatest": true,
- "storageClass": "string"
}
], - "prefixes": [
- "string"
], - "isTruncated": true,
- "nextCursor": "string"
}Synchronous; every object is authorized and reported (s3:DeleteObject, s3:DeleteObjectVersion with a version).
Every prefix needs s3:ListBucket (s3:ListBucketVersions with allVersions) with the s3:prefix condition:
otherwise the whole request is denied before deleting anything. Object Lock is honored: a version under
retention or legal hold fails with object_locked; with bypassGovernance the versions under a GOVERNANCE
retention are deleted where the caller has s3:BypassGovernanceRetention (on the version, with the condition
values of the S3 x-amz-bypass-governance-retention header).
| bucket required | string |
Array of objects (ObjectRef) | |
| prefixes | Array of strings Folders deleted recursively ("" is the whole bucket). A prefix without a trailing slash names the folder of that name, as in the CLI: "photos" is "photos/", never "photos2/" nor "photosx.txt". |
| allVersions | boolean Delete every version under the prefixes permanently. |
| bypassGovernance | boolean Delete the versions a GOVERNANCE retention protects, where the caller has s3:BypassGovernanceRetention. |
{- "objects": [
- {
- "key": "string",
- "versionId": "string"
}
], - "prefixes": [
- "string"
], - "allVersions": true,
- "bypassGovernance": true
}{- "deleted": [
- {
- "key": "string",
- "versionId": "string",
- "deleteMarker": true,
- "deleteMarkerVersionId": "string"
}
], - "errors": [
- {
- "key": "string",
- "versionId": "string",
- "code": "string",
- "message": "string"
}
]
}Tags and versions are included only when the caller may read them.
| bucket required | string |
| key required | string Object key. |
| versionId | string Version of the object; the policies see it as s3:versionid, as for the S3 request with the same versionId. |
{- "key": "string",
- "versionId": "string",
- "size": 0,
- "etag": "string",
- "lastModified": "2019-08-24T14:15:22Z",
- "contentType": "string",
- "isDeleteMarker": true,
- "isLatest": true,
- "storageClass": "string",
- "contentEncoding": "string",
- "contentDisposition": "string",
- "contentLanguage": "string",
- "cacheControl": "string",
- "expires": "2019-08-24T14:15:22Z",
- "userMetadata": {
- "property1": "string",
- "property2": "string"
}, - "parts": 0,
- "checksumAlgorithm": "string",
- "checksum": "string",
- "encryption": {
- "type": "SSE-S3",
- "kmsKeyId": "string"
}, - "tags": {
- "property1": "string",
- "property2": "string"
}, - "versions": [
- {
- "key": "string",
- "versionId": "string",
- "size": 0,
- "etag": "string",
- "lastModified": "2019-08-24T14:15:22Z",
- "contentType": "string",
- "isDeleteMarker": true,
- "isLatest": true,
- "storageClass": "string"
}
], - "versionsTruncated": true
}| bucket required | string |
| key required | string Object key. |
| cursor | string Opaque cursor of the next page (nextCursor of the previous one). |
| limit | integer [ 1 .. 1000 ] Page size, 1 to 1000 (default 1000). |
{- "items": [
- {
- "key": "string",
- "versionId": "string",
- "size": 0,
- "etag": "string",
- "lastModified": "2019-08-24T14:15:22Z",
- "contentType": "string",
- "isDeleteMarker": true,
- "isLatest": true,
- "storageClass": "string"
}
], - "nextCursor": "string"
}| bucket required | string |
| prefix required | string The folder key; a trailing "/" is added when missing. |
{- "prefix": "string"
}{- "key": "string",
- "versionId": "string",
- "size": 0,
- "etag": "string",
- "lastModified": "2019-08-24T14:15:22Z",
- "contentType": "string",
- "isDeleteMarker": true,
- "isLatest": true,
- "storageClass": "string"
}Copies the version onto its own key with its content, metadata and tags: a new latest
version is created and the history is kept. Authorized like the S3 CopyObject it stands
for: s3:GetObjectVersion on the version (s3:versionid condition) and s3:PutObject on
the key. A delete marker cannot be restored (405).
| bucket required | string |
| key required | string |
| versionId required | string |
{- "key": "string",
- "versionId": "string",
- "size": 0,
- "etag": "string",
- "lastModified": "2019-08-24T14:15:22Z",
- "contentType": "string",
- "isDeleteMarker": true,
- "isLatest": true,
- "storageClass": "string"
}Moving a prefix needs s3:ListBucket on the source prefix (s3:prefix condition): otherwise the
whole request is denied before moving anything.
| bucket required | string |
| source required | string |
| destination required | string |
| prefix | boolean Move every object of the folder source to the folder destination (which may not lie under it). Both name folders: a missing trailing slash is added ("photos" is "photos/", never "photos2/"). |
| overwrite | boolean Replace existing destination objects (otherwise conflict). |
{- "source": "string",
- "destination": "string",
- "prefix": true,
- "overwrite": true
}{- "renamed": [
- {
- "source": "string",
- "destination": "string"
}
], - "errors": [
- {
- "source": "string",
- "destination": "string",
- "code": "string",
- "message": "string"
}
]
}| bucket required | string |
| key required | string Object key. |
| versionId | string Version of the object; the policies see it as s3:versionid, as for the S3 request with the same versionId. |
required | object |
{- "tags": {
- "property1": "string",
- "property2": "string"
}
}{- "tags": {
- "property1": "string",
- "property2": "string"
}
}| bucket required | string |
| key required | string Object key. |
| versionId | string Version of the object; the policies see it as s3:versionid, as for the S3 request with the same versionId. |
| Range | string |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}Inline only for types that cannot run scripts in the console origin (raster
images, PDF, text/plain, JSON, audio, video), with a sandboxing
Content-Security-Policy; everything else (SVG, HTML, XML...) is served as an
application/octet-stream attachment.
| bucket required | string |
| key required | string Object key. |
| versionId | string Version of the object; the policies see it as s3:versionid, as for the S3 request with the same versionId. |
| Range | string |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}The HLS presentation of an MP4 video (H.264 or H.265, optional AAC audio), packaged on the fly without transcoding: the playlists and segments reference each other with relative URIs pinned to the ETag of the object. Fragmented MP4 and SSE-C objects are refused.
| bucket required | string |
| key required | string Object key. |
| versionId | string Version of the object; the policies see it as s3:versionid, as for the S3 request with the same versionId. |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}The segments of the presentation (VOD).
| bucket required | string |
| key required | string Object key. |
| versionId | string Version of the object; the policies see it as s3:versionid, as for the S3 request with the same versionId. |
| rev required | string The ETag the presentation is pinned to (412 once the object changed). |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}The fMP4 initialization segment.
| bucket required | string |
| key required | string Object key. |
| versionId | string Version of the object; the policies see it as s3:versionid, as for the S3 request with the same versionId. |
| rev required | string The ETag the presentation is pinned to (412 once the object changed). |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}One fMP4 media segment, numbered from 0.
| bucket required | string |
| key required | string Object key. |
| versionId | string Version of the object; the policies see it as s3:versionid, as for the S3 request with the same versionId. |
| rev required | string The ETag the presentation is pinned to (412 once the object changed). |
| n required | integer >= 0 |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}Names are relative to base. Explicit keys are checked before streaming; every prefix
needs s3:ListBucket (s3:prefix condition), otherwise the request is denied before
streaming. Objects of the prefixes the caller may not read are listed in nexo-zip-errors.txt.
The console submits the request as a form (application/x-www-form-urlencoded: the JSON
ZipRequest in the field request, the CSRF token in the field csrfToken) so that the
browser streams the archive to disk instead of holding it in memory. This is the only
operation that reads the CSRF token from a form field; the request must still come from
the console origin.
| bucket required | string |
| keys | Array of strings |
| prefixes | Array of strings Folders archived recursively. A prefix without a trailing slash names the folder of that name ("photos" is "photos/", never "photos2/"). |
| base | string Folder the archive names are relative to ("photos" is "photos/"). |
{- "keys": [
- "string"
], - "prefixes": [
- "string"
], - "base": "string"
}{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}A version without retention answers no mode. A bucket without Object Lock answers 400.
| bucket required | string |
| key required | string Object key. |
| versionId | string Version of the object; the policies see it as s3:versionid, as for the S3 request with the same versionId. |
{- "versionId": "string",
- "mode": "GOVERNANCE",
- "retainUntil": "2019-08-24T14:15:22Z"
}A mode with a future retain-until date, or neither to remove the retention. A
retention can always be extended; a GOVERNANCE one is shortened or removed only with
bypassGovernance (s3:BypassGovernanceRetention, asked explicitly: 403 when denied),
a COMPLIANCE one never, not even by root (403 object_locked). Authorized as the S3
PutObjectRetention (s3:versionid, x-amz-bypass-governance-retention).
| bucket required | string |
| key required | string Object key. |
| versionId | string Version of the object; the policies see it as s3:versionid, as for the S3 request with the same versionId. |
| mode | string GOVERNANCE or COMPLIANCE (case-insensitive); empty with no date removes the retention. |
| retainUntil | string <date-time> |
| bypassGovernance | boolean Shorten or remove a GOVERNANCE retention (s3:BypassGovernanceRetention). |
{- "mode": "string",
- "retainUntil": "2019-08-24T14:15:22Z",
- "bypassGovernance": true
}{- "versionId": "string",
- "mode": "GOVERNANCE",
- "retainUntil": "2019-08-24T14:15:22Z"
}A version whose legal hold was never set answers OFF.
| bucket required | string |
| key required | string Object key. |
| versionId | string Version of the object; the policies see it as s3:versionid, as for the S3 request with the same versionId. |
{- "versionId": "string",
- "status": "string"
}| bucket required | string |
| key required | string Object key. |
| versionId | string Version of the object; the policies see it as s3:versionid, as for the S3 request with the same versionId. |
| versionId | string |
| status required | string ON or OFF (case-insensitive in requests). |
{- "versionId": "string",
- "status": "string"
}{- "versionId": "string",
- "status": "string"
}Describes a version without reading it (S3 GetObjectAttributes): its checksum and, for a multipart object, a page of its parts with their sizes and checksums.
| bucket required | string |
| key required | string Object key. |
| versionId | string Version of the object; the policies see it as s3:versionid, as for the S3 request with the same versionId. |
| maxParts | integer [ 0 .. 1000 ] Parts per page, 1 to 1000 (default 1000). |
| partNumberMarker | integer >= 0 The parts after this number. |
{- "key": "string",
- "versionId": "string",
- "etag": "string",
- "size": 0,
- "lastModified": "2019-08-24T14:15:22Z",
- "storageClass": "string",
- "checksum": {
- "algorithm": "CRC32",
- "type": "FULL_OBJECT",
- "value": "string"
}, - "partsCount": 0,
- "parts": [
- {
- "partNumber": 0,
- "size": 0,
- "checksum": {
- "algorithm": "CRC32",
- "type": "FULL_OBJECT",
- "value": "string"
}
}
], - "isTruncated": true,
- "nextPartNumberMarker": 0
}The body is the content; its Content-Type is stored. Larger files use the
multipart endpoints (limit: 64 MiB by default, 413 entity_too_large beyond).
The policies see the condition values of the equivalent S3 PutObject
(s3:x-amz-tagging, s3:RequestObjectTag/
| bucket required | string |
| key required | string Object key. |
| x-amz-tagging | string Tags of the new object, URL-encoded (k1=v1&k2=v2) as the S3 header of the
same name; authorized with s3:RequestObjectTag/ |
| x-amz-server-side-encryption | string Enum: "AES256" "aws:kms" Server-side encryption of the new object, as the S3 header of the same name: AES256 (SSE-S3) or aws:kms (SSE-KMS). Without it the default encryption of the bucket applies. Authorized with s3:x-amz-server-side-encryption; without a KMS configured the upload is refused (501 not_implemented). |
| x-amz-server-side-encryption-aws-kms-key-id | string The KMS key of an SSE-KMS upload (the default key of the KMS when absent); authorized with s3:x-amz-server-side-encryption-aws-kms-key-id. |
{- "key": "string",
- "versionId": "string",
- "size": 0,
- "etag": "string",
- "lastModified": "2019-08-24T14:15:22Z",
- "contentType": "string",
- "isDeleteMarker": true,
- "isLatest": true,
- "storageClass": "string"
}| bucket required | string |
| prefix | string |
| cursor | string Opaque cursor of the next page (nextCursor of the previous one). |
| limit | integer [ 1 .. 1000 ] Page size, 1 to 1000 (default 1000). |
{- "items": [
- {
- "key": "string",
- "uploadId": "string",
- "initiated": "2019-08-24T14:15:22Z"
}
], - "nextCursor": "string"
}The encryption of the object is asked for here, as in the S3 CreateMultipartUpload.
| bucket required | string |
| key required | string Object key. |
| x-amz-tagging | string Tags of the new object, URL-encoded (k1=v1&k2=v2) as the S3 header of the
same name; authorized with s3:RequestObjectTag/ |
| x-amz-server-side-encryption | string Enum: "AES256" "aws:kms" Server-side encryption of the new object, as the S3 header of the same name: AES256 (SSE-S3) or aws:kms (SSE-KMS). Without it the default encryption of the bucket applies. Authorized with s3:x-amz-server-side-encryption; without a KMS configured the upload is refused (501 not_implemented). |
| x-amz-server-side-encryption-aws-kms-key-id | string The KMS key of an SSE-KMS upload (the default key of the KMS when absent); authorized with s3:x-amz-server-side-encryption-aws-kms-key-id. |
| contentType | string |
object |
{- "contentType": "string",
- "userMetadata": {
- "property1": "string",
- "property2": "string"
}
}{- "bucket": "string",
- "key": "string",
- "uploadId": "string",
- "initiated": "2019-08-24T14:15:22Z",
- "partSize": 0,
- "minPartSize": 0,
- "maxPartSize": 0,
- "maxParts": 0
}| bucket required | string |
| uploadId required | string |
| key required | string Object key. |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}| bucket required | string |
| uploadId required | string |
| key required | string Object key. |
| cursor | string Opaque cursor of the next page (nextCursor of the previous one). |
| limit | integer [ 1 .. 1000 ] Page size, 1 to 1000 (default 1000). |
{- "items": [
- {
- "partNumber": 0,
- "etag": "string",
- "size": 0,
- "lastModified": "2019-08-24T14:15:22Z"
}
], - "nextCursor": "string"
}| bucket required | string |
| uploadId required | string |
| partNumber required | integer [ 1 .. 10000 ] |
| key required | string Object key. |
{- "partNumber": 0,
- "etag": "string",
- "size": 0,
- "lastModified": "2019-08-24T14:15:22Z"
}| bucket required | string |
| uploadId required | string |
| key required | string Object key. |
required | Array of objects |
{- "parts": [
- {
- "partNumber": 0,
- "etag": "string"
}
]
}{- "key": "string",
- "versionId": "string",
- "size": 0,
- "etag": "string",
- "lastModified": "2019-08-24T14:15:22Z",
- "contentType": "string",
- "isDeleteMarker": true,
- "isLatest": true,
- "storageClass": "string"
}| cursor | string Opaque cursor of the next page (nextCursor of the previous one). |
| limit | integer [ 1 .. 1000 ] Page size, 1 to 1000 (default 1000). |
{- "items": [
- {
- "accessKey": "string",
- "status": "enabled",
- "policyNames": [
- "string"
], - "groups": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "nextCursor": "string"
}| accessKey required | string |
| secretKey required | string |
| policyNames | Array of strings |
| groups | Array of strings Existing groups the user joins. |
| status | string (CredentialStatus) Enum: "enabled" "disabled" |
{- "accessKey": "string",
- "secretKey": "string",
- "policyNames": [
- "string"
], - "groups": [
- "string"
], - "status": "enabled"
}{- "accessKey": "string",
- "status": "enabled",
- "policyNames": [
- "string"
], - "groups": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}{- "accessKey": "string",
- "status": "enabled",
- "policyNames": [
- "string"
], - "groups": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Each change needs its action: secretKey admin:CreateUser, status admin:EnableUser/admin:DisableUser, policyNames admin:AttachUserOrGroupPolicy, groups admin:GetUser plus admin:AddUserToGroup/admin:RemoveUserFromGroup. A new secretKey, or status disabled, revokes for good the console sessions of the user (and of its access keys) and its managed share links.
| user required | string |
| secretKey | string |
| status | string (CredentialStatus) Enum: "enabled" "disabled" |
| policyNames | Array of strings |
| groups | Array of strings Replaces the group memberships. |
{- "secretKey": "string",
- "status": "enabled",
- "policyNames": [
- "string"
], - "groups": [
- "string"
]
}{- "accessKey": "string",
- "status": "enabled",
- "policyNames": [
- "string"
], - "groups": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Deletes the user with its access keys and STS credentials, then removes the records of its managed share links (their service accounts went with the user).
| user required | string |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}| cursor | string Opaque cursor of the next page (nextCursor of the previous one). |
| limit | integer [ 1 .. 1000 ] Page size, 1 to 1000 (default 1000). |
{- "items": [
- {
- "name": "string",
- "status": "enabled",
- "members": [
- "string"
], - "policyNames": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "nextCursor": "string"
}| name required | string |
| members | Array of strings |
| policyNames | Array of strings |
{- "name": "string",
- "members": [
- "string"
], - "policyNames": [
- "string"
]
}{- "name": "string",
- "status": "enabled",
- "members": [
- "string"
], - "policyNames": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}{- "name": "string",
- "status": "enabled",
- "members": [
- "string"
], - "policyNames": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}| group required | string |
| status | string (CredentialStatus) Enum: "enabled" "disabled" |
| policyNames | Array of strings |
| addMembers | Array of strings |
| removeMembers | Array of strings |
{- "status": "enabled",
- "policyNames": [
- "string"
], - "addMembers": [
- "string"
], - "removeMembers": [
- "string"
]
}{- "name": "string",
- "status": "enabled",
- "members": [
- "string"
], - "policyNames": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}The caller's own keys always; those of other users (or every key, without user) with admin:ListServiceAccounts.
| user | string |
| cursor | string Opaque cursor of the next page (nextCursor of the previous one). |
| limit | integer [ 1 .. 1000 ] Page size, 1 to 1000 (default 1000). |
{- "items": [
- {
- "accessKey": "string",
- "parentUser": "string",
- "name": "string",
- "description": "string",
- "status": "enabled",
- "expiration": "2019-08-24T14:15:22Z",
- "policy": {
- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "nextCursor": "string"
}| parentUser | string Owner of the key; defaults to the caller. Naming another user requires admin:CreateServiceAccount. |
| accessKey | string Generated when empty. |
| secretKey | string Generated when empty. |
| name | string |
| description | string |
| expiration | string <date-time> |
object (PolicyDocument) An IAM or bucket policy in the AWS JSON format. |
{- "parentUser": "string",
- "accessKey": "string",
- "secretKey": "string",
- "name": "string",
- "description": "string",
- "expiration": "2019-08-24T14:15:22Z",
- "policy": {
- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}
}{- "accessKey": "string",
- "parentUser": "string",
- "name": "string",
- "description": "string",
- "status": "enabled",
- "expiration": "2019-08-24T14:15:22Z",
- "policy": {
- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "secretKey": "string"
}{- "accessKey": "string",
- "parentUser": "string",
- "name": "string",
- "description": "string",
- "status": "enabled",
- "expiration": "2019-08-24T14:15:22Z",
- "policy": {
- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Status disabled revokes for good the console sessions of the key and the managed share links created with it; enabling it again restores neither.
| key required | string |
| secretKey | string |
| name | string |
| description | string |
| status | string (CredentialStatus) Enum: "enabled" "disabled" |
| expiration | string <date-time> |
| clearExpiration | boolean Remove the expiration. |
object (PolicyDocument) An IAM or bucket policy in the AWS JSON format. | |
| clearPolicy | boolean Remove the inline policy. |
{- "secretKey": "string",
- "name": "string",
- "description": "string",
- "status": "enabled",
- "expiration": "2019-08-24T14:15:22Z",
- "clearExpiration": true,
- "policy": {
- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}, - "clearPolicy": true
}{- "accessKey": "string",
- "parentUser": "string",
- "name": "string",
- "description": "string",
- "status": "enabled",
- "expiration": "2019-08-24T14:15:22Z",
- "policy": {
- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}| cursor | string Opaque cursor of the next page (nextCursor of the previous one). |
| limit | integer [ 1 .. 1000 ] Page size, 1 to 1000 (default 1000). |
{- "items": [
- {
- "name": "string",
- "document": {
- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}, - "builtIn": true,
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "nextCursor": "string"
}409 conflict when the name exists; malformed documents are malformed_policy problems with their position.
| name required | string |
required | object or string (PolicyDocumentOrText) |
{- "name": "string",
- "document": {
- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}
}{- "name": "string",
- "document": {
- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}, - "builtIn": true,
- "updatedAt": "2019-08-24T14:15:22Z"
}| policyNames required | Array of strings |
| user | string |
| group | string |
{- "policyNames": [
- "string"
], - "user": "string",
- "group": "string"
}{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}| policyNames required | Array of strings |
| user | string |
| group | string |
{- "policyNames": [
- "string"
], - "user": "string",
- "group": "string"
}{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}| user | string Access key to simulate (user or service account); the caller by default. |
| action required | string |
| bucket | string |
| object | string |
| sourceIp | string |
| secureTransport | boolean |
| time | string <date-time> |
object Other condition values (aws:Referer, s3:prefix...). |
{- "user": "string",
- "action": "string",
- "bucket": "string",
- "object": "string",
- "sourceIp": "string",
- "secureTransport": true,
- "time": "2019-08-24T14:15:22Z",
- "conditions": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}
}{- "user": "string",
- "action": "string",
- "bucket": "string",
- "object": "string",
- "allowed": true,
- "decision": "allow",
- "reason": "string",
- "source": "root",
- "policyName": "string",
- "group": "string",
- "statement": {
- "source": "root",
- "policyName": "string",
- "group": "string",
- "index": 0,
- "sid": "string",
- "effect": "Allow",
- "matched": true,
- "mismatch": "principal",
- "statement": {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
}, - "evaluated": [
- {
- "source": "root",
- "policyName": "string",
- "group": "string",
- "index": 0,
- "sid": "string",
- "effect": "Allow",
- "matched": true,
- "mismatch": "principal",
- "statement": {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
}
]
}required | object or string (PolicyDocumentOrText) |
| bucket | string Validate a bucket policy of this bucket. |
{- "document": {
- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}, - "bucket": "string"
}{- "valid": true,
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
]
}{- "name": "string",
- "document": {
- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}, - "builtIn": true,
- "updatedAt": "2019-08-24T14:15:22Z"
}| policy required | string |
required | object or string (PolicyDocumentOrText) |
{- "document": {
- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}
}{- "name": "string",
- "document": {
- "Id": "string",
- "Version": "string",
- "Statement": [
- {
- "Sid": "string",
- "Effect": "Allow",
- "Principal": "string",
- "NotPrincipal": "string",
- "Action": "string",
- "NotAction": "string",
- "Resource": "string",
- "NotResource": "string",
- "Condition": {
- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}
}
]
}, - "builtIn": true,
- "updatedAt": "2019-08-24T14:15:22Z"
}{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}additional property | object (ConfigSettings) |
{- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}[- {
- "name": "string",
- "description": "string",
- "keys": [
- {
- "name": "string",
- "type": "string",
- "description": "string",
- "default": "string",
- "values": [
- "string"
], - "sensitive": true,
- "applied": true
}
]
}
]additional property | object (ConfigSettings) |
{- "property1": {
- "property1": "string",
- "property2": "string"
}, - "property2": {
- "property1": "string",
- "property2": "string"
}
}{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}| subsys required | string A subsystem of GET /config/schema (api, browser, logger, notify_webhook, region, scanner). |
{- "name": "string",
- "settings": {
- "property1": "string",
- "property2": "string"
}
}Merges the settings; a masked sensitive value keeps the stored secret.
| subsys required | string A subsystem of GET /config/schema (api, browser, logger, notify_webhook, region, scanner). |
required | object (ConfigSettings) |
{- "settings": {
- "property1": "string",
- "property2": "string"
}
}{- "name": "string",
- "settings": {
- "property1": "string",
- "property2": "string"
}
}| subsys required | string A subsystem of GET /config/schema (api, browser, logger, notify_webhook, region, scanner). |
| keys | string Comma separated keys to remove; absent removes the whole subsystem. |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}A versioned zip archive (manifest.json, iam.bin, policies.json, config.json, buckets/nexoctl mirror for the objects it migrates a deployment to another mode.
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}The whole archive is validated first (format, version, policies, configuration, bucket names); with dryRun the import stops there and reports what it would do. It then applies the configuration, the named policies, the IAM state (the target must share the root credentials of the source) and the bucket settings, creating the missing buckets. merge (default) keeps what the archive does not hold; replace also replaces the whole configuration and removes the users, groups and named policies the archive does not hold and the settings of the archived buckets it does not set (buckets are never removed).
| mode | string Enum: "merge" "replace" |
| dryRun | boolean |
{- "mode": "merge",
- "dryRun": true,
- "users": 0,
- "groups": 0,
- "policies": 0,
- "configSubsystems": 0,
- "buckets": 0,
- "bucketsCreated": [
- "string"
], - "removed": [
- "string"
]
}[- {
- "resource": "string",
- "uid": "string",
- "owner": "string",
- "source": "string",
- "type": "write",
- "quorum": 0,
- "since": "2019-08-24T14:15:22Z",
- "refreshed": "2019-08-24T14:15:22Z",
- "servers": 0,
- "total": 0
}
]Diagnostics of stuck locks (admin lock clear). An operation holding a released lock loses it at its next lease renewal and stops before its commit.
| resource required | Array of strings A resource to release ("bucket/key"); repeatable. |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}The targets of the notify_* subsystems of the configuration (disabled ones included), with the state the answering node sees: online (no failed delivery since the last success) and the events pending in its persistent queue. The ARN is what the event subscriptions name.
{- "items": [
- {
- "id": "string",
- "type": "webhook",
- "arn": "string",
- "enabled": true,
- "endpoint": "string",
- "online": true,
- "pendingEvents": 0,
- "lastError": "string"
}
]
}Delivers an s3:TestEvent at once, outside of the queue of the target, and reports the
outcome (a failed delivery is a 200 with delivered: false), which also updates the
state of the target. A namespace target (Redis, PostgreSQL) gets no entry.
| id required | string " |
{- "target": "string",
- "delivered": true,
- "error": "string"
}The KMS that seals the keys of the SSE-S3 and SSE-KMS objects: the builtin KMS (master key NEXO_KMS_SECRET_KEY) or the external KES servers (NEXO_KMS_ENDPOINT). Without KMS configured is false and SSE-S3/SSE-KMS are refused (SSE-C still works).
{- "configured": true,
- "backend": "builtin",
- "defaultKeyId": "string",
- "endpoints": [
- {
- "url": "string",
- "online": true
}
], - "online": true,
- "error": "string",
- "version": "string"
}Creates a key usable as SSE-KMS key id (x-amz-server-side-encryption-aws-kms-key-id) and as default key of a bucket encryption; 409 when it exists, 501 without KMS.
| id required | string |
{- "id": "string"
}{- "id": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "default": true
}After a rotation of the master key of the KMS (the previous key in NEXO_KMS_SECRET_KEY_PREVIOUS), re-seals the data key of every SSE-S3 and SSE-KMS version of the bucket (every bucket without one) under the current master key; the data is not rewritten. Once every bucket is re-sealed the previous master keys can be removed. The versions that cannot be re-sealed are counted. 501 without KMS.
| bucket | string Only the objects of this bucket. |
{- "buckets": 0,
- "versions": 0,
- "uploads": 0,
- "resealed": 0,
- "failed": 0,
- "firstError": "string"
}The access rules of the bucket (docs/10 §10.1): prefix, glob and RE2 regex patterns
of the keys, principals, actions, conditions and priorities, evaluated by the
policy engine next to the bucket policy. The ETag header (and etag) identify
the version of the rules for the If-Match of PUT. A bucket without rules
answers an empty list.
| bucket required | string |
{- "bucket": "string",
- "rules": [
- {
- "id": "string",
- "priority": 0,
- "effect": "allow",
- "principals": [
- "string"
], - "actions": [
- "string"
], - "match": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "conditions": {
- "sourceIp": [
- "string"
], - "notSourceIp": [
- "string"
], - "referer": [
- "string"
], - "host": [
- "string"
], - "secureTransport": true,
- "timeWindow": {
- "from": "string",
- "to": "string"
}, - "methods": [
- "string"
], - "headers": {
- "property1": "string",
- "property2": "string"
}, - "captureEquals": {
- "property1": "string",
- "property2": "string"
}
}, - "description": "string"
}
], - "etag": "string",
- "updatedAt": "2019-08-24T14:15:22Z",
- "updatedBy": "string",
- "public": true,
- "blockPublic": true,
- "warnings": [
- "string"
]
}Validates every rule (pattern compiled at once, at most --access-rules-max
rules per bucket, 200 by default) and replaces the rules of the bucket in one
change, propagated to every node. With If-Match the change applies only to the
version of the rules with that ETag (412 precondition_failed otherwise). An
invalid rule answers 400 invalid_access_rule (too many: too_many_access_rules)
with the rule, the field and the position of the problem in the pattern in
accessRuleErrors; an allow rule for everyone while the block public access is
on in the reject mode answers 403 public_access_blocked. Every change is audited.
| bucket required | string |
| If-Match | string The ETag of the version the change applies to (quoted or not); a different
current version answers 412 |
required | Array of objects (BucketAccessRule) Every rule of the bucket; an empty list removes them. |
{- "rules": [
- {
- "id": "string",
- "priority": 0,
- "effect": "allow",
- "principals": [
- "string"
], - "actions": [
- "string"
], - "match": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "conditions": {
- "sourceIp": [
- "string"
], - "notSourceIp": [
- "string"
], - "referer": [
- "string"
], - "host": [
- "string"
], - "secureTransport": true,
- "timeWindow": {
- "from": "string",
- "to": "string"
}, - "methods": [
- "string"
], - "headers": {
- "property1": "string",
- "property2": "string"
}, - "captureEquals": {
- "property1": "string",
- "property2": "string"
}
}, - "description": "string"
}
]
}{- "bucket": "string",
- "rules": [
- {
- "id": "string",
- "priority": 0,
- "effect": "allow",
- "principals": [
- "string"
], - "actions": [
- "string"
], - "match": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "conditions": {
- "sourceIp": [
- "string"
], - "notSourceIp": [
- "string"
], - "referer": [
- "string"
], - "host": [
- "string"
], - "secureTransport": true,
- "timeWindow": {
- "from": "string",
- "to": "string"
}, - "methods": [
- "string"
], - "headers": {
- "property1": "string",
- "property2": "string"
}, - "captureEquals": {
- "property1": "string",
- "property2": "string"
}
}, - "description": "string"
}
], - "etag": "string",
- "updatedAt": "2019-08-24T14:15:22Z",
- "updatedBy": "string",
- "public": true,
- "blockPublic": true,
- "warnings": [
- "string"
]
}Evaluates the requests of a principal on keys of the bucket with every source of
the policy engine (IAM, bucket policy, access rules), without performing them: for
each key the rules that match, the outcome of the rules alone, the final decision
and the rule that determined it (docs/10 D-ACC-02, nexoctl access test). The
keys are matched after their normalization (normalizedKey). Authorized by the
service: admin:ManageAccessRules on the bucket and, to test the requests of
another identity than the caller's, admin:SimulatePolicy.
| bucket required | string |
| keys | Array of strings Keys to test (the listing prefixes of a listing action); none tests the bucket. |
| action | string An action class (read, list, write, delete, tag) or an S3 action; default read. |
| principal | string
|
| ip | string Client address. |
| host | string Host the request is addressed to. |
| method | string HTTP method (default derived from the action). |
| secure | boolean HTTPS (absent - unknown). |
| referer | string |
object | |
| distribution | string Distribution serving the request. |
| time | string <date-time> Time of the request (default now). |
{- "keys": [
- "string"
], - "action": "string",
- "principal": "string",
- "ip": "string",
- "host": "string",
- "method": "string",
- "secure": true,
- "referer": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "distribution": "string",
- "time": "2019-08-24T14:15:22Z"
}{- "bucket": "string",
- "action": "string",
- "blockPublic": {
- "bucket": "string",
- "enabled": true,
- "mode": "reject",
- "cluster": true,
- "effective": true
}, - "results": [
- {
- "key": "string",
- "normalizedKey": "string",
- "rules": [
- {
- "id": "string",
- "priority": 0,
- "effect": "Allow",
- "captures": {
- "property1": "string",
- "property2": "string"
}, - "matched": true,
- "mismatch": "principal",
- "condition": "string"
}
], - "matched": [
- "string"
], - "blockedPublic": [
- "string"
], - "rulesOutcome": "allow",
- "allowed": true,
- "determinant": "string",
- "source": "string",
- "reason": "string"
}
]
}Replaces the rules generated by the presets (ids starting with preset-) with those
of the preset: private (also removes every allow rule for everyone),
public-read, public-read-list, public-prefix (with match) and
public-write (with confirm: 400 confirmation_required otherwise). The other
rules are kept. If-Match as for PUT /buckets/{bucket}/access-rules.
| bucket required | string |
| If-Match | string The ETag of the version the change applies to (quoted or not); a different
current version answers 412 |
| preset required | string (AccessRulesPreset) Enum: "private" "public-read" "public-read-list" "public-prefix" "public-write" "custom" |
object The keys of public-prefix (required) and public-write (optional). | |
| confirm | boolean Acknowledges public-write. |
{- "preset": "private",
- "match": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "confirm": true
}{- "bucket": "string",
- "rules": [
- {
- "id": "string",
- "priority": 0,
- "effect": "allow",
- "principals": [
- "string"
], - "actions": [
- "string"
], - "match": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "conditions": {
- "sourceIp": [
- "string"
], - "notSourceIp": [
- "string"
], - "referer": [
- "string"
], - "host": [
- "string"
], - "secureTransport": true,
- "timeWindow": {
- "from": "string",
- "to": "string"
}, - "methods": [
- "string"
], - "headers": {
- "property1": "string",
- "property2": "string"
}, - "captureEquals": {
- "property1": "string",
- "property2": "string"
}
}, - "description": "string"
}
], - "etag": "string",
- "updatedAt": "2019-08-24T14:15:22Z",
- "updatedBy": "string",
- "public": true,
- "blockPublic": true,
- "warnings": [
- "string"
]
}The mode is a setting of the cluster (PUT /access/block-public); a mode here is 400.
| bucket required | string |
| enabled required | boolean |
| mode | string Enum: "reject" "ignore" Cluster level only; absent keeps it. |
{- "enabled": true,
- "mode": "reject"
}{- "bucket": "string",
- "enabled": true,
- "mode": "reject",
- "cluster": true,
- "effective": true
}While on, the principal * of the allow rules of every bucket is ignored and, in
the reject mode, such a rule is refused when saved (the stored ones are
ignored); in the ignore mode they are accepted and ignored. Deny rules for
everyone are never affected. Stored in the dynamic configuration (subsystem
access), it applies to every node without restart.
| enabled required | boolean |
| mode | string Enum: "reject" "ignore" Cluster level only; absent keeps it. |
{- "enabled": true,
- "mode": "reject"
}{- "bucket": "string",
- "enabled": true,
- "mode": "reject",
- "cluster": true,
- "effective": true
}{- "items": [
- {
- "id": "string",
- "enabled": true,
- "comment": "string",
- "aliases": [
- "string"
], - "origin": {
- "bucket": "string",
- "pathPrefix": "string",
- "versionPinning": true
}, - "mode": "website",
- "defaultBehavior": {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "behaviors": [
- {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}
], - "errorPages": [
- {
- "status": 0,
- "path": "string",
- "responseStatus": 0
}
], - "redirects": [
- {
- "from": "string",
- "to": "string",
- "hostFrom": "string",
- "toHost": "string",
- "httpsOnly": true,
- "status": 0
}
], - "headers": {
- "response": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "restrictions": {
- "sourceIp": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "originSecretHeader": {
- "name": "string",
- "value": "string",
- "values": [
- "string"
]
}, - "rateLimit": {
- "requestsPerSecond": 0,
- "burst": 0,
- "per": "ip"
}
}, - "tls": {
- "certificate": "string",
- "challenge": "http-01",
- "dnsProvider": "string"
}, - "logging": {
- "accessLog": true,
- "format": "json",
- "target": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}
]
}Validates and stores the distribution (docs/10 §10.2); the routing table of every
node is updated without restart. An alias used by another distribution (or the S3
and console domains) answers 409 alias_conflict, an invalid distribution 400
invalid_distribution. admin:ManageDistributions is also evaluated on the origin
bucket: an explicit Deny on a bucket keeps it from being exposed. Origin secrets
given in clear are stored hashed.
| id required | string Lowercase letters, digits, '.', '_' and '-' (at most 64). |
| enabled | boolean |
| comment | string |
| aliases required | Array of strings Host names, exact or wildcard ( |
required | object |
| mode | string (DistributionMode) Enum: "website" "s3" website (static sites, downloads; never S3 XML) or s3 (the domain is an S3 endpoint of the bucket). |
object (DistributionBehavior) How the requests of a path are served; an unset field inherits from the default behavior. | |
Array of objects (DistributionBehavior) Evaluated in order, the first match wins. | |
Array of objects | |
Array of objects | |
object | |
object | |
object | |
object | |
| createdAt | string <date-time> |
| updatedAt | string <date-time> |
| etag | string The stored version (If-Match of PUT); ignored in requests. |
{- "id": "string",
- "enabled": true,
- "comment": "string",
- "aliases": [
- "string"
], - "origin": {
- "bucket": "string",
- "pathPrefix": "string",
- "versionPinning": true
}, - "mode": "website",
- "defaultBehavior": {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "behaviors": [
- {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}
], - "errorPages": [
- {
- "status": 0,
- "path": "string",
- "responseStatus": 0
}
], - "redirects": [
- {
- "from": "string",
- "to": "string",
- "hostFrom": "string",
- "toHost": "string",
- "httpsOnly": true,
- "status": 0
}
], - "headers": {
- "response": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "restrictions": {
- "sourceIp": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "originSecretHeader": {
- "name": "string",
- "value": "string",
- "values": [
- "string"
]
}, - "rateLimit": {
- "requestsPerSecond": 0,
- "burst": 0,
- "per": "ip"
}
}, - "tls": {
- "certificate": "string",
- "challenge": "http-01",
- "dnsProvider": "string"
}, - "logging": {
- "accessLog": true,
- "format": "json",
- "target": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}{- "id": "string",
- "enabled": true,
- "comment": "string",
- "aliases": [
- "string"
], - "origin": {
- "bucket": "string",
- "pathPrefix": "string",
- "versionPinning": true
}, - "mode": "website",
- "defaultBehavior": {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "behaviors": [
- {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}
], - "errorPages": [
- {
- "status": 0,
- "path": "string",
- "responseStatus": 0
}
], - "redirects": [
- {
- "from": "string",
- "to": "string",
- "hostFrom": "string",
- "toHost": "string",
- "httpsOnly": true,
- "status": 0
}
], - "headers": {
- "response": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "restrictions": {
- "sourceIp": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "originSecretHeader": {
- "name": "string",
- "value": "string",
- "values": [
- "string"
]
}, - "rateLimit": {
- "requestsPerSecond": 0,
- "burst": 0,
- "per": "ip"
}
}, - "tls": {
- "certificate": "string",
- "challenge": "http-01",
- "dnsProvider": "string"
}, - "logging": {
- "accessLog": true,
- "format": "json",
- "target": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}| id required | string Id of the distribution. |
{- "id": "string",
- "enabled": true,
- "comment": "string",
- "aliases": [
- "string"
], - "origin": {
- "bucket": "string",
- "pathPrefix": "string",
- "versionPinning": true
}, - "mode": "website",
- "defaultBehavior": {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "behaviors": [
- {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}
], - "errorPages": [
- {
- "status": 0,
- "path": "string",
- "responseStatus": 0
}
], - "redirects": [
- {
- "from": "string",
- "to": "string",
- "hostFrom": "string",
- "toHost": "string",
- "httpsOnly": true,
- "status": 0
}
], - "headers": {
- "response": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "restrictions": {
- "sourceIp": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "originSecretHeader": {
- "name": "string",
- "value": "string",
- "values": [
- "string"
]
}, - "rateLimit": {
- "requestsPerSecond": 0,
- "burst": 0,
- "per": "ip"
}
}, - "tls": {
- "certificate": "string",
- "challenge": "http-01",
- "dnsProvider": "string"
}, - "logging": {
- "accessLog": true,
- "format": "json",
- "target": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}Replaces the whole document (its id is the one of the path). With If-Match the
change applies only to the version with that ETag (412 otherwise).
admin:ManageDistributions is also evaluated on the current and the new origin
buckets.
| id required | string Id of the distribution. |
| If-Match | string The ETag of the version the change applies to (quoted or not); a different
current version answers 412 |
| id required | string Lowercase letters, digits, '.', '_' and '-' (at most 64). |
| enabled | boolean |
| comment | string |
| aliases required | Array of strings Host names, exact or wildcard ( |
required | object |
| mode | string (DistributionMode) Enum: "website" "s3" website (static sites, downloads; never S3 XML) or s3 (the domain is an S3 endpoint of the bucket). |
object (DistributionBehavior) How the requests of a path are served; an unset field inherits from the default behavior. | |
Array of objects (DistributionBehavior) Evaluated in order, the first match wins. | |
Array of objects | |
Array of objects | |
object | |
object | |
object | |
object | |
| createdAt | string <date-time> |
| updatedAt | string <date-time> |
| etag | string The stored version (If-Match of PUT); ignored in requests. |
{- "id": "string",
- "enabled": true,
- "comment": "string",
- "aliases": [
- "string"
], - "origin": {
- "bucket": "string",
- "pathPrefix": "string",
- "versionPinning": true
}, - "mode": "website",
- "defaultBehavior": {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "behaviors": [
- {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}
], - "errorPages": [
- {
- "status": 0,
- "path": "string",
- "responseStatus": 0
}
], - "redirects": [
- {
- "from": "string",
- "to": "string",
- "hostFrom": "string",
- "toHost": "string",
- "httpsOnly": true,
- "status": 0
}
], - "headers": {
- "response": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "restrictions": {
- "sourceIp": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "originSecretHeader": {
- "name": "string",
- "value": "string",
- "values": [
- "string"
]
}, - "rateLimit": {
- "requestsPerSecond": 0,
- "burst": 0,
- "per": "ip"
}
}, - "tls": {
- "certificate": "string",
- "challenge": "http-01",
- "dnsProvider": "string"
}, - "logging": {
- "accessLog": true,
- "format": "json",
- "target": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}{- "id": "string",
- "enabled": true,
- "comment": "string",
- "aliases": [
- "string"
], - "origin": {
- "bucket": "string",
- "pathPrefix": "string",
- "versionPinning": true
}, - "mode": "website",
- "defaultBehavior": {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "behaviors": [
- {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}
], - "errorPages": [
- {
- "status": 0,
- "path": "string",
- "responseStatus": 0
}
], - "redirects": [
- {
- "from": "string",
- "to": "string",
- "hostFrom": "string",
- "toHost": "string",
- "httpsOnly": true,
- "status": 0
}
], - "headers": {
- "response": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "restrictions": {
- "sourceIp": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "originSecretHeader": {
- "name": "string",
- "value": "string",
- "values": [
- "string"
]
}, - "rateLimit": {
- "requestsPerSecond": 0,
- "burst": 0,
- "per": "ip"
}
}, - "tls": {
- "certificate": "string",
- "challenge": "http-01",
- "dnsProvider": "string"
}, - "logging": {
- "accessLog": true,
- "format": "json",
- "target": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}| id required | string Id of the distribution. |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}Without reading the object: the route of the host, the behavior that matches the
path (-1 for the default one) with its inherited fields resolved (access,
methods, cache), the object of the path, the redirection or the refusal, and the
headers of the response (docs/10 D-DST-03, nexoctl dist test). A path is
completed with https and the first exact alias; a URL whose host is not an alias
of the distribution is 400.
| id required | string Id of the distribution. |
| url required | string An absolute URL on an alias of the distribution, or a path. |
| method | string Default GET. |
| clientIp | string |
{- "url": "string",
- "method": "string",
- "clientIp": "string"
}{- "route": {
- "kind": "distribution",
- "host": "string",
- "alias": "string",
- "distribution": "string",
- "mode": "website",
- "enabled": true,
- "bucket": "string"
}, - "behaviorIndex": 0,
- "behavior": {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "bucket": "string",
- "key": "string",
- "redirectStatus": 0,
- "redirectLocation": "string",
- "refusalStatus": 0,
- "refusal": "string",
- "responseHeaders": {
- "property1": "string",
- "property2": "string"
}
}Generates a new origin secret, returned in clear once (stored hashed), and keeps
the most recent previous ones active (keep, default 1) so that the proxies are
updated without downtime; the requests without one of the active secrets in the
header are refused.
| id required | string Id of the distribution. |
| header | string Default the current header, or X-Origin-Secret. |
| keep | integer >= 0 Previous secrets kept active (default 1). |
| dropPrevious | boolean |
{- "header": "string",
- "keep": 0,
- "dropPrevious": true
}{- "secret": "string",
- "header": "string",
- "distribution": {
- "id": "string",
- "enabled": true,
- "comment": "string",
- "aliases": [
- "string"
], - "origin": {
- "bucket": "string",
- "pathPrefix": "string",
- "versionPinning": true
}, - "mode": "website",
- "defaultBehavior": {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "behaviors": [
- {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "access": "public",
- "allowedMethods": [
- "string"
], - "indexDocument": "string",
- "spaFallback": "string",
- "cache": {
- "cacheControl": "string"
}, - "signing": {
- "keyGroup": "string"
}, - "responseHeaders": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}
], - "errorPages": [
- {
- "status": 0,
- "path": "string",
- "responseStatus": 0
}
], - "redirects": [
- {
- "from": "string",
- "to": "string",
- "hostFrom": "string",
- "toHost": "string",
- "httpsOnly": true,
- "status": 0
}
], - "headers": {
- "response": {
- "property1": "string",
- "property2": "string"
}, - "cors": {
- "allowedOrigins": [
- "string"
], - "allowedMethods": [
- "string"
], - "allowedHeaders": [
- "string"
], - "exposeHeaders": [
- "string"
], - "maxAge": 0,
- "allowCredentials": true
}
}, - "restrictions": {
- "sourceIp": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "originSecretHeader": {
- "name": "string",
- "value": "string",
- "values": [
- "string"
]
}, - "rateLimit": {
- "requestsPerSecond": 0,
- "burst": 0,
- "per": "ip"
}
}, - "tls": {
- "certificate": "string",
- "challenge": "http-01",
- "dnsProvider": "string"
}, - "logging": {
- "accessLog": true,
- "format": "json",
- "target": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}
}CloudFront-style signed URL (?Expires=&Signature=&Key-Pair-Id=, or ?Policy=
for a custom policy with resource, notBefore or ipRange) or signed cookies
(cookies: true) for the URL, which a signed behavior of the distribution must
serve. The server never stores the private keys: the caller sends the private key
of a key of the key group of the behavior (its key pair id is found from the key
when not given). Exactly one of expiresIn and expiresAt.
| id required | string Id of the distribution. |
| url required | string An absolute URL on an alias, or a path completed with scheme and host. |
| scheme | string Enum: "http" "https" |
| host | string Default the first exact alias. |
| privateKeyPem required | string PKCS 8 (or PKCS 1 RSA) private key of a key of the key group. |
| keyPairId | string |
| expiresIn | integer >= 1 Seconds from now. |
| expiresAt | string <date-time> |
| notBefore | string <date-time> |
| ipRange | string IP or CIDR of the viewers. |
| resource | string URL with * and ? wildcards (default the URL). |
| cookies | boolean |
{- "url": "string",
- "scheme": "http",
- "host": "string",
- "privateKeyPem": "string",
- "keyPairId": "string",
- "expiresIn": 1,
- "expiresAt": "2019-08-24T14:15:22Z",
- "notBefore": "2019-08-24T14:15:22Z",
- "ipRange": "string",
- "resource": "string",
- "cookies": true
}{- "url": "string",
- "cookies": [
- {
- "name": "string",
- "value": "string",
- "expires": "2019-08-24T14:15:22Z"
}
], - "keyGroup": "string",
- "keyPairId": "string",
- "expiresAt": "2019-08-24T14:15:22Z"
}{- "items": [
- {
- "id": "string",
- "comment": "string",
- "keys": [
- {
- "id": "string",
- "algorithm": "ed25519",
- "bits": 0,
- "publicKeyPem": "string",
- "comment": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
}With generateKey, its first key pair is generated: the private key is in the
answer once and never stored (docs/10: "downloadable only once").
| id required | string |
| comment | string |
object (GenerateKeyRequest) |
{- "id": "string",
- "comment": "string",
- "generateKey": {
- "algorithm": "ed25519",
- "bits": 0,
- "comment": "string"
}
}{- "keyGroup": {
- "id": "string",
- "comment": "string",
- "keys": [
- {
- "id": "string",
- "algorithm": "ed25519",
- "bits": 0,
- "publicKeyPem": "string",
- "comment": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "key": {
- "publicKey": {
- "id": "string",
- "algorithm": "ed25519",
- "bits": 0,
- "publicKeyPem": "string",
- "comment": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}, - "privateKeyPem": "string"
}
}| id required | string Id of the key group. |
{- "id": "string",
- "comment": "string",
- "keys": [
- {
- "id": "string",
- "algorithm": "ed25519",
- "bits": 0,
- "publicKeyPem": "string",
- "comment": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}| id required | string Id of the key group. |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}| id required | string Id of the key group. |
{- "items": [
- {
- "id": "string",
- "algorithm": "ed25519",
- "bits": 0,
- "publicKeyPem": "string",
- "comment": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
]
}A public key provided by the user (publicKeyPem, PKIX, Ed25519 or RSA of 2048 to
4096 bits), or a key pair generated by the server whose private key is in the
answer once. Several keys sign at once: a new key is added before the old one is
removed (rotation without downtime).
| id required | string Id of the key group. |
| publicKeyPem | string A PKIX public key; absent generates a key pair. |
| algorithm | string Enum: "ed25519" "rsa" |
| bits | integer |
| comment | string |
{- "publicKeyPem": "string",
- "algorithm": "ed25519",
- "bits": 0,
- "comment": "string"
}{- "publicKey": {
- "id": "string",
- "algorithm": "ed25519",
- "bits": 0,
- "publicKeyPem": "string",
- "comment": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}, - "privateKeyPem": "string"
}| id required | string Id of the key group. |
| key required | string Key pair id (Key-Pair-Id of the signed URLs). |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}The resolution of the routing table of the answering node: an exact alias, then
the most specific wildcard alias of a distribution, <bucket>.<domain>
(virtual-host), the S3 and console domains (main), otherwise the path-style S3 API
(or 421, misdirected, when the deployment asks for it).
| host required | string The host, with or without port. |
{- "kind": "distribution",
- "host": "string",
- "alias": "string",
- "distribution": "string",
- "mode": "website",
- "enabled": true,
- "bucket": "string"
}The uploaded and ACME certificates (never their keys) with their status (expiring
within 21 days), the distributions using them, and the ACME certificates of the
distributions with tls.certificate: auto, obtained or pending (the leader orders
and renews them).
{- "items": [
- {
- "id": "string",
- "source": "upload",
- "domains": [
- "string"
], - "subject": "string",
- "issuer": "string",
- "serial": "string",
- "notBefore": "2019-08-24T14:15:22Z",
- "notAfter": "2019-08-24T14:15:22Z",
- "fingerprint": "string",
- "status": "valid",
- "lastError": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "usedBy": [
- "string"
]
}
], - "acme": {
- "directory": "string",
- "challenge": "http-01",
- "managed": [
- {
- "id": "string",
- "domains": [
- "string"
], - "distributions": [
- "string"
], - "challenge": "http-01",
- "dnsProvider": "string",
- "state": "issued",
- "certificate": {
- "id": "string",
- "source": "upload",
- "domains": [
- "string"
], - "subject": "string",
- "issuer": "string",
- "serial": "string",
- "notBefore": "2019-08-24T14:15:22Z",
- "notAfter": "2019-08-24T14:15:22Z",
- "fingerprint": "string",
- "status": "valid",
- "lastError": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
}
]
}
}The leaf certificate followed by its intermediates and its private key, validated
(chain linkage, key matching the leaf, DNS names, validity: 400
invalid_certificate), stored sealed and served by SNI on every node. A
certificate of the same id is replaced. Distributions use it with
tls.certificate: upload:<id>.
| id | string Default derived from the first DNS name. |
| certificatePem required | string Leaf certificate followed by its intermediates. |
| privateKeyPem required | string |
{- "id": "string",
- "certificatePem": "string",
- "privateKeyPem": "string"
}{- "id": "string",
- "source": "upload",
- "domains": [
- "string"
], - "subject": "string",
- "issuer": "string",
- "serial": "string",
- "notBefore": "2019-08-24T14:15:22Z",
- "notAfter": "2019-08-24T14:15:22Z",
- "fingerprint": "string",
- "status": "valid",
- "lastError": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "usedBy": [
- "string"
]
}{- "id": "string",
- "source": "upload",
- "domains": [
- "string"
], - "subject": "string",
- "issuer": "string",
- "serial": "string",
- "notBefore": "2019-08-24T14:15:22Z",
- "notAfter": "2019-08-24T14:15:22Z",
- "fingerprint": "string",
- "status": "valid",
- "lastError": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "usedBy": [
- "string"
]
}| id required | string |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}The DNS providers (Cloudflare, AWS Route 53, RFC 2136) that publish the TXT records
of the DNS-01 challenge, required by the wildcard aliases. Their credentials are
sealed in the system store and never returned (hasCredentials reports them).
{- "items": [
- {
- "type": "cloudflare",
- "comment": "string",
- "cloudflare": {
- "zoneId": "string"
}, - "route53": {
- "accessKeyId": "string",
- "region": "string",
- "hostedZoneId": "string"
}, - "rfc2136": {
- "nameserver": "string",
- "zone": "string",
- "tsigKeyName": "string",
- "tsigAlgorithm": "hmac-sha256"
}, - "ttl": 0,
- "propagationTimeout": 0,
- "pollingInterval": 0,
- "name": "string",
- "hasCredentials": true,
- "usedBy": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
}Validated (400 invalid_dns_provider; 409 dns_provider_exists for a name taken).
Only the settings and credentials of its type are kept.
| type required | string (DnsProviderType) Enum: "cloudflare" "route53" "rfc2136" |
| comment | string |
object | |
object | |
object | |
| ttl | integer TTL of the records in seconds (default 60). |
| propagationTimeout | integer Wait of the propagation in seconds (default 120, at most 1800). |
| pollingInterval | integer Delay between two checks in seconds (default 4). |
| name | string Required to create; the one of the path to update. |
object Write-only, sealed in the system store, never returned nor logged. On an update an empty field keeps the stored value. |
{- "type": "cloudflare",
- "comment": "string",
- "cloudflare": {
- "zoneId": "string"
}, - "route53": {
- "accessKeyId": "string",
- "region": "string",
- "hostedZoneId": "string"
}, - "rfc2136": {
- "nameserver": "string",
- "zone": "string",
- "tsigKeyName": "string",
- "tsigAlgorithm": "hmac-sha256"
}, - "ttl": 0,
- "propagationTimeout": 0,
- "pollingInterval": 0,
- "name": "string",
- "credentials": {
- "apiToken": "string",
- "secretAccessKey": "string",
- "sessionToken": "string",
- "tsigSecret": "string"
}
}{- "type": "cloudflare",
- "comment": "string",
- "cloudflare": {
- "zoneId": "string"
}, - "route53": {
- "accessKeyId": "string",
- "region": "string",
- "hostedZoneId": "string"
}, - "rfc2136": {
- "nameserver": "string",
- "zone": "string",
- "tsigKeyName": "string",
- "tsigAlgorithm": "hmac-sha256"
}, - "ttl": 0,
- "propagationTimeout": 0,
- "pollingInterval": 0,
- "name": "string",
- "hasCredentials": true,
- "usedBy": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}| name required | string |
{- "type": "cloudflare",
- "comment": "string",
- "cloudflare": {
- "zoneId": "string"
}, - "route53": {
- "accessKeyId": "string",
- "region": "string",
- "hostedZoneId": "string"
}, - "rfc2136": {
- "nameserver": "string",
- "zone": "string",
- "tsigKeyName": "string",
- "tsigAlgorithm": "hmac-sha256"
}, - "ttl": 0,
- "propagationTimeout": 0,
- "pollingInterval": 0,
- "name": "string",
- "hasCredentials": true,
- "usedBy": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}The empty credentials keep the stored ones when the type does not change (a Route 53
provider without accessKeyId drops them: ambient credentials). The leader retries
at once the pending certificates of the distributions using the provider.
| name required | string |
| type required | string (DnsProviderType) Enum: "cloudflare" "route53" "rfc2136" |
| comment | string |
object | |
object | |
object | |
| ttl | integer TTL of the records in seconds (default 60). |
| propagationTimeout | integer Wait of the propagation in seconds (default 120, at most 1800). |
| pollingInterval | integer Delay between two checks in seconds (default 4). |
| name | string Required to create; the one of the path to update. |
object Write-only, sealed in the system store, never returned nor logged. On an update an empty field keeps the stored value. |
{- "type": "cloudflare",
- "comment": "string",
- "cloudflare": {
- "zoneId": "string"
}, - "route53": {
- "accessKeyId": "string",
- "region": "string",
- "hostedZoneId": "string"
}, - "rfc2136": {
- "nameserver": "string",
- "zone": "string",
- "tsigKeyName": "string",
- "tsigAlgorithm": "hmac-sha256"
}, - "ttl": 0,
- "propagationTimeout": 0,
- "pollingInterval": 0,
- "name": "string",
- "credentials": {
- "apiToken": "string",
- "secretAccessKey": "string",
- "sessionToken": "string",
- "tsigSecret": "string"
}
}{- "type": "cloudflare",
- "comment": "string",
- "cloudflare": {
- "zoneId": "string"
}, - "route53": {
- "accessKeyId": "string",
- "region": "string",
- "hostedZoneId": "string"
}, - "rfc2136": {
- "nameserver": "string",
- "zone": "string",
- "tsigKeyName": "string",
- "tsigAlgorithm": "hmac-sha256"
}, - "ttl": 0,
- "propagationTimeout": 0,
- "pollingInterval": 0,
- "name": "string",
- "hasCredentials": true,
- "usedBy": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}| name required | string |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}Publishes a TXT record _acme-challenge.<domain> with a random value, waits for it on
the authoritative nameservers of the zone (up to the propagation timeout of the
provider) and removes it. A failure of the provider is a result (ok: false, the
failed step), not an error.
| name required | string |
| domain required | string Domain of the test record (a wildcard counts as its domain). |
{- "domain": "string"
}{- "ok": true,
- "record": "string",
- "step": "present",
- "error": "string",
- "durationMs": 0
}The reusable cache policies (docs/11 §11.2), by name: the built-in ones
(disabled, standard, aggressive, immutable-assets, respect-origin,
read-only, builtin: true) and those defined by the administrators. Every
policy is complete: its unset fields take the values of standard.
{- "items": [
- {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "name": "string",
- "comment": "string",
- "builtin": true,
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}
]
}Validates (TTL min ≤ default ≤ max, durations, sizes, media types...) and
stores the policy; every node applies it at once. A name already taken answers
409 already_exists, a built-in name 409 builtin_cache_policy, an invalid
policy 400 invalid_cache_request.
object Lifetime in cache when the object states none (default), and bounds of every lifetime (min, max). | |
| respectObjectCacheControl | boolean Use the Cache-Control and Expires stored with the objects. |
| browserCacheControl | string Cache-Control sent to the clients; empty keeps the one of the object. |
object | |
string or number (CacheDuration) | |
string or number (CacheDuration) | |
string or number (CacheDuration) | |
object | |
object | |
string or integer (CacheSize) | |
string or integer (CacheSize) | |
object | |
object | |
| name required | string Lowercase letters, digits, '.', '_' and '-' (at most 64). |
| comment | string |
| builtin | boolean A predefined, read-only policy; ignored in requests. |
| updatedAt | string <date-time> |
| etag | string The stored version; ignored in requests. |
{- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "name": "string",
- "comment": "string",
- "builtin": true,
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}{- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "name": "string",
- "comment": "string",
- "builtin": true,
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}| name required | string Name of the cache policy. |
{- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "name": "string",
- "comment": "string",
- "builtin": true,
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}Replaces the whole policy (its name is the one of the path); with If-Match
only the version with that ETag (412 otherwise). The entries cached under the
policy are dropped. A built-in policy answers 409 builtin_cache_policy.
| name required | string Name of the cache policy. |
| If-Match | string The ETag of the version the change applies to (quoted or not); a different
current version answers 412 |
object Lifetime in cache when the object states none (default), and bounds of every lifetime (min, max). | |
| respectObjectCacheControl | boolean Use the Cache-Control and Expires stored with the objects. |
| browserCacheControl | string Cache-Control sent to the clients; empty keeps the one of the object. |
object | |
string or number (CacheDuration) | |
string or number (CacheDuration) | |
string or number (CacheDuration) | |
object | |
object | |
string or integer (CacheSize) | |
string or integer (CacheSize) | |
object | |
object | |
| name required | string Lowercase letters, digits, '.', '_' and '-' (at most 64). |
| comment | string |
| builtin | boolean A predefined, read-only policy; ignored in requests. |
| updatedAt | string <date-time> |
| etag | string The stored version; ignored in requests. |
{- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "name": "string",
- "comment": "string",
- "builtin": true,
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}{- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "name": "string",
- "comment": "string",
- "builtin": true,
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}A policy named by the settings of the cluster or of a distribution answers 409 cache_policy_in_use.
| name required | string Name of the cache policy. |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}Without storing it: the policy completed with the defaults, the Cache-Control
it sends to the clients (inherited when it is the one of the objects) and a
one-line summary (the editor of the console, D-CCH-03). An invalid policy
answers 400 invalid_cache_request with the field at fault in detail.
object Lifetime in cache when the object states none (default), and bounds of every lifetime (min, max). | |
| respectObjectCacheControl | boolean Use the Cache-Control and Expires stored with the objects. |
| browserCacheControl | string Cache-Control sent to the clients; empty keeps the one of the object. |
object | |
string or number (CacheDuration) | |
string or number (CacheDuration) | |
string or number (CacheDuration) | |
object | |
object | |
string or integer (CacheSize) | |
string or integer (CacheSize) | |
object | |
object | |
| name required | string Lowercase letters, digits, '.', '_' and '-' (at most 64). |
| comment | string |
| builtin | boolean A predefined, read-only policy; ignored in requests. |
| updatedAt | string <date-time> |
| etag | string The stored version; ignored in requests. |
{- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "name": "string",
- "comment": "string",
- "builtin": true,
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}{- "policy": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "name": "string",
- "comment": "string",
- "builtin": true,
- "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}, - "cacheControl": "string",
- "inherited": true,
- "summary": "string"
}The global level of the inheritance (docs/11 §11.1); the debug secret is masked.
{- "cache": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "enabled": true,
- "policy": "string",
- "quota": "string",
- "purgeWebhooks": [
- "string"
], - "autoInvalidate": true
}, - "nodeHeader": true,
- "debug": {
- "header": "string",
- "secret": "string"
}, - "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}No quota (the size of the cache is --cache-size) nor webhooks at this level. A
masked debug secret keeps the stored one.
| If-Match | string The ETag of the version the change applies to (quoted or not); a different
current version answers 412 |
required | object (CacheSettings) The cache settings of a level: whether the cache is on, the policy it starts from (naming one replaces what the more general levels set) and the fields of the policy it overrides. |
| nodeHeader | boolean Add X-Cache-Node to every answer. |
object The request header unlocking X-Cache-Key, X-Cache-Policy and X-Cache-Node. | |
| updatedAt | string <date-time> |
| etag | string |
{- "cache": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "enabled": true,
- "policy": "string",
- "quota": "string",
- "purgeWebhooks": [
- "string"
], - "autoInvalidate": true
}, - "nodeHeader": true,
- "debug": {
- "header": "string",
- "secret": "string"
}, - "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}{- "cache": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "enabled": true,
- "policy": "string",
- "quota": "string",
- "purgeWebhooks": [
- "string"
], - "autoInvalidate": true
}, - "nodeHeader": true,
- "debug": {
- "header": "string",
- "secret": "string"
}, - "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}The cache key computed for the URL, the effective policy with the level each
setting comes from (fields), why the cache would be bypassed, and the entry of
the key on every node: tier, age, freshness, size, compressed variants
(docs/11 §11.7, D-CCH-05). Nothing is read from the origin.
| url required | string An absolute http(s) URL on a domain of a distribution, or a path of |
| distribution | string The distribution the URL must be served by (a path is completed with https and its first exact alias). |
| header | Array of strings A request header of the key ("Accept-Encoding: br"), repeatable. |
{- "url": "string",
- "distribution": "string",
- "host": "string",
- "path": "string",
- "bucket": "string",
- "key": "string",
- "cacheKey": "string",
- "bypass": true,
- "reason": "string",
- "policy": {
- "enabled": true,
- "enabledLevel": "default",
- "policyName": "string",
- "policyLevel": "default",
- "policy": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}
}, - "fields": {
- "property1": "default",
- "property2": "default"
}, - "domain": "string",
- "behavior": 0,
- "distributionQuota": "string",
- "domainQuota": "string",
- "cacheControl": "string",
- "autoInvalidate": true
}, - "mode": "local",
- "nodes": [
- {
- "node": "string",
- "online": true,
- "owner": true,
- "error": "string",
- "entry": {
- "key": "string",
- "present": true,
- "tier": "memory",
- "kind": "object",
- "ageSeconds": 0,
- "expiresInSeconds": 0,
- "stale": true,
- "sizeBytes": 0,
- "etag": "string",
- "encodings": [
- "string"
], - "blocks": 0
}
}
]
}The answers by X-Cache value, the bytes served from the cache and from the
origin, the hit ratio, the entries and the sizes per tier, of the cluster (summed)
and of every node, per domain, with the most requested objects and those missed
the most (docs/11 §11.8). distribution and host narrow them; a host alone
selects the distribution serving it.
| distribution | string |
| host | string |
| top | integer >= 0 Size of the lists of top objects (default 10, at most 100). |
{- "requests": {
- "property1": 0,
- "property2": 0
}, - "bytesCache": 0,
- "bytesOrigin": 0,
- "hitRatio": 0,
- "entries": 0,
- "memoryBytes": 0,
- "diskBytes": 0,
- "hosts": [
- {
- "requests": {
- "property1": 0,
- "property2": 0
}, - "bytesCache": 0,
- "bytesOrigin": 0,
- "hitRatio": 0,
- "distribution": "string",
- "host": "string",
- "entries": 0,
- "memoryBytes": 0,
- "diskBytes": 0
}
], - "topObjects": [
- {
- "distribution": "string",
- "host": "string",
- "path": "string",
- "requests": 0,
- "misses": 0
}
], - "topMisses": [
- {
- "distribution": "string",
- "host": "string",
- "path": "string",
- "requests": 0,
- "misses": 0
}
], - "nodes": [
- {
- "requests": {
- "property1": 0,
- "property2": 0
}, - "bytesCache": 0,
- "bytesOrigin": 0,
- "hitRatio": 0,
- "node": "string",
- "online": true,
- "mode": "local",
- "entries": 0,
- "memoryBytes": 0,
- "memoryLimitBytes": 0,
- "diskBytes": 0,
- "diskLimitBytes": 0,
- "evictions": 0,
- "invalidations": 0,
- "flushes": 0,
- "synced": true,
- "originReads": 0,
- "webhookQueue": 0,
- "hosts": [
- {
- "requests": {
- "property1": 0,
- "property2": 0
}, - "bytesCache": 0,
- "bytesOrigin": 0,
- "hitRatio": 0,
- "distribution": "string",
- "host": "string",
- "entries": 0,
- "memoryBytes": 0,
- "diskBytes": 0
}
], - "topObjects": [
- {
- "distribution": "string",
- "host": "string",
- "path": "string",
- "requests": 0,
- "misses": 0
}
], - "topMisses": [
- {
- "distribution": "string",
- "host": "string",
- "path": "string",
- "requests": 0,
- "misses": 0
}
], - "error": "string"
}
]
}{- "items": [
- {
- "id": "string",
- "request": {
- "domain": "string",
- "paths": [
- "string"
], - "patterns": [
- {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}
], - "tags": [
- "string"
], - "all": true,
- "soft": true,
- "distribution": "string",
- "actor": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "state": "in-progress",
- "nodes": [
- {
- "node": "string",
- "state": "pending",
- "at": "2019-08-24T14:15:22Z",
- "removed": 0,
- "error": "string"
}
]
}
]
}The global purge (all is required; soft marks the entries expired instead of dropping them).
| domain | string A domain of the distribution; alone, it purges the whole domain. |
| paths | Array of strings Exact paths ("/docs/" also drops its index document), or absolute URLs of a domain (their host sets the domain). |
Array of objects (KeyPattern) | |
| tags | Array of strings Cache tags (x-amz-meta-cache-tag, surrogate keys). |
| all | boolean |
| soft | boolean Mark the entries expired instead of dropping them. |
{- "domain": "string",
- "paths": [
- "string"
], - "patterns": [
- {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}
], - "tags": [
- "string"
], - "all": true,
- "soft": true
}{- "id": "string",
- "request": {
- "domain": "string",
- "paths": [
- "string"
], - "patterns": [
- {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}
], - "tags": [
- "string"
], - "all": true,
- "soft": true,
- "distribution": "string",
- "actor": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "state": "in-progress",
- "nodes": [
- {
- "node": "string",
- "state": "pending",
- "at": "2019-08-24T14:15:22Z",
- "removed": 0,
- "error": "string"
}
]
}A global purge or an invalidation of any distribution (nexoctl cache purge status).
| inv required | string Id of the invalidation. |
{- "id": "string",
- "request": {
- "domain": "string",
- "paths": [
- "string"
], - "patterns": [
- {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}
], - "tags": [
- "string"
], - "all": true,
- "soft": true,
- "distribution": "string",
- "actor": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "state": "in-progress",
- "nodes": [
- {
- "node": "string",
- "state": "pending",
- "at": "2019-08-24T14:15:22Z",
- "removed": 0,
- "error": "string"
}
]
}The defaults of the distribution, the overrides of its domains (an alias, exact or wildcard, or a host a wildcard alias matches) and of its paths (behaviors, the first match wins), its purge webhooks (secrets masked) and the objects warmed on write (docs/11 §11.1). A distribution without settings answers an empty document without ETag.
| id required | string Id of the distribution. |
{- "distribution": "string",
- "cache": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "enabled": true,
- "policy": "string",
- "quota": "string",
- "purgeWebhooks": [
- "string"
], - "autoInvalidate": true
}, - "domains": [
- {
- "host": "string",
- "cache": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "enabled": true,
- "policy": "string",
- "quota": "string",
- "purgeWebhooks": [
- "string"
], - "autoInvalidate": true
}
}
], - "behaviors": [
- {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "cache": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "enabled": true,
- "policy": "string",
- "quota": "string",
- "purgeWebhooks": [
- "string"
], - "autoInvalidate": true
}
}
], - "webhooks": [
- {
- "id": "string",
- "type": "cloudflare",
- "domains": [
- "string"
], - "url": "string",
- "zone": "string",
- "token": "string",
- "clientToken": "string",
- "clientSecret": "string",
- "network": "production",
- "cpCode": "string",
- "method": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "body": "string",
- "scheme": "http"
}
], - "warmOnWrite": [
- {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}
], - "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}Replaces the whole document (distribution is the id of the path); with
If-Match only the version with that ETag (412 otherwise). Every node applies the
settings at once and drops the entries whose settings changed. The webhooks sent
with masked secrets keep the stored ones.
| id required | string Id of the distribution. |
| If-Match | string The ETag of the version the change applies to (quoted or not); a different
current version answers 412 |
| distribution | string The id of the distribution (the one of the path; may be omitted in requests). |
required | object (CacheSettings) The cache settings of a level: whether the cache is on, the policy it starts from (naming one replaces what the more general levels set) and the fields of the policy it overrides. |
Array of objects | |
Array of objects Overrides per path, the first match wins (no quota, webhooks nor autoInvalidate). | |
Array of objects (CacheWebhook) | |
Array of objects (KeyPattern) The objects written whose path matches one of these patterns are cached at once. | |
| updatedAt | string <date-time> |
| etag | string |
{- "distribution": "string",
- "cache": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "enabled": true,
- "policy": "string",
- "quota": "string",
- "purgeWebhooks": [
- "string"
], - "autoInvalidate": true
}, - "domains": [
- {
- "host": "string",
- "cache": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "enabled": true,
- "policy": "string",
- "quota": "string",
- "purgeWebhooks": [
- "string"
], - "autoInvalidate": true
}
}
], - "behaviors": [
- {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "cache": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "enabled": true,
- "policy": "string",
- "quota": "string",
- "purgeWebhooks": [
- "string"
], - "autoInvalidate": true
}
}
], - "webhooks": [
- {
- "id": "string",
- "type": "cloudflare",
- "domains": [
- "string"
], - "url": "string",
- "zone": "string",
- "token": "string",
- "clientToken": "string",
- "clientSecret": "string",
- "network": "production",
- "cpCode": "string",
- "method": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "body": "string",
- "scheme": "http"
}
], - "warmOnWrite": [
- {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}
], - "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}{- "distribution": "string",
- "cache": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "enabled": true,
- "policy": "string",
- "quota": "string",
- "purgeWebhooks": [
- "string"
], - "autoInvalidate": true
}, - "domains": [
- {
- "host": "string",
- "cache": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "enabled": true,
- "policy": "string",
- "quota": "string",
- "purgeWebhooks": [
- "string"
], - "autoInvalidate": true
}
}
], - "behaviors": [
- {
- "pathPattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "cache": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}, - "enabled": true,
- "policy": "string",
- "quota": "string",
- "purgeWebhooks": [
- "string"
], - "autoInvalidate": true
}
}
], - "webhooks": [
- {
- "id": "string",
- "type": "cloudflare",
- "domains": [
- "string"
], - "url": "string",
- "zone": "string",
- "token": "string",
- "clientToken": "string",
- "clientSecret": "string",
- "network": "production",
- "cpCode": "string",
- "method": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "body": "string",
- "scheme": "http"
}
], - "warmOnWrite": [
- {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}
], - "updatedAt": "2019-08-24T14:15:22Z",
- "etag": "string"
}The policy that applies after the inheritance global → distribution → domain → behavior, with the level of each setting (TCC-01).
| id required | string Id of the distribution. |
| host | string A domain of the distribution (none for the level of the distribution). |
| path | string A path of the distribution (default /). |
{- "enabled": true,
- "enabledLevel": "default",
- "policyName": "string",
- "policyLevel": "default",
- "policy": {
- "ttl": {
- "default": "string",
- "min": "string",
- "max": "string"
}, - "respectObjectCacheControl": true,
- "browserCacheControl": "string",
- "cacheKey": {
- "queryString": "string",
- "headers": [
- "string"
], - "cookies": [
- "string"
], - "normalize": true,
- "includeHost": true
}, - "staleWhileRevalidate": "string",
- "staleIfError": "string",
- "negativeCaching": "string",
- "bypass": {
- "always": true,
- "authorization": true,
- "cookies": [
- "string"
], - "queryParams": [
- "string"
], - "headers": [
- "string"
]
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "gzip"
], - "contentTypes": [
- "string"
], - "minSize": "string"
}, - "minSize": "string",
- "maxObjectSize": "string",
- "rangeCaching": {
- "enabled": true,
- "blockSize": "string"
}, - "contentTypes": {
- "allow": [
- "string"
], - "deny": [
- "string"
]
}
}, - "fields": {
- "property1": "default",
- "property2": "default"
}, - "domain": "string",
- "behavior": 0,
- "distributionQuota": "string",
- "domainQuota": "string",
- "cacheControl": "string",
- "autoInvalidate": true
}Caches objects before they are requested (docs/11 §11.6): paths, absolute URLs of
the domain, every object below a prefix or matching a pattern, with bounded
concurrency and bandwidth. In the local mode every node warms its own cache.
Returns at once; GET .../warm/{job} follows the progress.
| id required | string Id of the distribution. |
| domain | string The domain the entries are keyed by (default the first exact alias). |
| paths | Array of strings |
| urls | Array of strings Absolute URLs of the domain. |
| prefix | string Every object below this path prefix. |
object (KeyPattern) A pattern of keys or paths: | |
| concurrency | integer >= 0 Parallel reads (default 4). |
string or integer (CacheSize) |
{- "domain": "string",
- "paths": [
- "string"
], - "urls": [
- "string"
], - "prefix": "string",
- "pattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "concurrency": 0,
- "bandwidth": "string"
}{- "id": "string",
- "request": {
- "domain": "string",
- "paths": [
- "string"
], - "urls": [
- "string"
], - "prefix": "string",
- "pattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "concurrency": 0,
- "bandwidth": "string",
- "distribution": "string",
- "actor": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "state": "running",
- "nodes": [
- {
- "node": "string",
- "state": "pending",
- "at": "2019-08-24T14:15:22Z",
- "removed": 0,
- "error": "string",
- "total": 0,
- "done": 0,
- "failed": 0,
- "bytes": 0
}
]
}| id required | string Id of the distribution. |
| job required | string |
{- "id": "string",
- "request": {
- "domain": "string",
- "paths": [
- "string"
], - "urls": [
- "string"
], - "prefix": "string",
- "pattern": {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}, - "concurrency": 0,
- "bandwidth": "string",
- "distribution": "string",
- "actor": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "state": "running",
- "nodes": [
- {
- "node": "string",
- "state": "pending",
- "at": "2019-08-24T14:15:22Z",
- "removed": 0,
- "error": "string",
- "total": 0,
- "done": 0,
- "failed": 0,
- "bytes": 0
}
]
}The CDNs and proxies in front of the cluster purged on the invalidations of the distribution, automatic and manual (secrets masked).
| id required | string Id of the distribution. |
{- "items": [
- {
- "id": "string",
- "type": "cloudflare",
- "domains": [
- "string"
], - "url": "string",
- "zone": "string",
- "token": "string",
- "clientToken": "string",
- "clientSecret": "string",
- "network": "production",
- "cpCode": "string",
- "method": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "body": "string",
- "scheme": "http"
}
]
}An id already used answers 409 already_exists.
| id required | string Id of the distribution. |
| id required | string |
| type required | string Enum: "cloudflare" "fastly" "akamai" "nginx" "varnish" "generic" |
| domains | Array of strings The domains whose invalidations call it (none for every domain not bound to another webhook). |
| url | string API base, address of the proxy, or URL template of a generic webhook. |
| zone | string Cloudflare zone id, Fastly service id. |
| token | string |
| clientToken | string |
| clientSecret | string |
| network | string Enum: "production" "staging" |
| cpCode | string |
| method | string |
object | |
| body | string Body template of a generic webhook (Go text/template). |
| scheme | string Enum: "http" "https" |
{- "id": "string",
- "type": "cloudflare",
- "domains": [
- "string"
], - "url": "string",
- "zone": "string",
- "token": "string",
- "clientToken": "string",
- "clientSecret": "string",
- "network": "production",
- "cpCode": "string",
- "method": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "body": "string",
- "scheme": "http"
}{- "id": "string",
- "type": "cloudflare",
- "domains": [
- "string"
], - "url": "string",
- "zone": "string",
- "token": "string",
- "clientToken": "string",
- "clientSecret": "string",
- "network": "production",
- "cpCode": "string",
- "method": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "body": "string",
- "scheme": "http"
}The domains bound to it are unbound.
| id required | string Id of the distribution. |
| webhook required | string Id of the purge webhook. |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}A test purge, outside of the queue (the connection test of D-CCH-07); a failed call is reported in the body, not as an error.
| id required | string Id of the distribution. |
| webhook required | string Id of the purge webhook. |
{- "ok": true,
- "status": 0,
- "error": "string",
- "durationMs": 0
}| id required | string Id of the distribution. |
{- "items": [
- {
- "id": "string",
- "request": {
- "domain": "string",
- "paths": [
- "string"
], - "patterns": [
- {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}
], - "tags": [
- "string"
], - "all": true,
- "soft": true,
- "distribution": "string",
- "actor": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "state": "in-progress",
- "nodes": [
- {
- "node": "string",
- "state": "pending",
- "at": "2019-08-24T14:15:22Z",
- "removed": 0,
- "error": "string"
}
]
}
]
}Exact paths (or absolute URLs of a domain, which set the domain), prefix, glob or
regex patterns of paths, cache tags (surrogate keys), a whole domain (domain
alone) or everything (all); soft marks the entries expired (served stale while
revalidated) instead of dropping them (docs/11 §11.5). Applied on every node and
sent to the purge webhooks of the domains; a node not reached is retried and the
state stays in-progress until it applies it.
| id required | string Id of the distribution. |
| domain | string A domain of the distribution; alone, it purges the whole domain. |
| paths | Array of strings Exact paths ("/docs/" also drops its index document), or absolute URLs of a domain (their host sets the domain). |
Array of objects (KeyPattern) | |
| tags | Array of strings Cache tags (x-amz-meta-cache-tag, surrogate keys). |
| all | boolean |
| soft | boolean Mark the entries expired instead of dropping them. |
{- "domain": "string",
- "paths": [
- "string"
], - "patterns": [
- {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}
], - "tags": [
- "string"
], - "all": true,
- "soft": true
}{- "id": "string",
- "request": {
- "domain": "string",
- "paths": [
- "string"
], - "patterns": [
- {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}
], - "tags": [
- "string"
], - "all": true,
- "soft": true,
- "distribution": "string",
- "actor": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "state": "in-progress",
- "nodes": [
- {
- "node": "string",
- "state": "pending",
- "at": "2019-08-24T14:15:22Z",
- "removed": 0,
- "error": "string"
}
]
}| id required | string Id of the distribution. |
| inv required | string Id of the invalidation. |
{- "id": "string",
- "request": {
- "domain": "string",
- "paths": [
- "string"
], - "patterns": [
- {
- "type": "prefix",
- "pattern": "string",
- "caseInsensitive": true
}
], - "tags": [
- "string"
], - "all": true,
- "soft": true,
- "distribution": "string",
- "actor": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "state": "in-progress",
- "nodes": [
- {
- "node": "string",
- "state": "pending",
- "at": "2019-08-24T14:15:22Z",
- "removed": 0,
- "error": "string"
}
]
}Collects a profile of the node that serves the request, in the pprof format
(gzipped protocol buffer, go tool pprof): cpu, mutex and block sample
for seconds (1-120, default 10), heap and goroutine are snapshots. One
profile at a time per node (409 conflict). Allowed to root and to the
identities with admin:Profiling (the diagnostics policy). A POST: with the
console session it needs the CSRF token, like every request with side effects
(sampling, sampling rates, the profile slot of the node).
| type | string Default: "cpu" Enum: "cpu" "heap" "goroutine" "mutex" "block" |
| seconds | integer [ 1 .. 120 ] |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}Runs on the node that serves the request and removes what it wrote: drive
writes then reads files on every local drive; object uploads then downloads
objects through the object layer in a temporary bucket (nexo-speedtest-*);
net uploads files to a drive of every other node of a cluster over the
internode RPC then reads one back (501 out of a cluster). Each phase lasts
durationSeconds (at most 60) and writes at most 1 GiB per target; objects
and files are at most 64 MiB, the concurrency at most 64. One test at a time
per node (409 conflict).
| kind required | string Enum: "drive" "object" "net" |
| size | integer [ 1 .. 67108864 ] Size of each file or object (default 4 MiB). |
| durationSeconds | number [ 0.1 .. 60 ] Duration of each phase (default 5). |
| concurrency | integer [ 1 .. 64 ] Concurrency of the object test and of the reads of the net test (default 8). |
{- "size": 1,
- "durationSeconds": 0.1,
- "concurrency": 1
}{- "kind": "drive",
- "node": "string",
- "size": 0,
- "durationSeconds": 0,
- "concurrency": 0,
- "targets": [
- {
- "target": "string",
- "write": {
- "bytes": 0,
- "operations": 0,
- "elapsedSeconds": 0,
- "bytesPerSecond": 0,
- "operationsPerSecond": 0,
- "latencyP50Ms": 0,
- "latencyP99Ms": 0
}, - "read": {
- "bytes": 0,
- "operations": 0,
- "elapsedSeconds": 0,
- "bytesPerSecond": 0,
- "operationsPerSecond": 0,
- "latencyP50Ms": 0,
- "latencyP99Ms": 0
}, - "error": "string"
}
]
}Streams one event per S3, Admin API, website or internode request served by
the deployment, the nodes of a cluster included (node restricts them),
as text/event-stream: event: trace with a TraceEvent, event: dropped
with a StreamDropped when the client did not keep up (the server never
waits for a slow stream: it drops events and counts them), a : heartbeat
comment while idle. The query strings are redacted (signatures,
credentials, tokens); headers and bodies are never part of an event.
Without type, every type but rpc. A node serves at most 256 live
trace streams at once (the streams the peers open for their own
subscribers included): beyond them a new one answers 429
too_many_requests.
| node | string Nodes to trace (comma-separated or repeated) |
| type | string Request types: s3, admin, web, rpc (comma-separated) |
| api | string API names (PutObject, GET /buckets...), comma-separated |
| bucket | string Buckets (comma-separated) |
| status | string Status codes (404) or classes (5xx), comma-separated |
| errors | boolean Only the failed requests (status >= 400) |
| threshold | string Only the requests slower than this duration (500ms, 2s) |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}Streams the log entries of the deployment, the nodes of a cluster included,
as text/event-stream: event: log with a LogEntry, event: dropped with
a StreamDropped, a : heartbeat comment while idle. last first replays
up to that many recent entries of each node (at most 10000). Secrets
(credentials, signatures, tokens, passwords) are redacted from the entries.
A node serves at most 256 live log streams at once (the streams the peers
open for their own subscribers included): beyond them a new one answers
429 too_many_requests.
| node | string Nodes (comma-separated or repeated) |
| level | string Enum: "debug" "info" "warn" "error" "DEBUG" "INFO" "WARN" "ERROR" Minimum level |
| last | integer [ 0 .. 10000 ] Recent entries to replay first |
{- "type": "string",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "string",
- "code": "string",
- "requestId": "string",
- "errors": [
- {
- "statement": 0,
- "sid": "string",
- "element": "string",
- "line": 0,
- "column": 0,
- "message": "string"
}
], - "ruleErrors": [
- {
- "rule": 0,
- "id": "string",
- "code": "string",
- "message": "string"
}
], - "accessRuleErrors": [
- {
- "rule": 0,
- "id": "string",
- "field": "string",
- "position": 0,
- "message": "string"
}
]
}Searches the audit records kept in memory by every node (the most recent ones; the complete log goes to the JSON log and to the audit targets audit_webhook and audit_kafka), newest first. An audit record is produced for every authenticated S3 and Admin API request.
| node | string Nodes (comma-separated or repeated) |
| api | string API name (PutObject, GET /buckets...) |
| bucket | string |
| user | string Access key or parent user |
| type | string Enum: "s3" "admin" Request type |
| status | string Status codes (404) or classes (5xx), comma-separated |
| errors | boolean Only the failed requests (status >= 400) |
| since | string <date-time> |
| until | string <date-time> |
| requestId | string |
| limit | integer [ 0 .. 1000 ] At most this many records (default 100, at most 1000) |
{- "items": [
- {
- "time": "2019-08-24T14:15:22Z",
- "node": "string",
- "type": "s3",
- "requestId": "string",
- "api": "string",
- "method": "string",
- "path": "string",
- "bucket": "string",
- "object": "string",
- "statusCode": 0,
- "durationMs": 0,
- "rx": 0,
- "tx": 0,
- "remoteHost": "string",
- "userAgent": "string",
- "accessKey": "string",
- "parentUser": "string",
- "query": {
- "property1": "string",
- "property2": "string"
}, - "error": "string"
}
]
}The series kept by every node in memory (one point every 10 seconds for
24 hours) for the charts of the console. Allowed with admin:Prometheus
or admin:ServerInfo (either one).
{- "items": [
- {
- "name": "string",
- "description": "string",
- "unit": "string",
- "aggregation": "sum"
}
]
}The points of metric from end - range to end every step, for every
node (or those of node) and aggregated for the cluster; a point without
sample (node down, older than the buffer) is null. Allowed with
admin:Prometheus or admin:ServerInfo (either one).
| metric required | string Name of the series (GET /metrics) |
| range | string Span of the points (default 1h, at most 24h) |
| step | string Distance between two points (multiple of 10s; default keeps at most 360 points) |
| end | string <date-time> End of the range (default now) |
| node | string Nodes (comma-separated or repeated) |
{- "metric": {
- "name": "string",
- "description": "string",
- "unit": "string",
- "aggregation": "sum"
}, - "start": "2019-08-24T14:15:22Z",
- "end": "2019-08-24T14:15:22Z",
- "stepSeconds": 0,
- "nodes": [
- {
- "node": "string",
- "points": [
- {
- "t": 0,
- "v": 0
}
], - "error": "string"
}
], - "cluster": [
- {
- "t": 0,
- "v": 0
}
]
}