Snapshots

Snapshots recorded against a source or a store.

9 endpoints · Plakar Control Plane v0.18 · Base URL, authentication and errors

List the snapshots of a source

GET /api/v1/snapshots/source/{source_id}
Badge

Path parameters

  • source_id string required

Query parameters

  • organization_id string<uuid>
    Organization to act on, at or below the caller’s. Defaults to the caller’s.
  • offset integer
    Number of items to skip.
    Default: 0
  • limit integer
    Maximum number of items to return.
    Default: 100 Min: 1 Max: 100

Response 200 OK application/json

  • items array[object]
    • category string nullable
    • creation_time string<date-time>
    • data_classes array[string] nullable
    • dataset string nullable
    • environment string nullable
    • items integer nullable
    • name string nullable
    • origin string nullable
    • root string nullable
    • size integer nullable
    • snapshot_id string
    • stores array[object]
      • country_detected string nullable
      • id string<uuid>
      • integration object
        • created_at string<date-time>
        • fields map[array[object]] nullable
        • id string<uuid>
        • name string nullable
        • protocols array[string] nullable
        • supports array[string] nullable
        • updated_at string<date-time>
        • version string nullable
      • legal_hold boolean
      • name string
      • residency string nullable
      • type string
    • tags array[string] nullable
  • total integer

Errors

  • 400 Bad Request (validation or deserialization error)
  • 401 Missing, invalid or expired credentials
  • 403 The caller may not do this
  • 500 Internal Server Error (panics)

Every error returns the standard error body.

Request

curl 'https://pcp.example.com/api/v1/snapshots/source/{source_id}' \
  -H 'Authorization: Bearer <badge>'

Response 200

{
  "items": [
    {
      "category": "string",
      "creation_time": "2026-01-01T00:00:00Z",
      "data_classes": [
        "string"
      ],
      "dataset": "string",
      "environment": "string",
      "items": 0,
      "name": "string",
      "origin": "string",
      "root": "string",
      "size": 0,
      "snapshot_id": "string",
      "stores": [
        {
          "country_detected": "string",
          "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
          "integration": {
            "created_at": "2026-01-01T00:00:00Z",
            "fields": {
              "key": [
                {
                  "default": "string",
                  "description": "string",
                  "display_name": "string",
                  "enum": [
                    "string"
                  ],
                  "inventory_value": "string",
                  "name": "string",
                  "pattern": "string",
                  "required": true,
                  "sensitive": true,
                  "type": "string"
                }
              ]
            },
            "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
            "name": "string",
            "protocols": [
              "string"
            ],
            "supports": [
              "string"
            ],
            "updated_at": "2026-01-01T00:00:00Z",
            "version": "string"
          },
          "legal_hold": true,
          "name": "string",
          "residency": "string",
          "type": "string"
        }
      ],
      "tags": [
        "string"
      ]
    }
  ],
  "total": 0
}

Get a snapshot of a source

GET /api/v1/snapshots/source/{source_id}/{snapshot_id}
Badge

Path parameters

  • source_id string required
  • snapshot_id string required

Query parameters

  • organization_id string<uuid>
    Organization to act on, at or below the caller’s. Defaults to the caller’s.

Response 200 OK application/json

  • category string nullable
  • creation_time string<date-time>
  • data_classes array[string] nullable
  • dataset string nullable
  • environment string nullable
  • items integer nullable
  • name string nullable
  • origin string nullable
  • root string nullable
  • size integer nullable
  • snapshot_id string
  • stores array[object]
    • country_detected string nullable
    • id string<uuid>
    • integration object
      • created_at string<date-time>
      • fields map[array[object]] nullable
      • id string<uuid>
      • name string nullable
      • protocols array[string] nullable
      • supports array[string] nullable
      • updated_at string<date-time>
      • version string nullable
    • legal_hold boolean
    • name string
    • residency string nullable
    • type string
  • tags array[string] nullable

Errors

  • 400 Bad Request (validation or deserialization error)
  • 401 Missing, invalid or expired credentials
  • 403 The caller may not do this
  • 500 Internal Server Error (panics)

Every error returns the standard error body.

