Secret providers

External secret providers.

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

List the secret providers

GET /api/v1/account/organizations/{id}/secret_providers
Badge

Path parameters

  • id string<uuid> required
    Organization ID, at or below the caller’s.

Query parameters

  • offset integer
    Number of items to skip.
    Default: 0
  • limit integer
    Maximum number of items to return.
    Default: 100 Min: 1 Max: 100
  • search string
    Free-text search on secret providers.
  • secret_provider_id string<uuid>
    Only this secret provider.

Response 200 OK application/json

  • items array[object]
    • created_at string<date-time>
    • fields map[object]
      • provider object nullable
        • id string<uuid>
      • value string
    • 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
    • last_check string<date-time>
    • name string
    • protocol string
    • revision integer
    • updated_at string<date-time>
  • 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/account/organizations/{id}/secret_providers' \
  -H 'Authorization: Bearer <badge>'

Response 200

{
  "items": [
    {
      "created_at": "2026-01-01T00:00:00Z",
      "fields": {
        "key": {
          "provider": {
            "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
          },
          "value": "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"
      },
      "last_check": "2026-01-01T00:00:00Z",
      "name": "string",
      "protocol": "string",
      "revision": 0,
      "updated_at": "2026-01-01T00:00:00Z"
    }
  ],
  "total": 0
}

Create a secret provider

POST /api/v1/account/organizations/{id}/secret_providers
Badge

Path parameters

  • id string<uuid> required
    Organization ID, at or below the caller’s.

Request body application/json required

  • fields map[object]
    • provider object nullable
      • id string<uuid>
    • value string
  • integration object
    • id string<uuid>
  • name string
  • protocol string

Response 200 OK application/json

  • created_at string<date-time>
  • fields map[object]
    • provider object nullable
      • id string<uuid>
    • value string
  • 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
  • last_check string<date-time>
  • name string
  • protocol string
  • revision integer
  • updated_at string<date-time>

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/account/organizations/{id}/secret_providers' \
  -H 'Authorization: Bearer <badge>' \
  -H 'Content-Type: application/json' \
  -d '{
  "fields": {
    "key": {
      "provider": {
        "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
      },
      "value": "string"
    }
  },
  "integration": {
    "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
  },
  "name": "string",
  "protocol": "string"
}'

Response 200

{
  "created_at": "2026-01-01T00:00:00Z",
  "fields": {
    "key": {
      "provider": {
        "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
      },
      "value": "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"
  },
  "last_check": "2026-01-01T00:00:00Z",
  "name": "string",
  "protocol": "string",
  "revision": 0,
  "updated_at": "2026-01-01T00:00:00Z"
}

Create a secret provider from a form

POST /api/v1/account/organizations/{id}/secret_providers/form
Badge
Validates a configuration document against the provider’s form schema and stores it.

Path parameters

  • id string required

Request body application/json required

  • configuration map[any]
  • integration object
    • id string<uuid>
  • name string
  • protocol string

Response 200 OK application/json

  • configuration map[object]
    • provider object nullable
      • id string<uuid>
    • value string
  • id string<uuid>

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/account/organizations/{id}/secret_providers/form' \
  -H 'Authorization: Bearer <badge>' \
  -H 'Content-Type: application/json' \
  -d '{
  "configuration": {
    "key": {}
  },
  "integration": {
    "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
  },
  "name": "string",
  "protocol": "string"
}'

Response 200

{
  "configuration": {
    "key": {
      "provider": {
        "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
      },
      "value": "string"
    }
  },
  "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
}

Get a secret provider

GET /api/v1/secret_providers/{id}
Badge

Path parameters

  • id string required

Query parameters

  • organization_id string<uuid>
    Organization to act on, at or below the caller’s. Defaults to the caller’s.
  • revision integer
    Revision to load. 0 is the latest.
    Default: 0

Response 200 OK application/json

  • created_at string<date-time>
  • fields map[object]
    • provider object nullable
      • id string<uuid>
    • value string
  • 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
  • last_check string<date-time>
  • name string
  • protocol string
  • revision integer
  • updated_at string<date-time>

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/secret_providers/{id}' \
  -H 'Authorization: Bearer <badge>'

Response 200

{
  "created_at": "2026-01-01T00:00:00Z",
  "fields": {
    "key": {
      "provider": {
        "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
      },
      "value": "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"
  },
  "last_check": "2026-01-01T00:00:00Z",
  "name": "string",
  "protocol": "string",
  "revision": 0,
  "updated_at": "2026-01-01T00:00:00Z"
}

Update a secret provider

PUT /api/v1/secret_providers/{id}
Badge

Path parameters

  • 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

  • fields map[object]
    • provider object nullable
      • id string<uuid>
    • value string
  • integration object
    • id string<uuid>
  • name string
  • protocol string

Response 200 OK application/json

  • created_at string<date-time>
  • fields map[object]
    • provider object nullable
      • id string<uuid>
    • value string
  • 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
  • last_check string<date-time>
  • name string
  • protocol string
  • revision integer
  • updated_at string<date-time>

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 PUT 'https://pcp.example.com/api/v1/secret_providers/{id}' \
  -H 'Authorization: Bearer <badge>' \
  -H 'Content-Type: application/json' \
  -d '{
  "fields": {
    "key": {
      "provider": {
        "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
      },
      "value": "string"
    }
  },
  "integration": {
    "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
  },
  "name": "string",
  "protocol": "string"
}'

Response 200

{
  "created_at": "2026-01-01T00:00:00Z",
  "fields": {
    "key": {
      "provider": {
        "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
      },
      "value": "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"
  },
  "last_check": "2026-01-01T00:00:00Z",
  "name": "string",
  "protocol": "string",
  "revision": 0,
  "updated_at": "2026-01-01T00:00:00Z"
}

Delete a secret provider

DELETE /api/v1/secret_providers/{id}
Badge

Path parameters

  • 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

  • deleted_at string<date-time>
  • revision 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 -X DELETE 'https://pcp.example.com/api/v1/secret_providers/{id}' \
  -H 'Authorization: Bearer <badge>'

Response 200

{
  "deleted_at": "2026-01-01T00:00:00Z",
  "revision": 0
}

List what the caller may do on a secret provider

GET /api/v1/secret_providers/{id}/capabilities
Badge

Path parameters

  • 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

  • actions array[string]
  • id string<uuid>
  • resource 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 'https://pcp.example.com/api/v1/secret_providers/{id}/capabilities' \
  -H 'Authorization: Bearer <badge>'

Response 200

{
  "actions": [
    "string"
  ],
  "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90",
  "resource": "string"
}

Get a secret provider as form data

GET /api/v1/secret_providers/{id}/form
Badge
Answers the provider’s configuration document with its form schema.

Path parameters

  • id string required

Query parameters

  • organization_id string<uuid>
    Organization to act on, at or below the caller’s. Defaults to the caller’s.
  • revision integer
    Revision to load. 0 is the latest.
    Default: 0

Response 200 OK application/json

  • configuration map[any]
  • created_at string<date-time>
  • 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
  • last_check string<date-time>
  • name string
  • protocol string
  • revision integer
  • schema object
    • bundle_fields map[object] nullable
      • provider object nullable
        • id string<uuid>
      • value string
    • initial map[any]
    • schema map[any]
    • scheme string
  • updated_at string<date-time>

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/secret_providers/{id}/form' \
  -H 'Authorization: Bearer <badge>'

Response 200

{
  "configuration": {
    "key": {}
  },
  "created_at": "2026-01-01T00:00:00Z",
  "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"
  },
  "last_check": "2026-01-01T00:00:00Z",
  "name": "string",
  "protocol": "string",
  "revision": 0,
  "schema": {
    "bundle_fields": {
      "key": {
        "provider": {
          "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
        },
        "value": "string"
      }
    },
    "initial": {
      "key": {}
    },
    "schema": {
      "key": {}
    },
    "scheme": "string"
  },
  "updated_at": "2026-01-01T00:00:00Z"
}

Update a secret provider from a form

POST /api/v1/secret_providers/{id}/form
Badge
Validates a configuration document against the provider’s form schema and stores a new revision. Stored keys the schema does not show are kept.

Path parameters

  • id string required

Request body application/json required

  • configuration map[any]
  • integration object
    • id string<uuid>
  • name string
  • protocol string

Response 200 OK application/json

  • configuration map[object]
    • provider object nullable
      • id string<uuid>
    • value string
  • id string<uuid>

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/secret_providers/{id}/form' \
  -H 'Authorization: Bearer <badge>' \
  -H 'Content-Type: application/json' \
  -d '{
  "configuration": {
    "key": {}
  },
  "integration": {
    "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
  },
  "name": "string",
  "protocol": "string"
}'

Response 200

{
  "configuration": {
    "key": {
      "provider": {
        "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
      },
      "value": "string"
    }
  },
  "id": "3f1e4a2c-9b7d-4e0f-8a11-2c5d6e7f8a90"
}

Test a secret provider

GET /api/v1/secret_providers/{id}/test
Badge

Path parameters

  • 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

  • error string nullable
  • ok boolean

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/secret_providers/{id}/test' \
  -H 'Authorization: Bearer <badge>'

Response 200

{
  "error": "string",
  "ok": true
}