Request

curl 'https://pcp.example.com/api/v1/snapshots/source/{source_id}/{snapshot_id}' \
  -H 'Authorization: Bearer <badge>'

Response 200

{
  "category": "string",
  "creation_time": "2026-01-01T00:00:00Z",
  "data_classes": [
    "string"
  ],
  "dataset": "string",
  "environment": "string",
  "items": 0,
  "name": "string",
  "origin": "string",
  "root": "string",
  "size": 0,
  "snapshot_id": "string",
  "stores": [
    {
      "country_detected": "string",
      "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
      "integration": {
        "created_at": "2026-01-01T00:00:00Z",
        "fields": {
          "key": [
            {
              "default": "string",
              "description": "string",
              "display_name": "string",
              "enum": [
                "string"
              ],
              "inventory_value": "string",
              "name": "string",
              "pattern": "string",
              "required": true,
              "sensitive": true,
              "type": "string"
            }
          ]
        },
        "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
        "name": "string",
        "protocols": [
          "string"
        ],
        "supports": [
          "string"
        ],
        "updated_at": "2026-01-01T00:00:00Z",
        "version": "string"
      },
      "legal_hold": true,
      "name": "string",
      "residency": "string",
      "type": "string"
    }
  ],
  "tags": [
    "string"
  ]
}

List the snapshots of a store

GET /api/v1/snapshots/store/{store_id}
Badge

Path parameters

  • store_id string required

Query parameters

  • organization_id string<uuid>
    Organization to act on, at or below the caller’s. Defaults to the caller’s.
  • offset integer
    Number of items to skip.
    Default: 0
  • limit integer
    Maximum number of items to return.
    Default: 100 Min: 1 Max: 100

Response 200 OK application/json

  • items array[object]
    • category string nullable
    • creation_time string<date-time> required
    • data_classes array[string] nullable
    • dataset string nullable
    • environment string nullable
    • items integer nullable
    • legal_hold boolean
    • name string nullable
    • origin string nullable
    • root string nullable
    • size integer nullable
    • snapshot_id string required
    • store_id string<uuid>
    • tags array[string] nullable
  • total integer

Errors

  • 400 Bad Request (validation or deserialization error)
  • 401 Missing, invalid or expired credentials
  • 403 The caller may not do this
  • 500 Internal Server Error (panics)

Every error returns the standard error body.

Request

curl 'https://pcp.example.com/api/v1/snapshots/store/{store_id}' \
  -H 'Authorization: Bearer <badge>'

Response 200

{
  "items": [
    {
      "category": "string",
      "creation_time": "2026-01-01T00:00:00Z",
      "data_classes": [
        "string"
      ],
      "dataset": "string",
      "environment": "string",
      "items": 0,
      "legal_hold": true,
      "name": "string",
      "origin": "string",
      "root": "string",
      "size": 0,
      "snapshot_id": "string",
      "store_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
      "tags": [
        "string"
      ]
    }
  ],
  "total": 0
}

Preview a prune of a store

POST /api/v1/snapshots/store/{store_id}/prune/preview
Badge

Path parameters

  • store_id string required

Query parameters

  • organization_id string<uuid>
    Organization to act on, at or below the caller’s. Defaults to the caller’s.

Request body application/json required

  • after integer nullable
    Max: 1.8446744073709552e+19
  • before integer nullable
    Max: 1.8446744073709552e+19
  • day integer nullable
  • exec object
    • concurrency integer
    • cpu integer
  • format string nullable
  • hooks object
    • post_job string nullable
    • pre_job string nullable
  • hour integer nullable
  • ignores array[string] nullable
  • labels array[string] nullable
  • latest boolean nullable
  • locate object
    • filters object
      • before string<date-time> nullable
      • category string nullable
      • data_classes array[string] nullable
      • dataset string nullable
      • environment string nullable
      • ids array[string] nullable
      • ignore_tags array[string] nullable
      • job string nullable
      • latest boolean nullable
      • name string nullable
      • origins array[string] nullable
      • perimeter string nullable
      • roots array[string] nullable
      • since string<date-time> nullable
      • tags array[string] nullable
      • types array[string] nullable
    • group_by string nullable
    • periods object
      • day object
        • cap integer nullable
        • keep integer nullable
      • friday object
        • cap integer nullable
        • keep integer nullable
      • hour object
        • cap integer nullable
        • keep integer nullable
      • minute object
        • cap integer nullable
        • keep integer nullable
      • monday object
        • cap integer nullable
        • keep integer nullable
      • month object
        • cap integer nullable
        • keep integer nullable
      • saturday object
        • cap integer nullable
        • keep integer nullable
      • sunday object
        • cap integer nullable
        • keep integer nullable
      • thursday object
        • cap integer nullable
        • keep integer nullable
      • tuesday object
        • cap integer nullable
        • keep integer nullable
      • wednesday object
        • cap integer nullable
        • keep integer nullable
      • week object
        • cap integer nullable
        • keep integer nullable
      • year object
        • cap integer nullable
        • keep integer nullable
  • minute integer nullable
  • month integer nullable
  • per_day integer nullable
  • per_hour integer nullable
  • per_minute integer nullable
  • per_month integer nullable
  • per_week integer nullable
  • per_year integer nullable
  • root string nullable
  • snapshot_id string nullable
  • snapshot_ids array[string] nullable
  • week integer nullable
  • year integer nullable

Response 200 OK application/json

  • floored array[string]
  • held array[string]
  • would_delete array[string]
  • would_keep array[string]

Errors

  • 400 Bad Request (validation or deserialization error)
  • 401 Missing, invalid or expired credentials
  • 403 The caller may not do this
  • 500 Internal Server Error (panics)

Every error returns the standard error body.

Request

curl -X POST 'https://pcp.example.com/api/v1/snapshots/store/{store_id}/prune/preview' \
  -H 'Authorization: Bearer <badge>' \
  -H 'Content-Type: application/json' \
  -d '{
  "after": 0,
  "before": 0,
  "day": 0,
  "exec": {
    "concurrency": 0,
    "cpu": 0
  },
  "format": "string",
  "hooks": {
    "post_job": "string",
    "pre_job": "string"
  },
  "hour": 0,
  "ignores": [
    "string"
  ],
  "labels": [
    "string"
  ],
  "latest": true,
  "locate": {
    "filters": {
      "before": "2026-01-01T00:00:00Z",
      "category": "string",
      "data_classes": [
        "string"
      ],
      "dataset": "string",
      "environment": "string",
      "ids": [
        "string"
      ],
      "ignore_tags": [
        "string"
      ],
      "job": "string",
      "latest": true,
      "name": "string",
      "origins": [
        "string"
      ],
      "perimeter": "string",
      "roots": [
        "string"
      ],
      "since": "2026-01-01T00:00:00Z",
      "tags": [
        "string"
      ],
      "types": [
        "string"
      ]
    },
    "group_by": "string",
    "periods": {
      "day": {
        "cap": 0,
        "keep": 0
      },
      "friday": {
        "cap": 0,
        "keep": 0
      },
      "hour": {
        "cap": 0,
        "keep": 0
      },
      "minute": {
        "cap": 0,
        "keep": 0
      },
      "monday": {
        "cap": 0,
        "keep": 0
      },
      "month": {
        "cap": 0,
        "keep": 0
      },
      "saturday": {
        "cap": 0,
        "keep": 0
      },
      "sunday": {
        "cap": 0,
        "keep": 0
      },
      "thursday": {
        "cap": 0,
        "keep": 0
      },
      "tuesday": {
        "cap": 0,
        "keep": 0
      },
      "wednesday": {
        "cap": 0,
        "keep": 0
      },
      "week": {
        "cap": 0,
        "keep": 0
      },
      "year": {
        "cap": 0,
        "keep": 0
      }
    }
  },
  "minute": 0,
  "month": 0,
  "per_day": 0,
  "per_hour": 0,
  "per_minute": 0,
  "per_month": 0,
  "per_week": 0,
  "per_year": 0,
  "root": "string",
  "snapshot_id": "string",
  "snapshot_ids": [
    "string"
  ],
  "week": 0,
  "year": 0
}'

Response 200

{
  "floored": [
    "string"
  ],
  "held": [
    "string"
  ],
  "would_delete": [
    "string"
  ],
  "would_keep": [
    "string"
  ]
}

Prune a store

POST /api/v1/snapshots/store/{store_id}/prune/run
Badge

Path parameters

  • store_id string required

Query parameters

  • organization_id string<uuid>
    Organization to act on, at or below the caller’s. Defaults to the caller’s.
  • actor string
    Scheduler to address. default: tasks created through the UI or the API. policy: tasks created by SLA policies, and their jobs. custom: tasks of integrations that drive the scheduler, such as Kubernetes; deprecated in favor of user:. user: the caller’s personal scheduler; 404 until POST /scheduling/scheduler creates it. user:: the personal scheduler of another user; needs view access on schedulers.
    Default: "default"

Request body application/json required

  • after integer nullable
    Max: 1.8446744073709552e+19
  • before integer nullable
    Max: 1.8446744073709552e+19
  • day integer nullable
  • exec object
    • concurrency integer
    • cpu integer
  • format string nullable
  • hooks object
    • post_job string nullable
    • pre_job string nullable
  • hour integer nullable
  • ignores array[string] nullable
  • labels array[string] nullable
  • latest boolean nullable
  • locate object
    • filters object
      • before string<date-time> nullable
      • category string nullable
      • data_classes array[string] nullable
      • dataset string nullable
      • environment string nullable
      • ids array[string] nullable
      • ignore_tags array[string] nullable
      • job string nullable
      • latest boolean nullable
      • name string nullable
      • origins array[string] nullable
      • perimeter string nullable
      • roots array[string] nullable
      • since string<date-time> nullable
      • tags array[string] nullable
      • types array[string] nullable
    • group_by string nullable
    • periods object
      • day object
        • cap integer nullable
        • keep integer nullable
      • friday object
        • cap integer nullable
        • keep integer nullable
      • hour object
        • cap integer nullable
        • keep integer nullable
      • minute object
        • cap integer nullable
        • keep integer nullable
      • monday object
        • cap integer nullable
        • keep integer nullable
      • month object
        • cap integer nullable
        • keep integer nullable
      • saturday object
        • cap integer nullable
        • keep integer nullable
      • sunday object
        • cap integer nullable
        • keep integer nullable
      • thursday object
        • cap integer nullable
        • keep integer nullable
      • tuesday object
        • cap integer nullable
        • keep integer nullable
      • wednesday object
        • cap integer nullable
        • keep integer nullable
      • week object
        • cap integer nullable
        • keep integer nullable
      • year object
        • cap integer nullable
        • keep integer nullable
  • minute integer nullable
  • month integer nullable
  • per_day integer nullable
  • per_hour integer nullable
  • per_minute integer nullable
  • per_month integer nullable
  • per_week integer nullable
  • per_year integer nullable
  • root string nullable
  • snapshot_id string nullable
  • snapshot_ids array[string] nullable
  • week integer nullable
  • year integer nullable

Response 200 OK application/json

  • at_ids array[string<uuid>]
  • deleted array[string]
  • floored array[string]
  • held array[string]

Errors

  • 400 Bad Request (validation or deserialization error)
  • 401 Missing, invalid or expired credentials
  • 403 The caller may not do this
  • 500 Internal Server Error (panics)

Every error returns the standard error body.

Request

curl -X POST 'https://pcp.example.com/api/v1/snapshots/store/{store_id}/prune/run' \
  -H 'Authorization: Bearer <badge>' \
  -H 'Content-Type: application/json' \
  -d '{
  "after": 0,
  "before": 0,
  "day": 0,
  "exec": {
    "concurrency": 0,
    "cpu": 0
  },
  "format": "string",
  "hooks": {
    "post_job": "string",
    "pre_job": "string"
  },
  "hour": 0,
  "ignores": [
    "string"
  ],
  "labels": [
    "string"
  ],
  "latest": true,
  "locate": {
    "filters": {
      "before": "2026-01-01T00:00:00Z",
      "category": "string",
      "data_classes": [
        "string"
      ],
      "dataset": "string",
      "environment": "string",
      "ids": [
        "string"
      ],
      "ignore_tags": [
        "string"
      ],
      "job": "string",
      "latest": true,
      "name": "string",
      "origins": [
        "string"
      ],
      "perimeter": "string",
      "roots": [
        "string"
      ],
      "since": "2026-01-01T00:00:00Z",
      "tags": [
        "string"
      ],
      "types": [
        "string"
      ]
    },
    "group_by": "string",
    "periods": {
      "day": {
        "cap": 0,
        "keep": 0
      },
      "friday": {
        "cap": 0,
        "keep": 0
      },
      "hour": {
        "cap": 0,
        "keep": 0
      },
      "minute": {
        "cap": 0,
        "keep": 0
      },
      "monday": {
        "cap": 0,
        "keep": 0
      },
      "month": {
        "cap": 0,
        "keep": 0
      },
      "saturday": {
        "cap": 0,
        "keep": 0
      },
      "sunday": {
        "cap": 0,
        "keep": 0
      },
      "thursday": {
        "cap": 0,
        "keep": 0
      },
      "tuesday": {
        "cap": 0,
        "keep": 0
      },
      "wednesday": {
        "cap": 0,
        "keep": 0
      },
      "week": {
        "cap": 0,
        "keep": 0
      },
      "year": {
        "cap": 0,
        "keep": 0
      }
    }
  },
  "minute": 0,
  "month": 0,
  "per_day": 0,
  "per_hour": 0,
  "per_minute": 0,
  "per_month": 0,
  "per_week": 0,
  "per_year": 0,
  "root": "string",
  "snapshot_id": "string",
  "snapshot_ids": [
    "string"
  ],
  "week": 0,
  "year": 0
}'

Response 200

{
  "at_ids": [
    "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
  ],
  "deleted": [
    "string"
  ],
  "floored": [
    "string"
  ],
  "held": [
    "string"
  ]
}

Get a snapshot of a store

GET /api/v1/snapshots/store/{store_id}/{snapshot_id}
Badge

Path parameters

  • store_id string required
  • snapshot_id string required

Query parameters

  • organization_id string<uuid>
    Organization to act on, at or below the caller’s. Defaults to the caller’s.

Response 200 OK application/json

  • category string nullable
  • creation_time string<date-time> required
  • data_classes array[string] nullable
  • dataset string nullable
  • environment string nullable
  • items integer nullable
  • legal_hold boolean
  • name string nullable
  • origin string nullable
  • root string nullable
  • size integer nullable
  • snapshot_id string required
  • store_id string<uuid>
  • tags array[string] nullable

Errors

  • 400 Bad Request (validation or deserialization error)
  • 401 Missing, invalid or expired credentials
  • 403 The caller may not do this
  • 500 Internal Server Error (panics)

Every error returns the standard error body.

Request

curl 'https://pcp.example.com/api/v1/snapshots/store/{store_id}/{snapshot_id}' \
  -H 'Authorization: Bearer <badge>'

Response 200

{
  "category": "string",
  "creation_time": "2026-01-01T00:00:00Z",
  "data_classes": [
    "string"
  ],
  "dataset": "string",
  "environment": "string",
  "items": 0,
  "legal_hold": true,
  "name": "string",
  "origin": "string",
  "root": "string",
  "size": 0,
  "snapshot_id": "string",
  "store_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
  "tags": [
    "string"
  ]
}

Update a snapshot in a store

PATCH /api/v1/snapshots/store/{store_id}/{snapshot_id}
Badge

Path parameters

  • store_id string required
  • snapshot_id string required

Query parameters

  • organization_id string<uuid>
    Organization to act on, at or below the caller’s. Defaults to the caller’s.

Request body application/json required

  • legal_hold boolean nullable

Response 200 OK application/json

  • category string nullable
  • creation_time string<date-time> required
  • data_classes array[string] nullable
  • dataset string nullable
  • environment string nullable
  • items integer nullable
  • legal_hold boolean
  • name string nullable
  • origin string nullable
  • root string nullable
  • size integer nullable
  • snapshot_id string required
  • store_id string<uuid>
  • tags array[string] nullable

Errors

  • 400 Bad Request (validation or deserialization error)
  • 401 Missing, invalid or expired credentials
  • 403 The caller may not do this
  • 500 Internal Server Error (panics)

Every error returns the standard error body.

Request

curl -X PATCH 'https://pcp.example.com/api/v1/snapshots/store/{store_id}/{snapshot_id}' \
  -H 'Authorization: Bearer <badge>' \
  -H 'Content-Type: application/json' \
  -d '{
  "legal_hold": true
}'

Response 200

{
  "category": "string",
  "creation_time": "2026-01-01T00:00:00Z",
  "data_classes": [
    "string"
  ],
  "dataset": "string",
  "environment": "string",
  "items": 0,
  "legal_hold": true,
  "name": "string",
  "origin": "string",
  "root": "string",
  "size": 0,
  "snapshot_id": "string",
  "store_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
  "tags": [
    "string"
  ]
}

List the stores holding a snapshot

GET /api/v1/snapshots/{snapshot_id}
Badge

Path parameters

  • snapshot_id string required

Query parameters

  • organization_id string<uuid>
    Organization to act on, at or below the caller’s. Defaults to the caller’s.

Response 200 OK application/json

  • entries array[object]
    • category string nullable
    • creation_time string<date-time> required
    • data_classes array[string] nullable
    • dataset string nullable
    • environment string nullable
    • items integer nullable
    • legal_hold boolean
    • name string nullable
    • origin string nullable
    • root string nullable
    • size integer nullable
    • snapshot_id string required
    • store_id string<uuid>
    • tags array[string] nullable

Errors

  • 400 Bad Request (validation or deserialization error)
  • 401 Missing, invalid or expired credentials
  • 403 The caller may not do this
  • 500 Internal Server Error (panics)

Every error returns the standard error body.

Request

curl 'https://pcp.example.com/api/v1/snapshots/{snapshot_id}' \
  -H 'Authorization: Bearer <badge>'

Response 200

{
  "entries": [
    {
      "category": "string",
      "creation_time": "2026-01-01T00:00:00Z",
      "data_classes": [
        "string"
      ],
      "dataset": "string",
      "environment": "string",
      "items": 0,
      "legal_hold": true,
      "name": "string",
      "origin": "string",
      "root": "string",
      "size": 0,
      "snapshot_id": "string",
      "store_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
      "tags": [
        "string"
      ]
    }
  ]
}

Update a snapshot in every store

PATCH /api/v1/snapshots/{snapshot_id}
Badge

Path parameters

  • snapshot_id string required

Query parameters

  • organization_id string<uuid>
    Organization to act on, at or below the caller’s. Defaults to the caller’s.

Request body application/json required

  • legal_hold boolean nullable

Response 200 OK application/json

  • entries array[object]
    • category string nullable
    • creation_time string<date-time> required
    • data_classes array[string] nullable
    • dataset string nullable
    • environment string nullable
    • items integer nullable
    • legal_hold boolean
    • name string nullable
    • origin string nullable
    • root string nullable
    • size integer nullable
    • snapshot_id string required
    • store_id string<uuid>
    • tags array[string] nullable

Errors

  • 400 Bad Request (validation or deserialization error)
  • 401 Missing, invalid or expired credentials
  • 403 The caller may not do this
  • 500 Internal Server Error (panics)

Every error returns the standard error body.

Request

curl -X PATCH 'https://pcp.example.com/api/v1/snapshots/{snapshot_id}' \
  -H 'Authorization: Bearer <badge>' \
  -H 'Content-Type: application/json' \
  -d '{
  "legal_hold": true
}'

Response 200

{
  "entries": [
    {
      "category": "string",
      "creation_time": "2026-01-01T00:00:00Z",
      "data_classes": [
        "string"
      ],
      "dataset": "string",
      "environment": "string",
      "items": 0,
      "legal_hold": true,
      "name": "string",
      "origin": "string",
      "root": "string",
      "size": 0,
      "snapshot_id": "string",
      "store_id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
      "tags": [
        "string"
      ]
    }
  ]
}