{
  "openapi": "3.1.0",
  "info": {
    "title": "Claudia Partner 公開API契約",
    "version": "0.7.0-experimental",
    "description": "API 0.7.0-experimentalの固定契約。機能の有効化・認可・実稼働版は環境ごとに確認してください。説明文は公開向けに一般化しています。"
  },
  "paths": {
    "/v1/me": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "identity.me",
        "tags": [
          "business"
        ],
        "x-availability": "提供中（環境による）",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "actor_type": {
                      "type": "string",
                      "enum": [
                        "human"
                      ]
                    },
                    "department_id": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "is_external": {
                      "type": "boolean"
                    },
                    "active": {
                      "type": "boolean"
                    },
                    "version": {
                      "type": "string",
                      "pattern": "^[1-9][0-9]*$",
                      "maxLength": 19
                    },
                    "permissions": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "name": {
                            "type": "string",
                            "pattern": "^[a-z][a-z0-9_]*:[a-z][a-z0-9_]*$"
                          },
                          "expires_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date-time"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "name",
                          "expires_at"
                        ]
                      }
                    },
                    "capabilities": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "name": {
                            "type": "string",
                            "pattern": "^[a-z][a-z0-9_]*$"
                          },
                          "expires_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date-time"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "name",
                          "expires_at"
                        ]
                      }
                    },
                    "contract_expires_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "checked_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "session": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "absolute_expires_at": {
                          "type": "string",
                          "format": "date-time"
                        },
                        "idle_expires_at": {
                          "type": "string",
                          "format": "date-time"
                        }
                      },
                      "required": [
                        "absolute_expires_at",
                        "idle_expires_at"
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "permissions",
                    "capabilities",
                    "contract_expires_at",
                    "session",
                    "checked_at"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "me": {
                    "summary": "本人を確認",
                    "value": {
                      "id": "11111111-1111-4111-8111-111111111111",
                      "actor_type": "human",
                      "permissions": [],
                      "capabilities": [],
                      "contract_expires_at": null,
                      "checked_at": "2026-10-04T00:00:00Z",
                      "session": {
                        "absolute_expires_at": "2026-10-04T01:00:00Z",
                        "idle_expires_at": "2026-10-04T00:30:00Z"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "ログイン中の本人情報と現在権限を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ログイン中の本人情報と現在権限を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "auth-required": {
                    "summary": "資格なしは401",
                    "value": {
                      "type": "urn:hub:problem:auth-required",
                      "title": "操作を完了できません",
                      "status": 401,
                      "code": "AUTH_REQUIRED",
                      "request_id": "33333333-3333-4333-8333-333333333333"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "ログイン中の本人情報と現在権限を取得での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ログイン中の本人情報と現在権限を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ログイン中の本人情報と現在権限を取得での拒否・失敗: LOCK_BUSY。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ログイン中の本人情報と現在権限を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ログイン中の本人情報と現在権限を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ログイン中の本人情報と現在権限を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ログイン中の本人情報と現在権限を取得",
        "description": "ログイン中の本人情報と現在権限を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 本人と現在セッションの境界を維持する。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "registered_operation_authorization",
              "operation_id": "identity.me",
              "checks": [
                "current_roles",
                "resource_scope",
                "field_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/jobs": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "job.list",
        "tags": [
          "business"
        ],
        "x-availability": "提供中（環境による）",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "job_number",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "customer_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "department_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "entry_route",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256
            }
          },
          {
            "name": "status_code",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_]*$"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(?:[1-9]|[1-9][0-9]|1[0-9]{2})$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "job_number": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 128
                          },
                          "customer_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "department_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "sales_rep_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "production_rep_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "entry_route": {
                            "type": "string",
                            "minLength": 1
                          },
                          "status_code": {
                            "type": "string",
                            "pattern": "^[a-z][a-z0-9_]*$",
                            "description": "Business workflow state governed by the job Plugin and reference.job_statuses; unrelated to custom table draft/committed persistence state."
                          },
                          "authority": {
                            "type": "string",
                            "enum": [
                              "filemaker",
                              "hub"
                            ]
                          },
                          "authority_epoch": {
                            "type": "string",
                            "pattern": "^[1-9][0-9]*$",
                            "maxLength": 19
                          },
                          "authority_switched_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date-time"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "authority_switched_by": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "source_system": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "source_record_id": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "source_revision": {
                            "anyOf": [
                              {
                                "type": "string",
                                "pattern": "^(0|[1-9][0-9]*)$",
                                "maxLength": 19
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "source_payload_hash": {
                            "anyOf": [
                              {
                                "type": "string",
                                "pattern": "^\\\\x[0-9a-f]{64}$"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "legacy_mod_ts": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date-time"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "site_name": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "media_note": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "notes": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "version": {
                            "type": "string",
                            "pattern": "^[1-9][0-9]*$",
                            "maxLength": 19
                          },
                          "created_at": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "created_by": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "updated_at": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "updated_by": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "deleted_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date-time"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "id"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 199
                    },
                    "limit": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 199
                    },
                    "has_more": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "items",
                    "limit",
                    "has_more"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "ケースを一覧取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ケースを一覧取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ケースを一覧取得での拒否・失敗: AI_MUST_USE_PROPOSALS, AI_SUSPENDED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_MUST_USE_PROPOSALS",
              "AI_SUSPENDED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ケースを一覧取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ケースを一覧取得での拒否・失敗: AUTHORITY_CONFLICT, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTHORITY_CONFLICT",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ケースを一覧取得での拒否・失敗: FIELD_NOT_ALLOWED, FIELD_REQUIRED, FIELD_UNKNOWN, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "FIELD_REQUIRED",
              "FIELD_UNKNOWN",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ケースを一覧取得での拒否・失敗: AI_RATE_LIMITED, RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_RATE_LIMITED",
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ケースを一覧取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ケースを一覧取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ケースを一覧取得",
        "description": "ケースを一覧取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在のケース権限と業務状態を検査する。status_codeは表のdraft/committedとは別。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "registered_operation_authorization",
              "operation_id": "job.list",
              "checks": [
                "current_roles",
                "resource_scope",
                "field_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "job.create",
        "tags": [
          "business"
        ],
        "x-availability": "提供中（環境による）",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "job_number": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 128
                  },
                  "customer_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "department_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sales_rep_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "production_rep_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "entry_route": {
                    "type": "string",
                    "minLength": 1
                  },
                  "status_code": {
                    "type": "string",
                    "pattern": "^[a-z][a-z0-9_]*$"
                  },
                  "site_name": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "media_note": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "notes": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "job_number",
                  "entry_route",
                  "status_code"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "version": {
                      "type": "string",
                      "pattern": "^[1-9][0-9]*$",
                      "maxLength": 19
                    }
                  },
                  "required": [
                    "id"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "ケースを新規作成での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ケースを新規作成での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ケースを新規作成での拒否・失敗: AI_MUST_USE_PROPOSALS, AI_SUSPENDED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_MUST_USE_PROPOSALS",
              "AI_SUSPENDED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ケースを新規作成での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ケースを新規作成での拒否・失敗: AUTHORITY_CONFLICT, DUPLICATE, IDEMPOTENCY_IN_PROGRESS, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTHORITY_CONFLICT",
              "DUPLICATE",
              "IDEMPOTENCY_IN_PROGRESS",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "ケースを新規作成での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "ケースを新規作成での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "ケースを新規作成での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ケースを新規作成での拒否・失敗: FIELD_NOT_ALLOWED, FIELD_REQUIRED, FIELD_UNKNOWN, IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "FIELD_REQUIRED",
              "FIELD_UNKNOWN",
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "ケースを新規作成での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ケースを新規作成での拒否・失敗: AI_RATE_LIMITED, RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_RATE_LIMITED",
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ケースを新規作成での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ケースを新規作成での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ケースを新規作成",
        "description": "ケースを新規作成。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在のケース権限と業務状態を検査する。status_codeは表のdraft/committedとは別。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "registered_operation_authorization",
              "operation_id": "job.create",
              "checks": [
                "current_roles",
                "resource_scope",
                "field_policy",
                "write_preconditions"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/jobs/{id}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "job.get",
        "tags": [
          "business"
        ],
        "x-availability": "提供中（環境による）",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "job_number": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 128
                    },
                    "customer_id": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "department_id": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "sales_rep_id": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "production_rep_id": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "entry_route": {
                      "type": "string",
                      "minLength": 1
                    },
                    "status_code": {
                      "type": "string",
                      "pattern": "^[a-z][a-z0-9_]*$",
                      "description": "Business workflow state governed by the job Plugin and reference.job_statuses; unrelated to custom table draft/committed persistence state."
                    },
                    "authority": {
                      "type": "string",
                      "enum": [
                        "filemaker",
                        "hub"
                      ]
                    },
                    "authority_epoch": {
                      "type": "string",
                      "pattern": "^[1-9][0-9]*$",
                      "maxLength": 19
                    },
                    "authority_switched_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "authority_switched_by": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "source_system": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "source_record_id": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "source_revision": {
                      "anyOf": [
                        {
                          "type": "string",
                          "pattern": "^(0|[1-9][0-9]*)$",
                          "maxLength": 19
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "source_payload_hash": {
                      "anyOf": [
                        {
                          "type": "string",
                          "pattern": "^\\\\x[0-9a-f]{64}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "legacy_mod_ts": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "site_name": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "media_note": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "notes": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "version": {
                      "type": "string",
                      "pattern": "^[1-9][0-9]*$",
                      "maxLength": 19
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "created_by": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "updated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "updated_by": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "deleted_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "ケースを1件取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ケースを1件取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ケースを1件取得での拒否・失敗: AI_MUST_USE_PROPOSALS, AI_SUSPENDED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_MUST_USE_PROPOSALS",
              "AI_SUSPENDED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ケースを1件取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ケースを1件取得での拒否・失敗: AUTHORITY_CONFLICT, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTHORITY_CONFLICT",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ケースを1件取得での拒否・失敗: FIELD_NOT_ALLOWED, FIELD_REQUIRED, FIELD_UNKNOWN, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "FIELD_REQUIRED",
              "FIELD_UNKNOWN",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ケースを1件取得での拒否・失敗: AI_RATE_LIMITED, RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_RATE_LIMITED",
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ケースを1件取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ケースを1件取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ケースを1件取得",
        "description": "ケースを1件取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在のケース権限と業務状態を検査する。status_codeは表のdraft/committedとは別。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "registered_operation_authorization",
              "operation_id": "job.get",
              "checks": [
                "current_roles",
                "resource_scope",
                "field_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "delete": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "job.delete",
        "tags": [
          "business"
        ],
        "x-availability": "提供中（環境による）",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "null"
                }
              }
            }
          },
          "400": {
            "description": "ケースを削除での拒否・失敗: BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ケースを削除での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ケースを削除での拒否・失敗: AI_MUST_USE_PROPOSALS, AI_SUSPENDED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_MUST_USE_PROPOSALS",
              "AI_SUSPENDED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ケースを削除での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ケースを削除での拒否・失敗: AUTHORITY_CONFLICT, IDEMPOTENCY_IN_PROGRESS, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTHORITY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "ケースを削除での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ケースを削除での拒否・失敗: FIELD_NOT_ALLOWED, FIELD_REQUIRED, FIELD_UNKNOWN, IDEMPOTENCY_MISMATCH, INVALID_TRANSITION, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "FIELD_REQUIRED",
              "FIELD_UNKNOWN",
              "IDEMPOTENCY_MISMATCH",
              "INVALID_TRANSITION",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "ケースを削除での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ケースを削除での拒否・失敗: AI_RATE_LIMITED, RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_RATE_LIMITED",
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ケースを削除での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ケースを削除での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ケースを削除",
        "description": "ケースを削除。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在のケース権限と業務状態を検査する。status_codeは表のdraft/committedとは別。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "registered_operation_authorization",
              "operation_id": "job.delete",
              "checks": [
                "current_roles",
                "resource_scope",
                "field_policy",
                "write_preconditions"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "patch": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "job.update",
        "tags": [
          "business"
        ],
        "x-availability": "提供中（環境による）",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/merge-patch+json": {
              "schema": {
                "type": "object",
                "properties": {
                  "status_code": {
                    "type": "string",
                    "pattern": "^[a-z][a-z0-9_]*$"
                  },
                  "site_name": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "media_note": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "notes": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [],
                "additionalProperties": false,
                "minProperties": 1
              },
              "examples": {
                "if-match": {
                  "summary": "If-Matchで既存ケースを更新",
                  "value": {
                    "notes": "確認済み"
                  }
                },
                "conflict": {
                  "summary": "古い版で更新すると412",
                  "value": {
                    "notes": "別の変更"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "version": {
                      "type": "string",
                      "pattern": "^[1-9][0-9]*$",
                      "maxLength": 19
                    }
                  },
                  "required": [
                    "id"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "if-match": {
                    "summary": "If-Matchで既存ケースを更新",
                    "value": {
                      "id": "11111111-1111-4111-8111-111111111111",
                      "version": "2"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "ケースの指定項目を更新での拒否・失敗: BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ケースの指定項目を更新での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ケースの指定項目を更新での拒否・失敗: AI_MUST_USE_PROPOSALS, AI_SUSPENDED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_MUST_USE_PROPOSALS",
              "AI_SUSPENDED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ケースの指定項目を更新での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ケースの指定項目を更新での拒否・失敗: AUTHORITY_CONFLICT, IDEMPOTENCY_IN_PROGRESS, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTHORITY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "ケースの指定項目を更新での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "examples": {
                  "conflict": {
                    "summary": "古い版で更新すると412",
                    "value": {
                      "type": "urn:hub:problem:version-conflict",
                      "title": "操作を完了できません",
                      "status": 412,
                      "code": "VERSION_CONFLICT",
                      "request_id": "33333333-3333-4333-8333-333333333333"
                    }
                  }
                }
              }
            }
          },
          "413": {
            "description": "ケースの指定項目を更新での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "ケースの指定項目を更新での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ケースの指定項目を更新での拒否・失敗: EMPTY_PATCH, FIELD_NOT_ALLOWED, FIELD_REQUIRED, FIELD_UNKNOWN, IDEMPOTENCY_MISMATCH, INVALID_TRANSITION, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "EMPTY_PATCH",
              "FIELD_NOT_ALLOWED",
              "FIELD_REQUIRED",
              "FIELD_UNKNOWN",
              "IDEMPOTENCY_MISMATCH",
              "INVALID_TRANSITION",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "ケースの指定項目を更新での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ケースの指定項目を更新での拒否・失敗: AI_RATE_LIMITED, RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_RATE_LIMITED",
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ケースの指定項目を更新での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ケースの指定項目を更新での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ケースの指定項目を更新",
        "description": "ケースの指定項目を更新。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在のケース権限と業務状態を検査する。status_codeは表のdraft/committedとは別。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "registered_operation_authorization",
              "operation_id": "job.update",
              "checks": [
                "current_roles",
                "resource_scope",
                "field_policy",
                "write_preconditions"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/jobs/export": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "job.export",
        "tags": [
          "business"
        ],
        "x-availability": "提供中（環境による）",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "job_number",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "customer_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "department_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "entry_route",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256
            }
          },
          {
            "name": "status_code",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_]*$"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^(?:[1-9]|[1-9][0-9]|1[0-9]{2})$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "job_number": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 128
                          },
                          "customer_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "department_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "sales_rep_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "production_rep_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "entry_route": {
                            "type": "string",
                            "minLength": 1
                          },
                          "status_code": {
                            "type": "string",
                            "pattern": "^[a-z][a-z0-9_]*$",
                            "description": "Business workflow state governed by the job Plugin and reference.job_statuses; unrelated to custom table draft/committed persistence state."
                          },
                          "authority": {
                            "type": "string",
                            "enum": [
                              "filemaker",
                              "hub"
                            ]
                          },
                          "authority_epoch": {
                            "type": "string",
                            "pattern": "^[1-9][0-9]*$",
                            "maxLength": 19
                          },
                          "authority_switched_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date-time"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "authority_switched_by": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "source_system": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "source_record_id": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "source_revision": {
                            "anyOf": [
                              {
                                "type": "string",
                                "pattern": "^(0|[1-9][0-9]*)$",
                                "maxLength": 19
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "source_payload_hash": {
                            "anyOf": [
                              {
                                "type": "string",
                                "pattern": "^\\\\x[0-9a-f]{64}$"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "legacy_mod_ts": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date-time"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "site_name": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "media_note": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "notes": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "version": {
                            "type": "string",
                            "pattern": "^[1-9][0-9]*$",
                            "maxLength": 19
                          },
                          "created_at": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "created_by": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "updated_at": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "updated_by": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "deleted_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date-time"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "id"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 199
                    },
                    "limit": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 199
                    },
                    "has_more": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "items",
                    "limit",
                    "has_more"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "ケースをエクスポートでの拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ケースをエクスポートでの拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ケースをエクスポートでの拒否・失敗: AI_MUST_USE_PROPOSALS, AI_SUSPENDED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_MUST_USE_PROPOSALS",
              "AI_SUSPENDED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ケースをエクスポートでの拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ケースをエクスポートでの拒否・失敗: AUTHORITY_CONFLICT, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTHORITY_CONFLICT",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ケースをエクスポートでの拒否・失敗: FIELD_NOT_ALLOWED, FIELD_REQUIRED, FIELD_UNKNOWN, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "FIELD_REQUIRED",
              "FIELD_UNKNOWN",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ケースをエクスポートでの拒否・失敗: AI_RATE_LIMITED, RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_RATE_LIMITED",
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ケースをエクスポートでの拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ケースをエクスポートでの拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ケースをエクスポート",
        "description": "ケースをエクスポート。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在のケース権限と業務状態を検査する。status_codeは表のdraft/committedとは別。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "registered_operation_authorization",
              "operation_id": "job.export",
              "checks": [
                "current_roles",
                "resource_scope",
                "field_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/jobs/count": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "job.count",
        "tags": [
          "business"
        ],
        "x-availability": "提供中（環境による）",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "job_number",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            }
          },
          {
            "name": "customer_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "department_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "entry_route",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 256
            }
          },
          {
            "name": "status_code",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_]*$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "count": {
                      "type": "string",
                      "pattern": "^(0|[1-9][0-9]*)$",
                      "maxLength": 19
                    }
                  },
                  "required": [
                    "count"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "ケース数を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ケース数を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ケース数を取得での拒否・失敗: AI_MUST_USE_PROPOSALS, AI_SUSPENDED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_MUST_USE_PROPOSALS",
              "AI_SUSPENDED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ケース数を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ケース数を取得での拒否・失敗: AUTHORITY_CONFLICT, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTHORITY_CONFLICT",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ケース数を取得での拒否・失敗: FIELD_NOT_ALLOWED, FIELD_REQUIRED, FIELD_UNKNOWN, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "FIELD_REQUIRED",
              "FIELD_UNKNOWN",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ケース数を取得での拒否・失敗: AI_RATE_LIMITED, RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_RATE_LIMITED",
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ケース数を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ケース数を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ケース数を取得",
        "description": "ケース数を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在のケース権限と業務状態を検査する。status_codeは表のdraft/committedとは別。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "registered_operation_authorization",
              "operation_id": "job.count",
              "checks": [
                "current_roles",
                "resource_scope",
                "field_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/invoices/{id}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "invoice.get",
        "tags": [
          "business"
        ],
        "x-availability": "提供中（環境による）",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "customer_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "draft",
                        "confirmed",
                        "issued",
                        "paid",
                        "void"
                      ]
                    },
                    "calculation_profile": {
                      "type": "string",
                      "minLength": 1
                    },
                    "total_amount_jpy": {
                      "type": "string",
                      "pattern": "^(0|[1-9][0-9]{0,18})$"
                    },
                    "confirmed_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "confirmed_by": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "version": {
                      "type": "string",
                      "pattern": "^[1-9][0-9]{0,18}$"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "created_by": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "updated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "updated_by": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "deleted_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "請求書を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "請求書を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "請求書を取得での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "請求書を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "請求書を取得での拒否・失敗: LOCK_BUSY。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "請求書を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "請求書を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "請求書を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "請求書を取得",
        "description": "請求書を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在権限で請求書を取得する。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "registered_operation_authorization",
              "operation_id": "invoice.get",
              "checks": [
                "current_roles",
                "resource_scope",
                "field_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/contacts/{id}/erasure": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "contact.erasure_status",
        "tags": [
          "business"
        ],
        "x-availability": "提供中（環境による）",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "contact_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "erasure_state": {
                      "type": "string",
                      "enum": [
                        "none",
                        "requested",
                        "erased"
                      ]
                    },
                    "requests": {
                      "type": "array",
                      "maxItems": 199,
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "contact_id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "pending_ledger",
                              "ready",
                              "completed"
                            ]
                          },
                          "requested_at": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "completed_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date-time"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "version": {
                            "type": "string",
                            "pattern": "^[1-9][0-9]{0,18}$"
                          }
                        },
                        "required": [
                          "id"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "has_more": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "contact_id",
                    "erasure_state",
                    "requests",
                    "has_more"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "連絡先の消去状況を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "連絡先の消去状況を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "連絡先の消去状況を取得での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "連絡先の消去状況を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "連絡先の消去状況を取得での拒否・失敗: LOCK_BUSY。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "連絡先の消去状況を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "連絡先の消去状況を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "連絡先の消去状況を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "連絡先の消去状況を取得",
        "description": "連絡先の消去状況を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在権限で消去状態を取得する。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "registered_operation_authorization",
              "operation_id": "contact.erasure_status",
              "checks": [
                "current_roles",
                "resource_scope",
                "field_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/proposals/{id}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "proposal.get",
        "tags": [
          "business"
        ],
        "x-availability": "提供中（環境による）",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "target_operation_id": {
                      "type": "string",
                      "const": "job.update"
                    },
                    "job_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "expected_job_version": {
                      "type": "string",
                      "pattern": "^[1-9][0-9]{0,18}$"
                    },
                    "actor_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "requester_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "ai_session_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "patch": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "status_code": {
                              "type": "string",
                              "pattern": "^[a-z][a-z0-9_]*$",
                              "description": "Business workflow state governed by the job Plugin and reference.job_statuses; unrelated to custom table draft/committed persistence state."
                            }
                          },
                          "required": [
                            "status_code"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "rationale": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 1000
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "review_comment": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 1000
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "pending",
                        "approved",
                        "rejected",
                        "auto_applied",
                        "expired",
                        "conflict"
                      ]
                    },
                    "expires_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "settled_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "applied_version": {
                      "anyOf": [
                        {
                          "type": "string",
                          "pattern": "^[1-9][0-9]{0,18}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "purged_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "version": {
                      "type": "string",
                      "pattern": "^[1-9][0-9]{0,18}$"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "created_by": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "updated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "updated_by": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "id"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "承認提案を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "承認提案を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "承認提案を取得での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "承認提案を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "承認提案を取得での拒否・失敗: LOCK_BUSY, PROPOSAL_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "PROPOSAL_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "承認提案を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "承認提案を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "承認提案を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "承認提案を取得",
        "description": "承認提案を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在権限で承認提案を取得する。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "registered_operation_authorization",
              "operation_id": "proposal.get",
              "checks": [
                "current_roles",
                "resource_scope",
                "field_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/ai/sessions/{id}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "ai_session.get",
        "tags": [
          "business"
        ],
        "x-availability": "提供中（環境による）",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "requester_user_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "ai_client_user_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "runtime_id": {
                      "type": "string",
                      "minLength": 1
                    },
                    "task_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "provisioning",
                        "active",
                        "ended",
                        "revoked",
                        "expired",
                        "failed"
                      ]
                    },
                    "expires_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "ended_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "ended_reason": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "version": {
                      "type": "string",
                      "pattern": "^[1-9][0-9]{0,18}$"
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "created_by": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "updated_at": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "updated_by": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "id"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "AIセッションを取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "AIセッションを取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "AIセッションを取得での拒否・失敗: AI_SUSPENDED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AI_SUSPENDED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "AIセッションを取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "AIセッションを取得での拒否・失敗: LOCK_BUSY。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "AIセッションを取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "AIセッションを取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "AIセッションを取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "AIセッションを取得",
        "description": "AIセッションを取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在権限とMFAでAIセッションを取得する。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "registered_operation_authorization",
              "operation_id": "ai_session.get",
              "checks": [
                "current_roles",
                "resource_scope",
                "field_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/tables/{collection}/rows/{rowId}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "table.row",
        "tags": [
          "tables"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v1の行を1件取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在の表利用権と列権限で処理する。v1の行version、表revision、schema_version、共有viewの版を区別する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RowResult"
                }
              }
            }
          },
          "400": {
            "description": "v1の行を1件取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v1の行を1件取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v1の行を1件取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v1の行を1件取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v1の行を1件取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v1の行を1件取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v1の行を1件取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v1の行を1件取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v1の行を1件取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v1の行を1件取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v1_table_grant",
              "action": "row",
              "checks": [
                "current_role",
                "field_read_write",
                "row_visibility"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/tables": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "table.list",
        "tags": [
          "tables"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v1の利用可能な表を一覧取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在の表利用権と列権限で処理する。v1の行version、表revision、schema_version、共有viewの版を区別する。",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tables"
                },
                "examples": {
                  "tables": {
                    "summary": "v1の表一覧",
                    "value": {
                      "items": [
                        {
                          "id": "demo_tasks",
                          "revision": 1,
                          "label": "作業"
                        }
                      ],
                      "role": "designer"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "v1の利用可能な表を一覧取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v1の利用可能な表を一覧取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v1の利用可能な表を一覧取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v1の利用可能な表を一覧取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v1の利用可能な表を一覧取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v1の利用可能な表を一覧取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v1の利用可能な表を一覧取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v1の利用可能な表を一覧取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v1の利用可能な表を一覧取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v1の利用可能な表を一覧取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v1_table_grant",
              "action": "list",
              "checks": [
                "current_role",
                "field_read_write",
                "row_visibility"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/tables/{collection}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "table.definition",
        "tags": [
          "tables"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v1の表定義と列の権限を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在の表利用権と列権限で処理する。v1の行version、表revision、schema_version、共有viewの版を区別する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Definition"
                }
              }
            }
          },
          "400": {
            "description": "v1の表定義と列の権限を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v1の表定義と列の権限を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v1の表定義と列の権限を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v1の表定義と列の権限を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v1の表定義と列の権限を取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v1の表定義と列の権限を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v1の表定義と列の権限を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v1の表定義と列の権限を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v1の表定義と列の権限を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v1の表定義と列の権限を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v1_table_grant",
              "action": "definition",
              "checks": [
                "current_role",
                "field_read_write",
                "row_visibility"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "table.define",
        "tags": [
          "tables"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v1の表定義を作成・更新。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在の表利用権と列権限で処理する。v1の行version、表revision、schema_version、共有viewの版を区別する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            },
            "description": "Required for writes and import mode=commit; same key and identical payload on outcome uncertainty."
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\"[0-9]+\"$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Define"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DefineResult"
                }
              }
            }
          },
          "400": {
            "description": "v1の表定義を作成・更新での拒否・失敗: BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v1の表定義を作成・更新での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v1の表定義を作成・更新での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v1の表定義を作成・更新での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v1の表定義を作成・更新での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "v1の表定義を作成・更新での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "v1の表定義を作成・更新での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "v1の表定義を作成・更新での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v1の表定義を作成・更新での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "v1の表定義を作成・更新での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v1の表定義を作成・更新での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v1の表定義を作成・更新での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v1の表定義を作成・更新での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v1の表定義を作成・更新",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v1_table_grant",
              "action": "define",
              "checks": [
                "current_role",
                "field_read_write",
                "row_visibility",
                "designer"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/tables/{collection}/query": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "table.query",
        "tags": [
          "tables"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v1の行を検索。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在の表利用権と列権限で処理する。v1の行version、表revision、schema_version、共有viewの版を区別する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Query"
              },
              "examples": {
                "v1-query": {
                  "summary": "v1の最初のページ",
                  "value": {
                    "limit": 50,
                    "sort": {
                      "field": "title",
                      "direction": "asc"
                    },
                    "filters": [
                      {
                        "field": "title",
                        "op": "contains",
                        "value": "見本"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryResult"
                },
                "examples": {
                  "v1-query": {
                    "summary": "v1の最初のページ",
                    "value": {
                      "items": [
                        {
                          "id": "11111111-1111-4111-8111-111111111111",
                          "version": 1,
                          "status": "committed",
                          "values": {
                            "title": "見本"
                          }
                        }
                      ],
                      "next_cursor": null,
                      "revision": 2,
                      "schema_version": 1
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "v1の行を検索での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v1の行を検索での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v1の行を検索での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v1の行を検索での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v1の行を検索での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "v1の行を検索での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "v1の行を検索での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v1の行を検索での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v1の行を検索での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v1の行を検索での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v1の行を検索での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v1の行を検索",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v1_table_grant",
              "action": "query",
              "checks": [
                "current_role",
                "field_read_write",
                "row_visibility"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/tables/{collection}/batch": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "table.batch",
        "tags": [
          "tables"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v1の行を一括作成・更新・削除。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在の表利用権と列権限で処理する。v1の行version、表revision、schema_version、共有viewの版を区別する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            },
            "description": "Required for writes and import mode=commit; same key and identical payload on outcome uncertainty."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Batch"
              },
              "examples": {
                "v1-batch": {
                  "summary": "v1行を作成",
                  "value": {
                    "schema_version": 1,
                    "operations": [
                      {
                        "action": "create",
                        "id": "11111111-1111-4111-8111-111111111111",
                        "version": 0,
                        "status": "committed",
                        "values": {
                          "title": "見本"
                        }
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchResult"
                },
                "examples": {
                  "v1-batch": {
                    "summary": "v1行を作成",
                    "value": {
                      "rows": [
                        {
                          "id": "11111111-1111-4111-8111-111111111111",
                          "version": 1,
                          "deleted": false
                        }
                      ],
                      "schema_version": 1,
                      "revision": 2,
                      "committed": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "v1の行を一括作成・更新・削除での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v1の行を一括作成・更新・削除での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v1の行を一括作成・更新・削除での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v1の行を一括作成・更新・削除での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v1の行を一括作成・更新・削除での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "v1の行を一括作成・更新・削除での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "v1の行を一括作成・更新・削除での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "v1の行を一括作成・更新・削除での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v1の行を一括作成・更新・削除での拒否・失敗: EMPTY_PATCH, IDEMPOTENCY_MISMATCH, INVALID_TRANSITION, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "EMPTY_PATCH",
              "IDEMPOTENCY_MISMATCH",
              "INVALID_TRANSITION",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "v1の行を一括作成・更新・削除での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v1の行を一括作成・更新・削除での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v1の行を一括作成・更新・削除での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v1の行を一括作成・更新・削除での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v1の行を一括作成・更新・削除",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v1_table_grant",
              "action": "batch",
              "checks": [
                "current_role",
                "field_read_write",
                "row_visibility"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/tables/{collection}/views": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "table.views",
        "tags": [
          "tables"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v1の共有ビューを取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在の表利用権と列権限で処理する。v1の行version、表revision、schema_version、共有viewの版を区別する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Views"
                }
              }
            }
          },
          "400": {
            "description": "v1の共有ビューを取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v1の共有ビューを取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v1の共有ビューを取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v1の共有ビューを取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v1の共有ビューを取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v1の共有ビューを取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v1の共有ビューを取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v1の共有ビューを取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v1の共有ビューを取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v1の共有ビューを取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v1_table_grant",
              "action": "views",
              "checks": [
                "current_role",
                "field_read_write",
                "row_visibility"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "table.view",
        "tags": [
          "tables"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v1の共有ビューを保存。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在の表利用権と列権限で処理する。v1の行version、表revision、schema_version、共有viewの版を区別する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            },
            "description": "Required for writes and import mode=commit; same key and identical payload on outcome uncertainty."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ViewInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ViewResult"
                }
              }
            }
          },
          "400": {
            "description": "v1の共有ビューを保存での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v1の共有ビューを保存での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v1の共有ビューを保存での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v1の共有ビューを保存での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v1の共有ビューを保存での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "v1の共有ビューを保存での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "v1の共有ビューを保存での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "v1の共有ビューを保存での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v1の共有ビューを保存での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "v1の共有ビューを保存での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v1の共有ビューを保存での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v1の共有ビューを保存での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v1の共有ビューを保存での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v1の共有ビューを保存",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v1_table_grant",
              "action": "view",
              "checks": [
                "current_role",
                "field_read_write",
                "row_visibility",
                "designer"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/tables/{collection}/changes": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "table.changes",
        "tags": [
          "tables"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v1の表の変更版を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在の表利用権と列権限で処理する。v1の行version、表revision、schema_version、共有viewの版を区別する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Changes"
                }
              }
            }
          },
          "400": {
            "description": "v1の表の変更版を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v1の表の変更版を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v1の表の変更版を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v1の表の変更版を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v1の表の変更版を取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v1の表の変更版を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v1の表の変更版を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v1の表の変更版を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v1の表の変更版を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v1の表の変更版を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v1_table_grant",
              "action": "changes",
              "checks": [
                "current_role",
                "field_read_write",
                "row_visibility"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/tables/{collection}/import": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "table.import",
        "tags": [
          "tables"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v1のCSVを検査・反映。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在の表利用権と列権限で処理する。v1の行version、表revision、schema_version、共有viewの版を区別する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            },
            "description": "Required for writes and import mode=commit; same key and identical payload on outcome uncertainty."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Import"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchResult"
                }
              }
            }
          },
          "400": {
            "description": "v1のCSVを検査・反映での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v1のCSVを検査・反映での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v1のCSVを検査・反映での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v1のCSVを検査・反映での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v1のCSVを検査・反映での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "v1のCSVを検査・反映での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "v1のCSVを検査・反映での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "v1のCSVを検査・反映での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v1のCSVを検査・反映での拒否・失敗: EMPTY_PATCH, IDEMPOTENCY_MISMATCH, INVALID_TRANSITION, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "EMPTY_PATCH",
              "IDEMPOTENCY_MISMATCH",
              "INVALID_TRANSITION",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "v1のCSVを検査・反映での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v1のCSVを検査・反映での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v1のCSVを検査・反映での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v1のCSVを検査・反映での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v1のCSVを検査・反映",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v1_table_grant",
              "action": "import",
              "checks": [
                "current_role",
                "field_read_write",
                "row_visibility"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/tables/{collection}/export": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "table.export",
        "tags": [
          "tables"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v1のCSVを取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 現在の表利用権と列権限で処理する。v1の行version、表revision、schema_version、共有viewの版を区別する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Query"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportResult"
                }
              }
            }
          },
          "400": {
            "description": "v1のCSVを取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v1のCSVを取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v1のCSVを取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v1のCSVを取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v1のCSVを取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "v1のCSVを取得での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "v1のCSVを取得での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v1のCSVを取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v1のCSVを取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v1のCSVを取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v1のCSVを取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v1のCSVを取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v1_table_grant",
              "action": "export",
              "checks": [
                "current_role",
                "field_read_write",
                "row_visibility",
                "export_role"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.catalog",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v2の利用可能な表を一覧取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceCatalog"
                }
              }
            }
          },
          "400": {
            "description": "v2の利用可能な表を一覧取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v2の利用可能な表を一覧取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v2の利用可能な表を一覧取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v2の利用可能な表を一覧取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v2の利用可能な表を一覧取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v2の利用可能な表を一覧取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v2の利用可能な表を一覧取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v2の利用可能な表を一覧取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v2の利用可能な表を一覧取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v2の利用可能な表を一覧取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "visible_tables",
              "checks": [
                "current_grant",
                "expiry",
                "lifecycle_visibility"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/table-trash-policy": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.tableTrashPolicy",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "表ごみ箱の保持期間を確認。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceTrashPolicy"
                }
              }
            }
          },
          "400": {
            "description": "表ごみ箱の保持期間を確認での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "表ごみ箱の保持期間を確認での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "表ごみ箱の保持期間を確認での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "表ごみ箱の保持期間を確認での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "表ごみ箱の保持期間を確認での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "表ごみ箱の保持期間を確認での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "表ごみ箱の保持期間を確認での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "表ごみ箱の保持期間を確認での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "表ごみ箱の保持期間を確認での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "表ごみ箱の保持期間を確認",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "tableTrashPolicy",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            },
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/table-trash": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.tableTrash",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "ごみ箱の表を一覧取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceTableTrash"
                }
              }
            }
          },
          "400": {
            "description": "ごみ箱の表を一覧取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ごみ箱の表を一覧取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ごみ箱の表を一覧取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ごみ箱の表を一覧取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ごみ箱の表を一覧取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ごみ箱の表を一覧取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ごみ箱の表を一覧取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ごみ箱の表を一覧取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ごみ箱の表を一覧取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ごみ箱の表を一覧取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "tableTrash",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            },
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/lifecycle": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.tableLifecycle",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "表の状態と依存先を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceTableLifecycle"
                }
              }
            }
          },
          "400": {
            "description": "表の状態と依存先を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "表の状態と依存先を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "表の状態と依存先を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "表の状態と依存先を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "表の状態と依存先を取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "表の状態と依存先を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "表の状態と依存先を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "表の状態と依存先を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "表の状態と依存先を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "表の状態と依存先を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "tableLifecycle",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            },
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.tableTransition",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "表をごみ箱へ移動・復元。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceTableTransition"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceTableLifecycle"
                }
              }
            }
          },
          "400": {
            "description": "表をごみ箱へ移動・復元での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "表をごみ箱へ移動・復元での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "表をごみ箱へ移動・復元での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "表をごみ箱へ移動・復元での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "表をごみ箱へ移動・復元での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "表をごみ箱へ移動・復元での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "表をごみ箱へ移動・復元での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "表をごみ箱へ移動・復元での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "表をごみ箱へ移動・復元での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "表をごみ箱へ移動・復元での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "表をごみ箱へ移動・復元での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "表をごみ箱へ移動・復元での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "表をごみ箱へ移動・復元での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "表をごみ箱へ移動・復元",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "tableTransition",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            },
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/row-trash-policy": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.trashPolicy",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "行ごみ箱の保持期間を確認。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceTrashPolicy"
                }
              }
            }
          },
          "400": {
            "description": "行ごみ箱の保持期間を確認での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行ごみ箱の保持期間を確認での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行ごみ箱の保持期間を確認での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行ごみ箱の保持期間を確認での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行ごみ箱の保持期間を確認での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行ごみ箱の保持期間を確認での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行ごみ箱の保持期間を確認での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行ごみ箱の保持期間を確認での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行ごみ箱の保持期間を確認での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行ごみ箱の保持期間を確認",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "trashPolicy",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/trash": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.rowTrash",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "ごみ箱の行を一覧取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceTrashList"
                }
              }
            }
          },
          "400": {
            "description": "ごみ箱の行を一覧取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ごみ箱の行を一覧取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ごみ箱の行を一覧取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ごみ箱の行を一覧取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ごみ箱の行を一覧取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ごみ箱の行を一覧取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ごみ箱の行を一覧取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ごみ箱の行を一覧取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ごみ箱の行を一覧取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ごみ箱の行を一覧取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "rowTrash",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/trash/{trashId}/restore": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.rowRestore",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "ごみ箱の行を復元。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "trashId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceRestore"
              },
              "examples": {
                "v2-restore": {
                  "summary": "行をごみ箱から復元",
                  "value": {
                    "version": 3,
                    "reason": "検証後に復元"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceRestoreResult"
                },
                "examples": {
                  "v2-restore": {
                    "summary": "行をごみ箱から復元",
                    "value": {
                      "id": "11111111-1111-4111-8111-111111111111",
                      "version": 4,
                      "trash_id": "22222222-2222-4222-8222-222222222222",
                      "schema_version": 1
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "ごみ箱の行を復元での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ごみ箱の行を復元での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ごみ箱の行を復元での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ごみ箱の行を復元での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ごみ箱の行を復元での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "ごみ箱の行を復元での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "ごみ箱の行を復元での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "ごみ箱の行を復元での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ごみ箱の行を復元での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "ごみ箱の行を復元での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ごみ箱の行を復元での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ごみ箱の行を復元での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ごみ箱の行を復元での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ごみ箱の行を復元",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "rowRestore",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.definition",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v2の表定義と現在の列権限を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceDefinition"
                }
              }
            }
          },
          "400": {
            "description": "v2の表定義と現在の列権限を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v2の表定義と現在の列権限を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v2の表定義と現在の列権限を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v2の表定義と現在の列権限を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v2の表定義と現在の列権限を取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v2の表定義と現在の列権限を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v2の表定義と現在の列権限を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v2の表定義と現在の列権限を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v2の表定義と現在の列権限を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v2の表定義と現在の列権限を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "definition",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.define",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v2の表定義を作成・更新。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\"[0-9]+\"$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceDefine"
              },
              "examples": {
                "v2-define": {
                  "summary": "v2表を定義",
                  "value": {
                    "label": "作業",
                    "fields": [
                      {
                        "id": "title",
                        "label": "件名",
                        "type": "text",
                        "required": true,
                        "read": [
                          "staff"
                        ],
                        "write": [
                          "staff"
                        ],
                        "searchable": true,
                        "choices": []
                      }
                    ],
                    "export_roles": [
                      "staff"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceDefineResult"
                },
                "examples": {
                  "v2-define": {
                    "summary": "v2表を定義",
                    "value": {
                      "schema_version": 1
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "v2の表定義を作成・更新での拒否・失敗: BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v2の表定義を作成・更新での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v2の表定義を作成・更新での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v2の表定義を作成・更新での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v2の表定義を作成・更新での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "v2の表定義を作成・更新での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "v2の表定義を作成・更新での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "v2の表定義を作成・更新での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v2の表定義を作成・更新での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "v2の表定義を作成・更新での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v2の表定義を作成・更新での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v2の表定義を作成・更新での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v2の表定義を作成・更新での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v2の表定義を作成・更新",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "define",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy",
                "can_design"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/rows/{rowId}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.row",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v2の行を1件取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceRowResult"
                }
              }
            }
          },
          "400": {
            "description": "v2の行を1件取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v2の行を1件取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v2の行を1件取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v2の行を1件取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v2の行を1件取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v2の行を1件取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v2の行を1件取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v2の行を1件取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v2の行を1件取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v2の行を1件取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "row",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/query": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.query",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v2の行を検索。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Query"
              },
              "examples": {
                "v2-query": {
                  "summary": "v2行を検索",
                  "value": {
                    "limit": 50
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceQueryResult"
                },
                "examples": {
                  "v2-query": {
                    "summary": "v2行を検索",
                    "value": {
                      "items": [
                        {
                          "id": "11111111-1111-4111-8111-111111111111",
                          "version": 1,
                          "status": "committed",
                          "values": {
                            "title": "見本"
                          },
                          "closed": false,
                          "is_owner": true
                        }
                      ],
                      "next_cursor": null,
                      "revision": "sample-visible-revision",
                      "schema_version": 1
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "v2の行を検索での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v2の行を検索での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v2の行を検索での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v2の行を検索での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v2の行を検索での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "v2の行を検索での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "v2の行を検索での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v2の行を検索での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v2の行を検索での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v2の行を検索での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v2の行を検索での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v2の行を検索",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "query",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/batch": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.batch",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v2の行を一括変更。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceBatch"
              },
              "examples": {
                "v2-create": {
                  "summary": "v2行を作成",
                  "value": {
                    "schema_version": 1,
                    "operations": [
                      {
                        "action": "create",
                        "status": "committed",
                        "values": {
                          "title": "見本"
                        }
                      }
                    ]
                  }
                },
                "v2-update": {
                  "summary": "v2行を更新",
                  "value": {
                    "schema_version": 1,
                    "operations": [
                      {
                        "action": "update",
                        "id": "11111111-1111-4111-8111-111111111111",
                        "version": 1,
                        "values": {
                          "title": "確認済み"
                        }
                      }
                    ]
                  }
                },
                "v2-delete": {
                  "summary": "v2行をごみ箱へ",
                  "value": {
                    "schema_version": 1,
                    "operations": [
                      {
                        "action": "delete",
                        "id": "11111111-1111-4111-8111-111111111111",
                        "version": 2,
                        "reason": "検証用の行を削除"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceBatchResult"
                },
                "examples": {
                  "v2-create": {
                    "summary": "v2行を作成",
                    "value": {
                      "rows": [
                        {
                          "id": "11111111-1111-4111-8111-111111111111",
                          "version": 1,
                          "deleted": false
                        }
                      ],
                      "schema_version": 1
                    }
                  },
                  "v2-update": {
                    "summary": "v2行を更新",
                    "value": {
                      "rows": [
                        {
                          "id": "11111111-1111-4111-8111-111111111111",
                          "version": 2,
                          "deleted": false
                        }
                      ],
                      "schema_version": 1
                    }
                  },
                  "v2-delete": {
                    "summary": "v2行をごみ箱へ",
                    "value": {
                      "rows": [
                        {
                          "id": "11111111-1111-4111-8111-111111111111",
                          "version": 3,
                          "deleted": true
                        }
                      ],
                      "schema_version": 1
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "v2の行を一括変更での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v2の行を一括変更での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v2の行を一括変更での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v2の行を一括変更での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v2の行を一括変更での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "v2の行を一括変更での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "v2の行を一括変更での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "v2の行を一括変更での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v2の行を一括変更での拒否・失敗: IDEMPOTENCY_MISMATCH, INVALID_TRANSITION, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "INVALID_TRANSITION",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "v2の行を一括変更での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v2の行を一括変更での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v2の行を一括変更での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v2の行を一括変更での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v2の行を一括変更",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "batch",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy",
                "per_action_can_close_and_delete_scope"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/import": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.import",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v2の型付き行を一括取込。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceBatch"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceBatchResult"
                }
              }
            }
          },
          "400": {
            "description": "v2の型付き行を一括取込での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v2の型付き行を一括取込での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v2の型付き行を一括取込での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v2の型付き行を一括取込での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v2の型付き行を一括取込での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "v2の型付き行を一括取込での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "v2の型付き行を一括取込での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "v2の型付き行を一括取込での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v2の型付き行を一括取込での拒否・失敗: IDEMPOTENCY_MISMATCH, INVALID_TRANSITION, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "INVALID_TRANSITION",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "v2の型付き行を一括取込での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v2の型付き行を一括取込での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v2の型付き行を一括取込での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v2の型付き行を一括取込での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v2の型付き行を一括取込",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "import",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy",
                "can_import"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/changes": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.changes",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v2の可視範囲の変更版を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceChanges"
                }
              }
            }
          },
          "400": {
            "description": "v2の可視範囲の変更版を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v2の可視範囲の変更版を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v2の可視範囲の変更版を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v2の可視範囲の変更版を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v2の可視範囲の変更版を取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v2の可視範囲の変更版を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v2の可視範囲の変更版を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v2の可視範囲の変更版を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v2の可視範囲の変更版を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v2の可視範囲の変更版を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "changes",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/export": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.export",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v2のCSVを取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Query"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceExport"
                }
              }
            }
          },
          "400": {
            "description": "v2のCSVを取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v2のCSVを取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v2のCSVを取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v2のCSVを取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v2のCSVを取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "v2のCSVを取得での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "v2のCSVを取得での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v2のCSVを取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v2のCSVを取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v2のCSVを取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v2のCSVを取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v2のCSVを取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "export",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy",
                "export_role"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/export-records": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.exportRecords",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v2の出力権限でJSON行を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Query"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceQueryResult"
                }
              }
            }
          },
          "400": {
            "description": "v2の出力権限でJSON行を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v2の出力権限でJSON行を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v2の出力権限でJSON行を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v2の出力権限でJSON行を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v2の出力権限でJSON行を取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "v2の出力権限でJSON行を取得での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "v2の出力権限でJSON行を取得での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v2の出力権限でJSON行を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v2の出力権限でJSON行を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v2の出力権限でJSON行を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v2の出力権限でJSON行を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v2の出力権限でJSON行を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "exportRecords",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy",
                "export_role"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/aggregate": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.aggregate",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "v2の行をグループ集計。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceAggregate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceAggregateResult"
                }
              }
            }
          },
          "400": {
            "description": "v2の行をグループ集計での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "v2の行をグループ集計での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "v2の行をグループ集計での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "v2の行をグループ集計での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "v2の行をグループ集計での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "v2の行をグループ集計での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "v2の行をグループ集計での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "v2の行をグループ集計での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "v2の行をグループ集計での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "v2の行をグループ集計での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "v2の行をグループ集計での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "v2の行をグループ集計",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "aggregate",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/number-series/{series}/{period}": {
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.series",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "ケースの採番設定を更新。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "series",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "period",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\"[0-9]+\"$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NumberSeries"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NumberSeriesResult"
                }
              }
            }
          },
          "400": {
            "description": "ケースの採番設定を更新での拒否・失敗: BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ケースの採番設定を更新での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ケースの採番設定を更新での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ケースの採番設定を更新での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ケースの採番設定を更新での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "ケースの採番設定を更新での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "ケースの採番設定を更新での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "ケースの採番設定を更新での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ケースの採番設定を更新での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "ケースの採番設定を更新での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ケースの採番設定を更新での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ケースの採番設定を更新での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ケースの採番設定を更新での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ケースの採番設定を更新",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "series",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy",
                "can_design"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/cases": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.caseCreate",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "ケース台帳に新規採番して登録。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseCreate"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseResult"
                }
              }
            }
          },
          "400": {
            "description": "ケース台帳に新規採番して登録での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ケース台帳に新規採番して登録での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ケース台帳に新規採番して登録での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ケース台帳に新規採番して登録での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ケース台帳に新規採番して登録での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "ケース台帳に新規採番して登録での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "ケース台帳に新規採番して登録での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "ケース台帳に新規採番して登録での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ケース台帳に新規採番して登録での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "ケース台帳に新規採番して登録での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ケース台帳に新規採番して登録での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ケース台帳に新規採番して登録での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ケース台帳に新規採番して登録での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ケース台帳に新規採番して登録",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "caseCreate",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/cases/import": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.caseImport",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "既存のケース番号を取込。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseImport"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseImportResult"
                }
              }
            }
          },
          "400": {
            "description": "既存のケース番号を取込での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "既存のケース番号を取込での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "既存のケース番号を取込での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "既存のケース番号を取込での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "既存のケース番号を取込での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "既存のケース番号を取込での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "既存のケース番号を取込での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "既存のケース番号を取込での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "既存のケース番号を取込での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "既存のケース番号を取込での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "既存のケース番号を取込での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "既存のケース番号を取込での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "既存のケース番号を取込での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "既存のケース番号を取込",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "caseImport",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy",
                "can_import"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/cases/query": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.caseQuery",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "ケース台帳を検索。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseQuery"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseQueryResult"
                }
              }
            }
          },
          "400": {
            "description": "ケース台帳を検索での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ケース台帳を検索での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ケース台帳を検索での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ケース台帳を検索での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ケース台帳を検索での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "ケース台帳を検索での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "ケース台帳を検索での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ケース台帳を検索での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ケース台帳を検索での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ケース台帳を検索での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ケース台帳を検索での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ケース台帳を検索",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "caseQuery",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/cases/{rowId}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.caseGet",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "ケース台帳を1件取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseResult"
                }
              }
            }
          },
          "400": {
            "description": "ケース台帳を1件取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ケース台帳を1件取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ケース台帳を1件取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ケース台帳を1件取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ケース台帳を1件取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ケース台帳を1件取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ケース台帳を1件取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ケース台帳を1件取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ケース台帳を1件取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ケース台帳を1件取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "caseGet",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/cases/{rowId}/cancel": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.caseCancel",
        "tags": [
          "workspaces"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "ケースを取消。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CaseCancel"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CaseResult"
                }
              }
            }
          },
          "400": {
            "description": "ケースを取消での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "ケースを取消での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "ケースを取消での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "ケースを取消での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "ケースを取消での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "ケースを取消での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "ケースを取消での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "ケースを取消での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "ケースを取消での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "ケースを取消での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "ケースを取消での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "ケースを取消での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "ケースを取消での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "ケースを取消",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "caseCancel",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/access": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.socket.policy.get",
        "tags": [
          "workspace-sockets"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "表の関連・所属方式を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceAccessResult"
                }
              }
            }
          },
          "400": {
            "description": "表の関連・所属方式を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "表の関連・所属方式を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "表の関連・所属方式を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "表の関連・所属方式を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "表の関連・所属方式を取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "表の関連・所属方式を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "表の関連・所属方式を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "表の関連・所属方式を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "表の関連・所属方式を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "表の関連・所属方式を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "socket.policy.get",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.socket.policy.put",
        "tags": [
          "workspace-sockets"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "表の関連・所属方式を設定。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\"[0-9]+\"$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceAccess"
              },
              "examples": {
                "relation": {
                  "summary": "子表の親所属を設定",
                  "value": {
                    "mode": "members",
                    "parent_collection": "demo_tasks",
                    "field": "parent_id",
                    "cardinality": "many"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceSocketVersion"
                },
                "examples": {
                  "relation": {
                    "summary": "子表の親所属を設定",
                    "value": {
                      "version": 1
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "表の関連・所属方式を設定での拒否・失敗: BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "表の関連・所属方式を設定での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "表の関連・所属方式を設定での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "表の関連・所属方式を設定での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "表の関連・所属方式を設定での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "表の関連・所属方式を設定での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "表の関連・所属方式を設定での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "表の関連・所属方式を設定での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "表の関連・所属方式を設定での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "表の関連・所属方式を設定での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "表の関連・所属方式を設定での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "表の関連・所属方式を設定での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "表の関連・所属方式を設定での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "表の関連・所属方式を設定",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "socket.policy.put",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/members/{scopeId}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.socket.members",
        "tags": [
          "workspace-sockets"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "対象範囲の所属者を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scopeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceMembers"
                }
              }
            }
          },
          "400": {
            "description": "対象範囲の所属者を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "対象範囲の所属者を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "対象範囲の所属者を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "対象範囲の所属者を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "対象範囲の所属者を取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "対象範囲の所属者を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "対象範囲の所属者を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "対象範囲の所属者を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "対象範囲の所属者を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "対象範囲の所属者を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "socket.members",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/members/{scopeId}/{actorId}": {
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.socket.member.put",
        "tags": [
          "workspace-sockets"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "対象範囲の所属者を設定。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "scopeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "actorId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\"[0-9]+\"$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceMember"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceSocketVersion"
                }
              }
            }
          },
          "400": {
            "description": "対象範囲の所属者を設定での拒否・失敗: BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "対象範囲の所属者を設定での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "対象範囲の所属者を設定での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "対象範囲の所属者を設定での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "対象範囲の所属者を設定での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "対象範囲の所属者を設定での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "対象範囲の所属者を設定での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "対象範囲の所属者を設定での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "対象範囲の所属者を設定での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "対象範囲の所属者を設定での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "対象範囲の所属者を設定での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "対象範囲の所属者を設定での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "対象範囲の所属者を設定での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "対象範囲の所属者を設定",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "socket.member.put",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/events": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.socket.events",
        "tags": [
          "workspace-sockets"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "関連表の変更イベントを取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceEvents"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceEventsResult"
                }
              }
            }
          },
          "400": {
            "description": "関連表の変更イベントを取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "関連表の変更イベントを取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "関連表の変更イベントを取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "関連表の変更イベントを取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "関連表の変更イベントを取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "関連表の変更イベントを取得での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "関連表の変更イベントを取得での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "関連表の変更イベントを取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "関連表の変更イベントを取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "関連表の変更イベントを取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "関連表の変更イベントを取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "関連表の変更イベントを取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "socket.events",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/transactions": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspace.socket.transaction",
        "tags": [
          "workspace-sockets"
        ],
        "x-availability": "試験提供（環境による）",
        "description": "複数表の変更を同じトランザクションで反映。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2はv1と別契約。行所有権・列・所属・現在版を検査する。関連表の一括取引は最大8表・計100行操作で原子的に適用し、親行は既存IDを指定する。",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WorkspaceTransaction"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceTransactionResult"
                }
              }
            }
          },
          "400": {
            "description": "複数表の変更を同じトランザクションで反映での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "複数表の変更を同じトランザクションで反映での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "複数表の変更を同じトランザクションで反映での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "複数表の変更を同じトランザクションで反映での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "複数表の変更を同じトランザクションで反映での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "複数表の変更を同じトランザクションで反映での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "複数表の変更を同じトランザクションで反映での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "複数表の変更を同じトランザクションで反映での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "複数表の変更を同じトランザクションで反映での拒否・失敗: IDEMPOTENCY_MISMATCH, INVALID_TRANSITION, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "INVALID_TRANSITION",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "複数表の変更を同じトランザクションで反映での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "複数表の変更を同じトランザクションで反映での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "複数表の変更を同じトランザクションで反映での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "複数表の変更を同じトランザクションで反映での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "複数表の変更を同じトランザクションで反映",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_table_grant",
              "action": "socket.transaction",
              "checks": [
                "current_role",
                "expiry",
                "row_scope",
                "field_permissions",
                "membership",
                "closed_row_policy",
                "per_action_can_close_and_delete_scope"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/assets/{namespace}/{resourceType}/{resourceId}/policy": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "asset.policy",
        "tags": [
          "assets"
        ],
        "x-availability": "試験提供（環境による）",
        "parameters": [
          {
            "name": "namespace",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "version",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetPolicy"
                },
                "examples": {
                  "asset-policy": {
                    "summary": "資産の保存・参照方針を取得",
                    "value": {
                      "contract_version": 1,
                      "modes": [
                        "managed_original",
                        "external_reference"
                      ],
                      "max_managed_bytes": 8388608,
                      "max_external_bytes": 33554432,
                      "media_types": [
                        "application/pdf",
                        "image/png"
                      ],
                      "can_write": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "資産の保存・参照方針を取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "401": {
            "description": "資産の保存・参照方針を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "403": {
            "description": "資産の保存・参照方針を取得での拒否・失敗: ASSET_FORBIDDEN, ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_FORBIDDEN",
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "404": {
            "description": "資産の保存・参照方針を取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "409": {
            "description": "資産の保存・参照方針を取得での拒否・失敗: ASSET_IDEMPOTENCY_MISMATCH, ASSET_POLICY_CHANGED, ASSET_VERSION_CONFLICT, LOCK_BUSY。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_IDEMPOTENCY_MISMATCH",
              "ASSET_POLICY_CHANGED",
              "ASSET_VERSION_CONFLICT",
              "LOCK_BUSY"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "413": {
            "description": "資産の保存・参照方針を取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "428": {
            "description": "資産の保存・参照方針を取得での拒否・失敗: ASSET_PRECONDITION_REQUIRED, ASSET_REASON_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_PRECONDITION_REQUIRED",
              "ASSET_REASON_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "429": {
            "description": "資産の保存・参照方針を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "資産の保存・参照方針を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "503": {
            "description": "資産の保存・参照方針を取得での拒否・失敗: ASSET_BUSY, ASSET_CAPACITY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_CAPACITY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "507": {
            "description": "資産の保存・参照方針を取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          }
        },
        "summary": "資産の保存・参照方針を取得",
        "description": "資産の保存・参照方針を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 ホストが固定した親資源の読取操作と資産方針で認可する。原本と外部参照を区別し、更新は現在資産版を照合する。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "bound_parent_operation",
          "mfa": "binding_dependent",
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "binding_rules": [
            {
              "operation_id": "job.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "invoice.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "contact.erasure_status",
              "mfa": true,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            }
          ],
          "resource_checks": [
            {
              "kind": "parent_resource",
              "action": "policy",
              "checks": [
                "parent_read_authorization",
                "asset_policy",
                "can_write_for_upload_or_reference",
                "custody_policy"
              ]
            }
          ],
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "external_human_mfa": true
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/assets/{namespace}/{resourceType}/{resourceId}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "asset.list",
        "tags": [
          "assets"
        ],
        "x-availability": "試験提供（環境による）",
        "parameters": [
          {
            "name": "namespace",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 25
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Asset"
                      },
                      "maxItems": 50
                    },
                    "limit": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "offset": {
                      "type": "integer",
                      "minimum": 0
                    }
                  },
                  "required": [
                    "items",
                    "limit",
                    "offset"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "asset-list": {
                    "summary": "資産の一覧取得",
                    "value": {
                      "items": [
                        {
                          "asset_id": "55555555-5555-4555-8555-555555555555",
                          "version": 1,
                          "custody": "external_reference",
                          "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                          "size": 1024,
                          "media_type": "application/pdf",
                          "thumbnail": false,
                          "created_at": "2026-10-04T00:00:00Z"
                        }
                      ],
                      "limit": 25,
                      "offset": 0
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "資産の一覧取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "401": {
            "description": "資産の一覧取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "403": {
            "description": "資産の一覧取得での拒否・失敗: ASSET_FORBIDDEN, ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_FORBIDDEN",
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "404": {
            "description": "資産の一覧取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "409": {
            "description": "資産の一覧取得での拒否・失敗: ASSET_IDEMPOTENCY_MISMATCH, ASSET_POLICY_CHANGED, ASSET_VERSION_CONFLICT, LOCK_BUSY。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_IDEMPOTENCY_MISMATCH",
              "ASSET_POLICY_CHANGED",
              "ASSET_VERSION_CONFLICT",
              "LOCK_BUSY"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "413": {
            "description": "資産の一覧取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "428": {
            "description": "資産の一覧取得での拒否・失敗: ASSET_PRECONDITION_REQUIRED, ASSET_REASON_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_PRECONDITION_REQUIRED",
              "ASSET_REASON_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "429": {
            "description": "資産の一覧取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "資産の一覧取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "503": {
            "description": "資産の一覧取得での拒否・失敗: ASSET_BUSY, ASSET_CAPACITY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_CAPACITY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "507": {
            "description": "資産の一覧取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          }
        },
        "summary": "資産の一覧取得",
        "description": "資産の一覧取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 ホストが固定した親資源の読取操作と資産方針で認可する。原本と外部参照を区別し、更新は現在資産版を照合する。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "bound_parent_operation",
          "mfa": "binding_dependent",
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "binding_rules": [
            {
              "operation_id": "job.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "invoice.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "contact.erasure_status",
              "mfa": true,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            }
          ],
          "resource_checks": [
            {
              "kind": "parent_resource",
              "action": "list",
              "checks": [
                "parent_read_authorization",
                "asset_policy",
                "can_write_for_upload_or_reference",
                "custody_policy"
              ]
            }
          ],
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "external_human_mfa": true
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/assets/{namespace}/{resourceType}/{resourceId}/{assetId}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "asset.get",
        "tags": [
          "assets"
        ],
        "x-availability": "試験提供（環境による）",
        "parameters": [
          {
            "name": "namespace",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "version",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Asset"
                },
                "examples": {
                  "asset-get": {
                    "summary": "資産のメタデータを取得",
                    "value": {
                      "asset_id": "55555555-5555-4555-8555-555555555555",
                      "version": 1,
                      "custody": "external_reference",
                      "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                      "size": 1024,
                      "media_type": "application/pdf",
                      "thumbnail": false,
                      "created_at": "2026-10-04T00:00:00Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "資産のメタデータを取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "401": {
            "description": "資産のメタデータを取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "403": {
            "description": "資産のメタデータを取得での拒否・失敗: ASSET_FORBIDDEN, ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_FORBIDDEN",
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "404": {
            "description": "資産のメタデータを取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "409": {
            "description": "資産のメタデータを取得での拒否・失敗: ASSET_IDEMPOTENCY_MISMATCH, ASSET_POLICY_CHANGED, ASSET_VERSION_CONFLICT, LOCK_BUSY。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_IDEMPOTENCY_MISMATCH",
              "ASSET_POLICY_CHANGED",
              "ASSET_VERSION_CONFLICT",
              "LOCK_BUSY"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "413": {
            "description": "資産のメタデータを取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "428": {
            "description": "資産のメタデータを取得での拒否・失敗: ASSET_PRECONDITION_REQUIRED, ASSET_REASON_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_PRECONDITION_REQUIRED",
              "ASSET_REASON_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "429": {
            "description": "資産のメタデータを取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "資産のメタデータを取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "503": {
            "description": "資産のメタデータを取得での拒否・失敗: ASSET_BUSY, ASSET_CAPACITY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_CAPACITY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "507": {
            "description": "資産のメタデータを取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          }
        },
        "summary": "資産のメタデータを取得",
        "description": "資産のメタデータを取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 ホストが固定した親資源の読取操作と資産方針で認可する。原本と外部参照を区別し、更新は現在資産版を照合する。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "bound_parent_operation",
          "mfa": "binding_dependent",
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "binding_rules": [
            {
              "operation_id": "job.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "invoice.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "contact.erasure_status",
              "mfa": true,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            }
          ],
          "resource_checks": [
            {
              "kind": "parent_resource",
              "action": "get",
              "checks": [
                "parent_read_authorization",
                "asset_policy",
                "can_write_for_upload_or_reference",
                "custody_policy"
              ]
            }
          ],
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "external_human_mfa": true
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/assets/{namespace}/{resourceType}/{resourceId}/{assetId}/content": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "asset.content",
        "tags": [
          "assets"
        ],
        "x-availability": "試験提供（環境による）",
        "parameters": [
          {
            "name": "namespace",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "version",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Verified original/derived bytes; MIME is policy-approved. Header ETag identifies saved asset version.",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                },
                "examples": {
                  "asset-content": {
                    "summary": "資産の原本を取得（実バイトはpublic-requests.jsonのresponse_base64をdecode）",
                    "value": "[binary PNG bytes]"
                  }
                }
              }
            }
          },
          "400": {
            "description": "資産の原本を取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "401": {
            "description": "資産の原本を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "403": {
            "description": "資産の原本を取得での拒否・失敗: ASSET_FORBIDDEN, ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_FORBIDDEN",
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "404": {
            "description": "資産の原本を取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "409": {
            "description": "資産の原本を取得での拒否・失敗: ASSET_IDEMPOTENCY_MISMATCH, ASSET_POLICY_CHANGED, ASSET_VERSION_CONFLICT, LOCK_BUSY。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_IDEMPOTENCY_MISMATCH",
              "ASSET_POLICY_CHANGED",
              "ASSET_VERSION_CONFLICT",
              "LOCK_BUSY"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "413": {
            "description": "資産の原本を取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "428": {
            "description": "資産の原本を取得での拒否・失敗: ASSET_PRECONDITION_REQUIRED, ASSET_REASON_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_PRECONDITION_REQUIRED",
              "ASSET_REASON_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "429": {
            "description": "資産の原本を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "資産の原本を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "503": {
            "description": "資産の原本を取得での拒否・失敗: ASSET_BUSY, ASSET_CAPACITY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_CAPACITY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "507": {
            "description": "資産の原本を取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          }
        },
        "summary": "資産の原本を取得",
        "description": "資産の原本を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 ホストが固定した親資源の読取操作と資産方針で認可する。原本と外部参照を区別し、更新は現在資産版を照合する。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "bound_parent_operation",
          "mfa": "binding_dependent",
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "binding_rules": [
            {
              "operation_id": "job.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "invoice.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "contact.erasure_status",
              "mfa": true,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            }
          ],
          "resource_checks": [
            {
              "kind": "parent_resource",
              "action": "content",
              "checks": [
                "parent_read_authorization",
                "asset_policy",
                "can_write_for_upload_or_reference",
                "custody_policy"
              ]
            }
          ],
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "external_human_mfa": true
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "asset.upload",
        "tags": [
          "assets"
        ],
        "x-availability": "試験提供（環境による）",
        "parameters": [
          {
            "name": "namespace",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\"[0-9]{1,9}\"$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            }
          },
          {
            "name": "X-Asset-Reason",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "URI encoded UTF-8 reason; required for custody mode changes."
          },
          {
            "name": "X-Asset-Media-Type",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary",
                "maxLength": 8388608
              },
              "examples": {
                "asset-upload": {
                  "summary": "資産の原本を保存（実バイトはpublic-requests.jsonのbody_base64をdecode）",
                  "value": "[binary PNG bytes]"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Asset"
                },
                "examples": {
                  "asset-upload": {
                    "summary": "資産の原本を保存",
                    "value": {
                      "asset_id": "55555555-5555-4555-8555-555555555555",
                      "version": 1,
                      "custody": "managed_original",
                      "sha256": "abc58d5127d7cdf313beb9ec8ee839860a9c6bfbc48c8b8eb6a3f7d8bb63de6f",
                      "size": 70,
                      "media_type": "image/png",
                      "thumbnail": true,
                      "created_at": "2026-10-04T00:00:00Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "資産の原本を保存での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "401": {
            "description": "資産の原本を保存での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "403": {
            "description": "資産の原本を保存での拒否・失敗: ASSET_FORBIDDEN, ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_FORBIDDEN",
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "404": {
            "description": "資産の原本を保存での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "409": {
            "description": "資産の原本を保存での拒否・失敗: ASSET_IDEMPOTENCY_MISMATCH, ASSET_POLICY_CHANGED, ASSET_VERSION_CONFLICT, LOCK_BUSY。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_IDEMPOTENCY_MISMATCH",
              "ASSET_POLICY_CHANGED",
              "ASSET_VERSION_CONFLICT",
              "LOCK_BUSY"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "412": {
            "description": "資産の原本を保存での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "413": {
            "description": "資産の原本を保存での拒否・失敗: ASSET_TOO_LARGE, PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE",
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "415": {
            "description": "資産の原本を保存での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "422": {
            "description": "資産の原本を保存での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "428": {
            "description": "資産の原本を保存での拒否・失敗: ASSET_PRECONDITION_REQUIRED, ASSET_REASON_REQUIRED, IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_PRECONDITION_REQUIRED",
              "ASSET_REASON_REQUIRED",
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "429": {
            "description": "資産の原本を保存での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "資産の原本を保存での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "503": {
            "description": "資産の原本を保存での拒否・失敗: ASSET_BUSY, ASSET_CAPACITY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_CAPACITY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "507": {
            "description": "資産の原本を保存での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          }
        },
        "summary": "資産の原本を保存",
        "description": "資産の原本を保存。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 ホストが固定した親資源の読取操作と資産方針で認可する。原本と外部参照を区別し、更新は現在資産版を照合する。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "bound_parent_operation",
          "mfa": "binding_dependent",
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "binding_rules": [
            {
              "operation_id": "job.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "invoice.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "contact.erasure_status",
              "mfa": true,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            }
          ],
          "resource_checks": [
            {
              "kind": "parent_resource",
              "action": "upload",
              "checks": [
                "parent_read_authorization",
                "asset_policy",
                "can_write_for_upload_or_reference",
                "custody_policy"
              ]
            }
          ],
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "external_human_mfa": true
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/assets/{namespace}/{resourceType}/{resourceId}/{assetId}/thumbnail": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "asset.thumbnail",
        "tags": [
          "assets"
        ],
        "x-availability": "試験提供（環境による）",
        "parameters": [
          {
            "name": "namespace",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "version",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Verified original/derived bytes; MIME is policy-approved. Header ETag identifies saved asset version.",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                },
                "examples": {
                  "asset-thumbnail": {
                    "summary": "資産のサムネイルを取得（実バイトはpublic-requests.jsonのresponse_base64をdecode）",
                    "value": "[binary PNG bytes]"
                  }
                }
              }
            }
          },
          "400": {
            "description": "資産のサムネイルを取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "401": {
            "description": "資産のサムネイルを取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "403": {
            "description": "資産のサムネイルを取得での拒否・失敗: ASSET_FORBIDDEN, ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_FORBIDDEN",
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "404": {
            "description": "資産のサムネイルを取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "409": {
            "description": "資産のサムネイルを取得での拒否・失敗: ASSET_IDEMPOTENCY_MISMATCH, ASSET_POLICY_CHANGED, ASSET_VERSION_CONFLICT, LOCK_BUSY。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_IDEMPOTENCY_MISMATCH",
              "ASSET_POLICY_CHANGED",
              "ASSET_VERSION_CONFLICT",
              "LOCK_BUSY"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "413": {
            "description": "資産のサムネイルを取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "428": {
            "description": "資産のサムネイルを取得での拒否・失敗: ASSET_PRECONDITION_REQUIRED, ASSET_REASON_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_PRECONDITION_REQUIRED",
              "ASSET_REASON_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "429": {
            "description": "資産のサムネイルを取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "資産のサムネイルを取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "503": {
            "description": "資産のサムネイルを取得での拒否・失敗: ASSET_BUSY, ASSET_CAPACITY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_CAPACITY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "507": {
            "description": "資産のサムネイルを取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          }
        },
        "summary": "資産のサムネイルを取得",
        "description": "資産のサムネイルを取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 ホストが固定した親資源の読取操作と資産方針で認可する。原本と外部参照を区別し、更新は現在資産版を照合する。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "bound_parent_operation",
          "mfa": "binding_dependent",
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "binding_rules": [
            {
              "operation_id": "job.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "invoice.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "contact.erasure_status",
              "mfa": true,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            }
          ],
          "resource_checks": [
            {
              "kind": "parent_resource",
              "action": "thumbnail",
              "checks": [
                "parent_read_authorization",
                "asset_policy",
                "can_write_for_upload_or_reference",
                "custody_policy"
              ]
            }
          ],
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "external_human_mfa": true
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/assets/{namespace}/{resourceType}/{resourceId}/{assetId}/reference": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "asset.reference",
        "tags": [
          "assets"
        ],
        "x-availability": "試験提供（環境による）",
        "parameters": [
          {
            "name": "namespace",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\"[0-9]{1,9}\"$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            }
          },
          {
            "name": "X-Asset-Reason",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "URI encoded UTF-8 reason; required for custody mode changes."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssetReference"
              },
              "examples": {
                "asset-reference": {
                  "summary": "資産の外部原本への参照を登録",
                  "value": {
                    "relative_path": "demo/reference.pdf",
                    "media_type": "application/pdf"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Asset"
                },
                "examples": {
                  "asset-reference": {
                    "summary": "資産の外部原本への参照を登録",
                    "value": {
                      "asset_id": "55555555-5555-4555-8555-555555555555",
                      "version": 1,
                      "custody": "external_reference",
                      "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                      "size": 1024,
                      "media_type": "application/pdf",
                      "thumbnail": false,
                      "created_at": "2026-10-04T00:00:00Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "資産の外部原本への参照を登録での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "401": {
            "description": "資産の外部原本への参照を登録での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "403": {
            "description": "資産の外部原本への参照を登録での拒否・失敗: ASSET_FORBIDDEN, ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_FORBIDDEN",
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "404": {
            "description": "資産の外部原本への参照を登録での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "409": {
            "description": "資産の外部原本への参照を登録での拒否・失敗: ASSET_IDEMPOTENCY_MISMATCH, ASSET_POLICY_CHANGED, ASSET_VERSION_CONFLICT, LOCK_BUSY。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_IDEMPOTENCY_MISMATCH",
              "ASSET_POLICY_CHANGED",
              "ASSET_VERSION_CONFLICT",
              "LOCK_BUSY"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "412": {
            "description": "資産の外部原本への参照を登録での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "413": {
            "description": "資産の外部原本への参照を登録での拒否・失敗: ASSET_TOO_LARGE, PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE",
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "415": {
            "description": "資産の外部原本への参照を登録での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "422": {
            "description": "資産の外部原本への参照を登録での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "428": {
            "description": "資産の外部原本への参照を登録での拒否・失敗: ASSET_PRECONDITION_REQUIRED, ASSET_REASON_REQUIRED, IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_PRECONDITION_REQUIRED",
              "ASSET_REASON_REQUIRED",
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "429": {
            "description": "資産の外部原本への参照を登録での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "資産の外部原本への参照を登録での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "503": {
            "description": "資産の外部原本への参照を登録での拒否・失敗: ASSET_BUSY, ASSET_CAPACITY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_CAPACITY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "507": {
            "description": "資産の外部原本への参照を登録での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          }
        },
        "summary": "資産の外部原本への参照を登録",
        "description": "資産の外部原本への参照を登録。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 ホストが固定した親資源の読取操作と資産方針で認可する。原本と外部参照を区別し、更新は現在資産版を照合する。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "bound_parent_operation",
          "mfa": "binding_dependent",
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "binding_rules": [
            {
              "operation_id": "job.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "invoice.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "contact.erasure_status",
              "mfa": true,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            }
          ],
          "resource_checks": [
            {
              "kind": "parent_resource",
              "action": "reference",
              "checks": [
                "parent_read_authorization",
                "asset_policy",
                "can_write_for_upload_or_reference",
                "custody_policy"
              ]
            }
          ],
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "external_human_mfa": true
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/assets/{namespace}/{resourceType}/{resourceId}/{assetId}/check": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "asset.check",
        "tags": [
          "assets"
        ],
        "x-availability": "試験提供（環境による）",
        "parameters": [
          {
            "name": "namespace",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceType",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "resourceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "version",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "asset_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "version": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "status": {
                      "type": "string"
                    },
                    "sha256": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "asset_id",
                    "version",
                    "status",
                    "sha256"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "asset-check": {
                    "summary": "資産の外部原本の現在状態を照合",
                    "value": {
                      "asset_id": "55555555-5555-4555-8555-555555555555",
                      "version": 1,
                      "status": "available",
                      "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "資産の外部原本の現在状態を照合での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "401": {
            "description": "資産の外部原本の現在状態を照合での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "403": {
            "description": "資産の外部原本の現在状態を照合での拒否・失敗: ASSET_FORBIDDEN, ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_FORBIDDEN",
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "404": {
            "description": "資産の外部原本の現在状態を照合での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "409": {
            "description": "資産の外部原本の現在状態を照合での拒否・失敗: ASSET_IDEMPOTENCY_MISMATCH, ASSET_POLICY_CHANGED, ASSET_VERSION_CONFLICT, LOCK_BUSY。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_IDEMPOTENCY_MISMATCH",
              "ASSET_POLICY_CHANGED",
              "ASSET_VERSION_CONFLICT",
              "LOCK_BUSY"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "413": {
            "description": "資産の外部原本の現在状態を照合での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "428": {
            "description": "資産の外部原本の現在状態を照合での拒否・失敗: ASSET_PRECONDITION_REQUIRED, ASSET_REASON_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_PRECONDITION_REQUIRED",
              "ASSET_REASON_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "429": {
            "description": "資産の外部原本の現在状態を照合での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "資産の外部原本の現在状態を照合での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "503": {
            "description": "資産の外部原本の現在状態を照合での拒否・失敗: ASSET_BUSY, ASSET_CAPACITY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_CAPACITY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          },
          "507": {
            "description": "資産の外部原本の現在状態を照合での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetProblem"
                }
              }
            }
          }
        },
        "summary": "資産の外部原本の現在状態を照合",
        "description": "資産の外部原本の現在状態を照合。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 ホストが固定した親資源の読取操作と資産方針で認可する。原本と外部参照を区別し、更新は現在資産版を照合する。",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "bound_parent_operation",
          "mfa": "binding_dependent",
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "binding_rules": [
            {
              "operation_id": "job.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "invoice.get",
              "mfa": false,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            },
            {
              "operation_id": "contact.erasure_status",
              "mfa": true,
              "maxAuthenticationAgeSeconds": null,
              "requiredCapabilities": [],
              "countsAsSessionActivity": false
            }
          ],
          "resource_checks": [
            {
              "kind": "parent_resource",
              "action": "check",
              "checks": [
                "parent_read_authorization",
                "asset_policy",
                "can_write_for_upload_or_reference",
                "custody_policy"
              ]
            }
          ],
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "external_human_mfa": true
        },
        "x-retry-policy": {
          "effect": "verification",
          "mode": "none",
          "safe_to_repeat": false,
          "result_check": "GET /v1/assets/{namespace}/{resourceType}/{resourceId}/{assetId} で状態を確認。専用の再送識別子・応答再生保証なし。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/service-clients": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "service.list",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "サービス資格を一覧取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessClients"
                }
              }
            }
          },
          "400": {
            "description": "サービス資格を一覧取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "サービス資格を一覧取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "サービス資格を一覧取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "サービス資格を一覧取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "サービス資格を一覧取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "サービス資格を一覧取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "サービス資格を一覧取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "サービス資格を一覧取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "サービス資格を一覧取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "サービス資格を一覧取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "list"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "service.create",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "サービス資格を申請。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceApplication"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceClient"
                }
              }
            }
          },
          "400": {
            "description": "サービス資格を申請での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "サービス資格を申請での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "サービス資格を申請での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "サービス資格を申請での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "サービス資格を申請での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "サービス資格を申請での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "サービス資格を申請での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "サービス資格を申請での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "サービス資格を申請での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "サービス資格を申請での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "サービス資格を申請での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "サービス資格を申請での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "サービス資格を申請での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "サービス資格を申請",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator"
              ],
              "action": "create"
            },
            {
              "kind": "service_client_authority",
              "any_of": [
                "managed_client_and_manage_access",
                "legacy_client_and_legacy_administrator_scope"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/service-clients/{clientId}/permissions": {
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "service.permissions",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "同じサービスIDの許可範囲を更新。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "clientId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccessPolicy"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceClient"
                }
              }
            }
          },
          "400": {
            "description": "同じサービスIDの許可範囲を更新での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "同じサービスIDの許可範囲を更新での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "同じサービスIDの許可範囲を更新での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "同じサービスIDの許可範囲を更新での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "同じサービスIDの許可範囲を更新での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "同じサービスIDの許可範囲を更新での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "同じサービスIDの許可範囲を更新での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "同じサービスIDの許可範囲を更新での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "同じサービスIDの許可範囲を更新での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "同じサービスIDの許可範囲を更新での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "同じサービスIDの許可範囲を更新での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "同じサービスIDの許可範囲を更新での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "同じサービスIDの許可範囲を更新での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "同じサービスIDの許可範囲を更新",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "permissions"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "version",
          "identifier": "body.version",
          "safe_to_repeat": false,
          "result_check": "GET /v2/service-clients/{clientId} で現在版・状態・対象値を確認。版は競合検出であり応答再生キーではない。未確定ならrequest_idで照会し、最新版を自動採用して再送しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/service-clients/{clientId}": {
      "delete": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "service.delete",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "サービス資格の利用を終了。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "clientId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccessDelete"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceClient"
                }
              }
            }
          },
          "400": {
            "description": "サービス資格の利用を終了での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "サービス資格の利用を終了での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "サービス資格の利用を終了での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "サービス資格の利用を終了での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "サービス資格の利用を終了での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "サービス資格の利用を終了での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "サービス資格の利用を終了での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "サービス資格の利用を終了での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "サービス資格の利用を終了での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "サービス資格の利用を終了での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "サービス資格の利用を終了での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "サービス資格の利用を終了での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "サービス資格の利用を終了での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "サービス資格の利用を終了",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "delete"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "version",
          "identifier": "body.version",
          "safe_to_repeat": false,
          "result_check": "GET /v2/service-clients/{clientId} で現在版・状態・対象値を確認。版は競合検出であり応答再生キーではない。未確定ならrequest_idで照会し、最新版を自動採用して再送しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "service.get",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "サービス資格の状態と版を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "clientId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceClient"
                }
              }
            }
          },
          "400": {
            "description": "サービス資格の状態と版を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "サービス資格の状態と版を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "サービス資格の状態と版を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "サービス資格の状態と版を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "サービス資格の状態と版を取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "サービス資格の状態と版を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "サービス資格の状態と版を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "サービス資格の状態と版を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "サービス資格の状態と版を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "サービス資格の状態と版を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator"
              ],
              "action": "get"
            },
            {
              "kind": "service_client_authority",
              "any_of": [
                "managed_client_and_manage_access",
                "legacy_client_and_legacy_administrator_scope"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/access/subjects": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "service.subjects",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "権限管理対象の本人IDを一覧取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessSubjects"
                }
              }
            }
          },
          "400": {
            "description": "権限管理対象の本人IDを一覧取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "権限管理対象の本人IDを一覧取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "権限管理対象の本人IDを一覧取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "権限管理対象の本人IDを一覧取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "権限管理対象の本人IDを一覧取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "権限管理対象の本人IDを一覧取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "権限管理対象の本人IDを一覧取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "権限管理対象の本人IDを一覧取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "権限管理対象の本人IDを一覧取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "権限管理対象の本人IDを一覧取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "subjects"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/access/tables": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "service.tables",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "権限管理対象の表を一覧取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessTables"
                }
              }
            }
          },
          "400": {
            "description": "権限管理対象の表を一覧取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "権限管理対象の表を一覧取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "権限管理対象の表を一覧取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "権限管理対象の表を一覧取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "権限管理対象の表を一覧取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "権限管理対象の表を一覧取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "権限管理対象の表を一覧取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "権限管理対象の表を一覧取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "権限管理対象の表を一覧取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "権限管理対象の表を一覧取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "tables"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/access/tables/{collection}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "service.definition",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "権限設定用の表定義を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessDefinition"
                }
              }
            }
          },
          "400": {
            "description": "権限設定用の表定義を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "権限設定用の表定義を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "権限設定用の表定義を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "権限設定用の表定義を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "権限設定用の表定義を取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "権限設定用の表定義を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "権限設定用の表定義を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "権限設定用の表定義を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "権限設定用の表定義を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "権限設定用の表定義を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "definition"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/access/grants/{subjectId}/{collection}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "service.grantGet",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "本人の表利用権を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "subjectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessGrant"
                }
              }
            }
          },
          "400": {
            "description": "本人の表利用権を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "本人の表利用権を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "本人の表利用権を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "本人の表利用権を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "本人の表利用権を取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "本人の表利用権を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "本人の表利用権を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "本人の表利用権を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "本人の表利用権を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "本人の表利用権を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "grantGet"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "service.grantPut",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "本人の表利用権を設定。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "subjectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccessGrantInput"
              },
              "examples": {
                "grant": {
                  "summary": "本人へ表利用権を設定",
                  "value": {
                    "version": 0,
                    "enabled": true,
                    "role": "staff",
                    "read_scope": "all",
                    "write_scope": "all",
                    "can_design": true,
                    "can_close": true,
                    "can_import": true,
                    "expires_at": "2026-10-05T00:00:00Z"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccessGrant"
                },
                "examples": {
                  "grant": {
                    "summary": "本人へ表利用権を設定",
                    "value": {
                      "version": 1,
                      "grant": {
                        "actor": "11111111-1111-4111-8111-111111111111",
                        "client": "hub-spa",
                        "collection": "demo_tasks",
                        "role": "staff",
                        "read_scope": "all",
                        "write_scope": "all",
                        "can_design": true,
                        "can_close": true,
                        "can_import": true,
                        "expires_at": "2026-10-05T00:00:00Z"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "本人の表利用権を設定での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "本人の表利用権を設定での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "本人の表利用権を設定での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "本人の表利用権を設定での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "本人の表利用権を設定での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "本人の表利用権を設定での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "本人の表利用権を設定での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "本人の表利用権を設定での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "本人の表利用権を設定での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "本人の表利用権を設定での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "本人の表利用権を設定での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "本人の表利用権を設定での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "本人の表利用権を設定での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "本人の表利用権を設定",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "grantPut"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "version",
          "identifier": "body.version",
          "safe_to_repeat": false,
          "result_check": "GET /v2/access/grants/{subjectId}/{collection} で現在版・状態・対象値を確認。版は競合検出であり応答再生キーではない。未確定ならrequest_idで照会し、最新版を自動採用して再送しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/service-clients/{clientId}/{action}": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "service.change",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "サービス資格の承認・登録・更新・停止・再開・失効。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "clientId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "action",
            "in": "path",
            "required": true,
            "schema": {
              "enum": [
                "approve",
                "provision",
                "rotate",
                "suspend",
                "resume",
                "revoke"
              ]
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceChange"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceClient"
                }
              }
            }
          },
          "400": {
            "description": "サービス資格の承認・登録・更新・停止・再開・失効での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "サービス資格の承認・登録・更新・停止・再開・失効での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "サービス資格の承認・登録・更新・停止・再開・失効での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "サービス資格の承認・登録・更新・停止・再開・失効での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "サービス資格の承認・登録・更新・停止・再開・失効での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "サービス資格の承認・登録・更新・停止・再開・失効での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "サービス資格の承認・登録・更新・停止・再開・失効での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "サービス資格の承認・登録・更新・停止・再開・失効での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "サービス資格の承認・登録・更新・停止・再開・失効での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "サービス資格の承認・登録・更新・停止・再開・失効での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "サービス資格の承認・登録・更新・停止・再開・失効での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "サービス資格の承認・登録・更新・停止・再開・失効での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "サービス資格の承認・登録・更新・停止・再開・失効での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "サービス資格の承認・登録・更新・停止・再開・失効",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator"
              ],
              "action": "change"
            },
            {
              "kind": "service_client_authority",
              "any_of": [
                "managed_client_and_manage_access",
                "legacy_client_and_legacy_administrator_scope"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "version",
          "identifier": "body.version",
          "safe_to_repeat": false,
          "result_check": "GET /v2/service-clients/{clientId} で現在版・状態・対象値を確認。版は競合検出であり応答再生キーではない。未確定ならrequest_idで照会し、最新版を自動採用して再送しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/service/activate": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "serviceOAuth": []
          }
        ],
        "operationId": "service.activate",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "サービス自身が鍵所持を証明して有効化。登録されたserviceのJWT・現在の状態・対象表/列/行/CRUD/期限を検査する。人のJWTは使えない。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {},
                "required": [],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "active": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "active"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "サービス自身が鍵所持を証明して有効化での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "サービス自身が鍵所持を証明して有効化での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "サービス自身が鍵所持を証明して有効化での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "サービス自身が鍵所持を証明して有効化での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "サービス自身が鍵所持を証明して有効化での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "サービス自身が鍵所持を証明して有効化での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "サービス自身が鍵所持を証明して有効化での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "サービス自身が鍵所持を証明して有効化での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "サービス自身が鍵所持を証明して有効化での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "サービス自身が鍵所持を証明して有効化での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "サービス自身が鍵所持を証明して有効化での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "サービス自身が鍵所持を証明して有効化",
        "x-required-authority": {
          "actor_types": [
            "service"
          ],
          "authentication": "dedicated_service_jwt",
          "mfa": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "resource_checks": [
            {
              "kind": "service_grant",
              "operation": "activate",
              "checks": [
                "current_state",
                "expiry",
                "audience",
                "key_binding"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "none",
          "safe_to_repeat": false,
          "result_check": "GET /v2/service-clients/{clientId}（人の管理権限で照合） で状態を確認。専用の再送識別子・応答再生保証なし。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求。client単位rpm=1..120（承認設定）。上限に達したら429。"
      }
    },
    "/v2/service/tables/{collection}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "serviceOAuth": []
          }
        ],
        "operationId": "service.metadata",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "サービスに許可された表と列の情報を取得。登録されたserviceのJWT・現在の状態・対象表/列/行/CRUD/期限を検査する。人のJWTは使えない。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceTableMetadata"
                }
              }
            }
          },
          "400": {
            "description": "サービスに許可された表と列の情報を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "サービスに許可された表と列の情報を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "サービスに許可された表と列の情報を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "サービスに許可された表と列の情報を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "サービスに許可された表と列の情報を取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "サービスに許可された表と列の情報を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "サービスに許可された表と列の情報を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "サービスに許可された表と列の情報を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "サービスに許可された表と列の情報を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "サービスに許可された表と列の情報を取得",
        "x-required-authority": {
          "actor_types": [
            "service"
          ],
          "authentication": "dedicated_service_jwt",
          "mfa": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "resource_checks": [
            {
              "kind": "service_grant",
              "operation": "metadata",
              "checks": [
                "current_state",
                "expiry",
                "audience",
                "key_binding",
                "collection",
                "columns",
                "row_filter",
                "crud",
                "schema_version"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求。client単位rpm=1..120（承認設定）。上限に達したら429。"
      }
    },
    "/v2/service/tables/{collection}/import": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "serviceOAuth": []
          }
        ],
        "operationId": "service.import",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "サービスの許可範囲でCSV取込区間を原子的に反映。登録されたserviceのJWT・現在の状態・対象表/列/行/CRUD/期限を検査する。人のJWTは使えない。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceImport"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceImportResult"
                }
              }
            }
          },
          "400": {
            "description": "サービスの許可範囲でCSV取込区間を原子的に反映での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "サービスの許可範囲でCSV取込区間を原子的に反映での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "サービスの許可範囲でCSV取込区間を原子的に反映での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "サービスの許可範囲でCSV取込区間を原子的に反映での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "サービスの許可範囲でCSV取込区間を原子的に反映での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "サービスの許可範囲でCSV取込区間を原子的に反映での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "サービスの許可範囲でCSV取込区間を原子的に反映での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "サービスの許可範囲でCSV取込区間を原子的に反映での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "サービスの許可範囲でCSV取込区間を原子的に反映での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "サービスの許可範囲でCSV取込区間を原子的に反映での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "サービスの許可範囲でCSV取込区間を原子的に反映での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "サービスの許可範囲でCSV取込区間を原子的に反映での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "サービスの許可範囲でCSV取込区間を原子的に反映での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "サービスの許可範囲でCSV取込区間を原子的に反映",
        "x-required-authority": {
          "actor_types": [
            "service"
          ],
          "authentication": "dedicated_service_jwt",
          "mfa": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "resource_checks": [
            {
              "kind": "service_grant",
              "operation": "import",
              "checks": [
                "current_state",
                "expiry",
                "audience",
                "key_binding",
                "collection",
                "columns",
                "row_filter",
                "crud",
                "schema_version"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求。client単位rpm=1..120（承認設定）。上限に達したら429。"
      }
    },
    "/v2/service/tables/{collection}/query": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "serviceOAuth": []
          }
        ],
        "operationId": "service.query",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "サービスの許可範囲で行を取得。登録されたserviceのJWT・現在の状態・対象表/列/行/CRUD/期限を検査する。人のJWTは使えない。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceQuery"
              },
              "examples": {
                "service-query": {
                  "summary": "serviceの許可済み表を取得",
                  "value": {
                    "limit": 50
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceQueryResult"
                },
                "examples": {
                  "service-query": {
                    "summary": "serviceの許可済み表を取得",
                    "value": {
                      "schema_version": 1,
                      "items": [
                        {
                          "id": "11111111-1111-4111-8111-111111111111",
                          "version": 1,
                          "values": {
                            "title": "見本"
                          },
                          "status": "committed",
                          "closed": false
                        }
                      ],
                      "next_after": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "サービスの許可範囲で行を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "サービスの許可範囲で行を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "サービスの許可範囲で行を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "サービスの許可範囲で行を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "サービスの許可範囲で行を取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "サービスの許可範囲で行を取得での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "サービスの許可範囲で行を取得での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "サービスの許可範囲で行を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "サービスの許可範囲で行を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "サービスの許可範囲で行を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "サービスの許可範囲で行を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "サービスの許可範囲で行を取得",
        "x-required-authority": {
          "actor_types": [
            "service"
          ],
          "authentication": "dedicated_service_jwt",
          "mfa": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "resource_checks": [
            {
              "kind": "service_grant",
              "operation": "query",
              "checks": [
                "current_state",
                "expiry",
                "audience",
                "key_binding",
                "collection",
                "columns",
                "row_filter",
                "crud",
                "schema_version"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求。client単位rpm=1..120（承認設定）。上限に達したら429。"
      }
    },
    "/v2/service/tables/{collection}/batch": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "serviceOAuth": []
          }
        ],
        "operationId": "service.batch",
        "tags": [
          "service-access"
        ],
        "x-availability": "環境による",
        "description": "サービスの許可範囲で行を一括変更。登録されたserviceのJWT・現在の状態・対象表/列/行/CRUD/期限を検査する。人のJWTは使えない。 管理操作は登録済みMFA本人、機械操作は専用audienceのservice資格を使う。人のJWTを機械経路へ流用しない。changeはversion必須で、rotateのみjwkが必要。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceBatch"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceBatchResult"
                }
              }
            }
          },
          "400": {
            "description": "サービスの許可範囲で行を一括変更での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "サービスの許可範囲で行を一括変更での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "サービスの許可範囲で行を一括変更での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "サービスの許可範囲で行を一括変更での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "サービスの許可範囲で行を一括変更での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "サービスの許可範囲で行を一括変更での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "サービスの許可範囲で行を一括変更での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "サービスの許可範囲で行を一括変更での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "サービスの許可範囲で行を一括変更での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "サービスの許可範囲で行を一括変更での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "サービスの許可範囲で行を一括変更での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "サービスの許可範囲で行を一括変更での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "サービスの許可範囲で行を一括変更での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "サービスの許可範囲で行を一括変更",
        "x-required-authority": {
          "actor_types": [
            "service"
          ],
          "authentication": "dedicated_service_jwt",
          "mfa": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "resource_checks": [
            {
              "kind": "service_grant",
              "operation": "batch",
              "checks": [
                "current_state",
                "expiry",
                "audience",
                "key_binding",
                "collection",
                "columns",
                "row_filter",
                "crud",
                "schema_version"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求。client単位rpm=1..120（承認設定）。上限に達したら429。"
      }
    },
    "/v2/media/{collection}/{rowId}/{field}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.0.list",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付の一覧取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Media"
                      },
                      "maxItems": 100
                    }
                  },
                  "required": [
                    "items"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付の一覧取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付の一覧取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付の一覧取得での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付の一覧取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付の一覧取得での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付の一覧取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付の一覧取得での拒否・失敗: FIELD_NOT_ALLOWED, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付の一覧取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付の一覧取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付の一覧取得での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付の一覧取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付の一覧取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "list",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/media/{collection}/{rowId}/{field}/policy": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.0.policy",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付の保存・参照方針を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaPolicy"
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付の保存・参照方針を取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付の保存・参照方針を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付の保存・参照方針を取得での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付の保存・参照方針を取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付の保存・参照方針を取得での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付の保存・参照方針を取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付の保存・参照方針を取得での拒否・失敗: FIELD_NOT_ALLOWED, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付の保存・参照方針を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付の保存・参照方針を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付の保存・参照方針を取得での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付の保存・参照方針を取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付の保存・参照方針を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "policy",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/media/{collection}/{rowId}/{field}/{assetId}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.0.get",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付のメタデータを取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付のメタデータを取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付のメタデータを取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付のメタデータを取得での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付のメタデータを取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付のメタデータを取得での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付のメタデータを取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付のメタデータを取得での拒否・失敗: FIELD_NOT_ALLOWED, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付のメタデータを取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付のメタデータを取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付のメタデータを取得での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付のメタデータを取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付のメタデータを取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "get",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "delete": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.0.delete",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付の関連付けを削除。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\"[0-9]{1,9}\"$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-zA-Z0-9_-]{8,128}$"
            }
          },
          {
            "name": "X-Parent-Version",
            "in": "header",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "添付先の親行の現在version。表のschema_versionとは別。"
            }
          },
          {
            "name": "X-Schema-Version",
            "in": "header",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付の関連付けを削除での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付の関連付けを削除での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付の関連付けを削除での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付の関連付けを削除での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付の関連付けを削除での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "行の画像・添付の関連付けを削除での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付の関連付けを削除での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付の関連付けを削除での拒否・失敗: FIELD_NOT_ALLOWED, IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "行の画像・添付の関連付けを削除での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付の関連付けを削除での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付の関連付けを削除での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付の関連付けを削除での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付の関連付けを削除での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付の関連付けを削除",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "delete",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/media/{collection}/{rowId}/{field}/{assetId}/content": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.0.content",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付の原本を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Verified bytes, no-store; content is attachment, thumbnail image/png",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付の原本を取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付の原本を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付の原本を取得での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付の原本を取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付の原本を取得での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付の原本を取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付の原本を取得での拒否・失敗: FIELD_NOT_ALLOWED, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付の原本を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付の原本を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付の原本を取得での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付の原本を取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付の原本を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "content",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.0.put",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付の原本を保存。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\"[0-9]{1,9}\"$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-zA-Z0-9_-]{8,128}$"
            }
          },
          {
            "name": "X-Parent-Version",
            "in": "header",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "添付先の親行の現在version。表のschema_versionとは別。"
            }
          },
          {
            "name": "X-Schema-Version",
            "in": "header",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          },
          {
            "name": "X-Asset-Media-Type",
            "in": "header",
            "required": true,
            "schema": {
              "enum": [
                "image/png",
                "image/jpeg",
                "image/webp",
                "application/pdf",
                "text/plain",
                "audio/mpeg",
                "audio/wav",
                "audio/ogg",
                "video/mp4",
                "video/webm"
              ]
            }
          },
          {
            "name": "X-Asset-Name",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary",
                "maxLength": 33554432
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付の原本を保存での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付の原本を保存での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付の原本を保存での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付の原本を保存での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付の原本を保存での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "行の画像・添付の原本を保存での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付の原本を保存での拒否・失敗: ASSET_TOO_LARGE, PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE",
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "行の画像・添付の原本を保存での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付の原本を保存での拒否・失敗: FIELD_NOT_ALLOWED, IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "行の画像・添付の原本を保存での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付の原本を保存での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付の原本を保存での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付の原本を保存での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付の原本を保存での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付の原本を保存",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "put",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/media/{collection}/{rowId}/{field}/{assetId}/thumbnail": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.0.thumbnail",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付のサムネイルを取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Verified bytes, no-store; content is attachment, thumbnail image/png",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付のサムネイルを取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付のサムネイルを取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付のサムネイルを取得での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付のサムネイルを取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付のサムネイルを取得での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付のサムネイルを取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付のサムネイルを取得での拒否・失敗: FIELD_NOT_ALLOWED, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付のサムネイルを取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付のサムネイルを取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付のサムネイルを取得での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付のサムネイルを取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付のサムネイルを取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "thumbnail",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/media/{collection}/{rowId}/{field}/{assetId}/reference": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.0.reference",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付の外部原本への参照を登録。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\"[0-9]{1,9}\"$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-zA-Z0-9_-]{8,128}$"
            }
          },
          {
            "name": "X-Parent-Version",
            "in": "header",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "添付先の親行の現在version。表のschema_versionとは別。"
            }
          },
          {
            "name": "X-Schema-Version",
            "in": "header",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MediaReference"
              },
              "examples": {
                "media-reference": {
                  "summary": "外部原本への画像参照",
                  "value": {
                    "store": "demo-store",
                    "relative_path": "examples/sample.png",
                    "media_type": "image/png",
                    "name": "見本.png"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                },
                "examples": {
                  "media-reference": {
                    "summary": "外部原本への画像参照",
                    "value": {
                      "asset_id": "22222222-2222-4222-8222-222222222222",
                      "version": 1,
                      "deleted": false,
                      "updated_at": "2026-10-04T00:00:00Z",
                      "custody": "external_reference",
                      "media_type": "image/png",
                      "name": "見本.png",
                      "size": 70,
                      "sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
                      "preview": "ready"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付の外部原本への参照を登録での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付の外部原本への参照を登録での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付の外部原本への参照を登録での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付の外部原本への参照を登録での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付の外部原本への参照を登録での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "行の画像・添付の外部原本への参照を登録での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付の外部原本への参照を登録での拒否・失敗: ASSET_TOO_LARGE, PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE",
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "行の画像・添付の外部原本への参照を登録での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付の外部原本への参照を登録での拒否・失敗: FIELD_NOT_ALLOWED, IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "行の画像・添付の外部原本への参照を登録での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付の外部原本への参照を登録での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付の外部原本への参照を登録での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付の外部原本への参照を登録での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付の外部原本への参照を登録での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付の外部原本への参照を登録",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "reference",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/assets/workspaces/{collection}/{rowId}/{field}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.1.list",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付（互換パス）の一覧取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Media"
                      },
                      "maxItems": 100
                    }
                  },
                  "required": [
                    "items"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付（互換パス）の一覧取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付（互換パス）の一覧取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付（互換パス）の一覧取得での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付（互換パス）の一覧取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付（互換パス）の一覧取得での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付（互換パス）の一覧取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付（互換パス）の一覧取得での拒否・失敗: FIELD_NOT_ALLOWED, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付（互換パス）の一覧取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付（互換パス）の一覧取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付（互換パス）の一覧取得での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付（互換パス）の一覧取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付（互換パス）の一覧取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "list",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/assets/workspaces/{collection}/{rowId}/{field}/policy": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.1.policy",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付（互換パス）の保存・参照方針を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MediaPolicy"
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付（互換パス）の保存・参照方針を取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付（互換パス）の保存・参照方針を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付（互換パス）の保存・参照方針を取得での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付（互換パス）の保存・参照方針を取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付（互換パス）の保存・参照方針を取得での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付（互換パス）の保存・参照方針を取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付（互換パス）の保存・参照方針を取得での拒否・失敗: FIELD_NOT_ALLOWED, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付（互換パス）の保存・参照方針を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付（互換パス）の保存・参照方針を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付（互換パス）の保存・参照方針を取得での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付（互換パス）の保存・参照方針を取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付（互換パス）の保存・参照方針を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "policy",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/assets/workspaces/{collection}/{rowId}/{field}/{assetId}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.1.get",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付（互換パス）のメタデータを取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付（互換パス）のメタデータを取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付（互換パス）のメタデータを取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付（互換パス）のメタデータを取得での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付（互換パス）のメタデータを取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付（互換パス）のメタデータを取得での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付（互換パス）のメタデータを取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付（互換パス）のメタデータを取得での拒否・失敗: FIELD_NOT_ALLOWED, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付（互換パス）のメタデータを取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付（互換パス）のメタデータを取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付（互換パス）のメタデータを取得での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付（互換パス）のメタデータを取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付（互換パス）のメタデータを取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "get",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "delete": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.1.delete",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付（互換パス）の関連付けを削除。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\"[0-9]{1,9}\"$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-zA-Z0-9_-]{8,128}$"
            }
          },
          {
            "name": "X-Parent-Version",
            "in": "header",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "添付先の親行の現在version。表のschema_versionとは別。"
            }
          },
          {
            "name": "X-Schema-Version",
            "in": "header",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付（互換パス）の関連付けを削除での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付（互換パス）の関連付けを削除での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付（互換パス）の関連付けを削除での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付（互換パス）の関連付けを削除での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付（互換パス）の関連付けを削除での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "行の画像・添付（互換パス）の関連付けを削除での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付（互換パス）の関連付けを削除での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付（互換パス）の関連付けを削除での拒否・失敗: FIELD_NOT_ALLOWED, IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "行の画像・添付（互換パス）の関連付けを削除での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付（互換パス）の関連付けを削除での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付（互換パス）の関連付けを削除での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付（互換パス）の関連付けを削除での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付（互換パス）の関連付けを削除での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付（互換パス）の関連付けを削除",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "delete",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/assets/workspaces/{collection}/{rowId}/{field}/{assetId}/content": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.1.content",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付（互換パス）の原本を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Verified bytes, no-store; content is attachment, thumbnail image/png",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付（互換パス）の原本を取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付（互換パス）の原本を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付（互換パス）の原本を取得での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付（互換パス）の原本を取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付（互換パス）の原本を取得での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付（互換パス）の原本を取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付（互換パス）の原本を取得での拒否・失敗: FIELD_NOT_ALLOWED, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付（互換パス）の原本を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付（互換パス）の原本を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付（互換パス）の原本を取得での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付（互換パス）の原本を取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付（互換パス）の原本を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "content",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.1.put",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付（互換パス）の原本を保存。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\"[0-9]{1,9}\"$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-zA-Z0-9_-]{8,128}$"
            }
          },
          {
            "name": "X-Parent-Version",
            "in": "header",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "添付先の親行の現在version。表のschema_versionとは別。"
            }
          },
          {
            "name": "X-Schema-Version",
            "in": "header",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          },
          {
            "name": "X-Asset-Media-Type",
            "in": "header",
            "required": true,
            "schema": {
              "enum": [
                "image/png",
                "image/jpeg",
                "image/webp",
                "application/pdf",
                "text/plain",
                "audio/mpeg",
                "audio/wav",
                "audio/ogg",
                "video/mp4",
                "video/webm"
              ]
            }
          },
          {
            "name": "X-Asset-Name",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary",
                "maxLength": 33554432
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付（互換パス）の原本を保存での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付（互換パス）の原本を保存での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付（互換パス）の原本を保存での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付（互換パス）の原本を保存での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付（互換パス）の原本を保存での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "行の画像・添付（互換パス）の原本を保存での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付（互換パス）の原本を保存での拒否・失敗: ASSET_TOO_LARGE, PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE",
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "行の画像・添付（互換パス）の原本を保存での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付（互換パス）の原本を保存での拒否・失敗: FIELD_NOT_ALLOWED, IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "行の画像・添付（互換パス）の原本を保存での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付（互換パス）の原本を保存での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付（互換パス）の原本を保存での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付（互換パス）の原本を保存での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付（互換パス）の原本を保存での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付（互換パス）の原本を保存",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "put",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/assets/workspaces/{collection}/{rowId}/{field}/{assetId}/thumbnail": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.1.thumbnail",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付（互換パス）のサムネイルを取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Verified bytes, no-store; content is attachment, thumbnail image/png",
            "content": {
              "image/png": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付（互換パス）のサムネイルを取得での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付（互換パス）のサムネイルを取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付（互換パス）のサムネイルを取得での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付（互換パス）のサムネイルを取得での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付（互換パス）のサムネイルを取得での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付（互換パス）のサムネイルを取得での拒否・失敗: ASSET_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付（互換パス）のサムネイルを取得での拒否・失敗: FIELD_NOT_ALLOWED, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付（互換パス）のサムネイルを取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付（互換パス）のサムネイルを取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付（互換パス）のサムネイルを取得での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付（互換パス）のサムネイルを取得での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付（互換パス）のサムネイルを取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "thumbnail",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v1/assets/workspaces/{collection}/{rowId}/{field}/{assetId}/reference": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "media.1.reference",
        "tags": [
          "media"
        ],
        "description": "行の画像・添付（互換パス）の外部原本への参照を登録。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 v2行のasset_ref列へ関連付ける。親行・列・所属・原本保持方針を検査し、任意URLを受け付けない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "rowId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "field",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "If-Match",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\"[0-9]{1,9}\"$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-zA-Z0-9_-]{8,128}$"
            }
          },
          {
            "name": "X-Parent-Version",
            "in": "header",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "添付先の親行の現在version。表のschema_versionとは別。"
            }
          },
          {
            "name": "X-Schema-Version",
            "in": "header",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MediaReference"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Media"
                }
              }
            }
          },
          "400": {
            "description": "行の画像・添付（互換パス）の外部原本への参照を登録での拒否・失敗: ASSET_INVALID, ASSET_INVALID_IMAGE, BAD_REQUEST, ETAG_MALFORMED, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行の画像・添付（互換パス）の外部原本への参照を登録での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行の画像・添付（互換パス）の外部原本への参照を登録での拒否・失敗: ASSET_POLICY_DENIED, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_DENIED",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行の画像・添付（互換パス）の外部原本への参照を登録での拒否・失敗: ASSET_NOT_FOUND, ASSET_NO_THUMBNAIL, NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行の画像・添付（互換パス）の外部原本への参照を登録での拒否・失敗: ASSET_POLICY_CHANGED, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_POLICY_CHANGED",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "行の画像・添付（互換パス）の外部原本への参照を登録での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行の画像・添付（互換パス）の外部原本への参照を登録での拒否・失敗: ASSET_TOO_LARGE, PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_TOO_LARGE",
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "行の画像・添付（互換パス）の外部原本への参照を登録での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行の画像・添付（互換パス）の外部原本への参照を登録での拒否・失敗: FIELD_NOT_ALLOWED, IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_ALLOWED",
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "行の画像・添付（互換パス）の外部原本への参照を登録での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED, PRECONDITION_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED",
              "PRECONDITION_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行の画像・添付（互換パス）の外部原本への参照を登録での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行の画像・添付（互換パス）の外部原本への参照を登録での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行の画像・添付（互換パス）の外部原本への参照を登録での拒否・失敗: ASSET_BUSY, ASSET_DEPENDENCY_UNAVAILABLE, DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_BUSY",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "507": {
            "description": "行の画像・添付（互換パス）の外部原本への参照を登録での拒否・失敗: ASSET_QUOTA_EXCEEDED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "ASSET_QUOTA_EXCEEDED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行の画像・添付（互換パス）の外部原本への参照を登録",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "v2_media_slot",
              "action": "reference",
              "checks": [
                "parent_row",
                "asset_ref_field",
                "membership",
                "field_read_write",
                "current_parent_version",
                "storage_policy"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "header.If-Match",
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-availability": "提供中（環境による）",
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/access/deletions/{subjectId}/{collection}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspaceAccess.deleteGet",
        "tags": [
          "workspace-access"
        ],
        "x-availability": "環境による",
        "description": "本人の行削除範囲を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理権限は業務行の閲覧権を付与しない。人物対応は明示された本人IDと人物行を使い、名前や行所有者から推測しない。",
        "parameters": [
          {
            "name": "subjectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HumanDeleteGrant"
                },
                "examples": {
                  "workspaceAccess-deleteGet": {
                    "summary": "本人の行削除範囲を取得",
                    "value": {
                      "version": 0,
                      "grant": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "本人の行削除範囲を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "本人の行削除範囲を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "本人の行削除範囲を取得での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "本人の行削除範囲を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "本人の行削除範囲を取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "本人の行削除範囲を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "本人の行削除範囲を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "本人の行削除範囲を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "本人の行削除範囲を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "本人の行削除範囲を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "deleteGet"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspaceAccess.deletePut",
        "tags": [
          "workspace-access"
        ],
        "x-availability": "環境による",
        "description": "本人の行削除範囲を設定。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理権限は業務行の閲覧権を付与しない。人物対応は明示された本人IDと人物行を使い、名前や行所有者から推測しない。",
        "parameters": [
          {
            "name": "subjectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HumanDeleteInput"
              },
              "examples": {
                "workspaceAccess-deletePut": {
                  "summary": "本人の行削除範囲を設定",
                  "value": {
                    "version": 0,
                    "scope": "own",
                    "expires_at": "2026-10-05T00:00:00Z",
                    "reason": "本人の行の削除を許可"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HumanDeleteGrant"
                },
                "examples": {
                  "workspaceAccess-deletePut": {
                    "summary": "本人の行削除範囲を設定",
                    "value": {
                      "version": 1,
                      "grant": {
                        "version": 1,
                        "scope": "own",
                        "expires_at": "2026-10-05T00:00:00Z",
                        "source": "explicit"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "本人の行削除範囲を設定での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "本人の行削除範囲を設定での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "本人の行削除範囲を設定での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "本人の行削除範囲を設定での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "本人の行削除範囲を設定での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "本人の行削除範囲を設定での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "本人の行削除範囲を設定での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "本人の行削除範囲を設定での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "本人の行削除範囲を設定での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "本人の行削除範囲を設定での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "本人の行削除範囲を設定での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "本人の行削除範囲を設定での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "本人の行削除範囲を設定での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "本人の行削除範囲を設定",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "deletePut"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/access/people/{collection}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspaceAccess.rootGet",
        "tags": [
          "workspace-access"
        ],
        "x-availability": "環境による",
        "description": "人物表の登録状態を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理権限は業務行の閲覧権を付与しない。人物対応は明示された本人IDと人物行を使い、名前や行所有者から推測しない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonRootResult"
                },
                "examples": {
                  "workspaceAccess-rootGet": {
                    "summary": "人物表の登録状態を取得",
                    "value": {
                      "version": 0,
                      "root": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "人物表の登録状態を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "人物表の登録状態を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "人物表の登録状態を取得での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "人物表の登録状態を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "人物表の登録状態を取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "人物表の登録状態を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "人物表の登録状態を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "人物表の登録状態を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "人物表の登録状態を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "人物表の登録状態を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "rootGet"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspaceAccess.rootPut",
        "tags": [
          "workspace-access"
        ],
        "x-availability": "環境による",
        "description": "人物表を登録。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理権限は業務行の閲覧権を付与しない。人物対応は明示された本人IDと人物行を使い、名前や行所有者から推測しない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PersonRootInput"
              },
              "examples": {
                "workspaceAccess-rootPut": {
                  "summary": "人物表を登録",
                  "value": {
                    "version": 0,
                    "enabled": true,
                    "reason": "人物表として登録"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonRootResult"
                },
                "examples": {
                  "workspaceAccess-rootPut": {
                    "summary": "人物表を登録",
                    "value": {
                      "version": 1,
                      "root": {
                        "collection": "demo_people",
                        "version": 1,
                        "enabled": true
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "人物表を登録での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "人物表を登録での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "人物表を登録での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "人物表を登録での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "人物表を登録での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "人物表を登録での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "人物表を登録での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "人物表を登録での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "人物表を登録での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "人物表を登録での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "人物表を登録での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "人物表を登録での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "人物表を登録での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "人物表を登録",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "rootPut"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/access/people/{collection}/bindings/{subjectId}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspaceAccess.bindingGet",
        "tags": [
          "workspace-access"
        ],
        "x-availability": "環境による",
        "description": "本人IDと人物行の対応を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理権限は業務行の閲覧権を付与しない。人物対応は明示された本人IDと人物行を使い、名前や行所有者から推測しない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subjectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonBindingResult"
                },
                "examples": {
                  "workspaceAccess-bindingGet": {
                    "summary": "本人IDと人物行の対応を取得",
                    "value": {
                      "version": 0,
                      "binding": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "本人IDと人物行の対応を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "本人IDと人物行の対応を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "本人IDと人物行の対応を取得での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "本人IDと人物行の対応を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "本人IDと人物行の対応を取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "本人IDと人物行の対応を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "本人IDと人物行の対応を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "本人IDと人物行の対応を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "本人IDと人物行の対応を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "本人IDと人物行の対応を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "bindingGet"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspaceAccess.bindingPut",
        "tags": [
          "workspace-access"
        ],
        "x-availability": "環境による",
        "description": "本人IDと人物行の対応を設定。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理権限は業務行の閲覧権を付与しない。人物対応は明示された本人IDと人物行を使い、名前や行所有者から推測しない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subjectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PersonBindingInput"
              },
              "examples": {
                "workspaceAccess-bindingPut": {
                  "summary": "本人IDと人物行の対応を設定",
                  "value": {
                    "version": 0,
                    "person_id": "22222222-2222-4222-8222-222222222222",
                    "enabled": true,
                    "expires_at": "2026-10-05T00:00:00Z",
                    "reason": "検証用本人を人物行に対応付け"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonBindingResult"
                },
                "examples": {
                  "workspaceAccess-bindingPut": {
                    "summary": "本人IDと人物行の対応を設定",
                    "value": {
                      "version": 1,
                      "binding": {
                        "person_id": "22222222-2222-4222-8222-222222222222",
                        "version": 1,
                        "enabled": true,
                        "expires_at": "2026-10-05T00:00:00Z"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "本人IDと人物行の対応を設定での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "本人IDと人物行の対応を設定での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "本人IDと人物行の対応を設定での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "本人IDと人物行の対応を設定での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "本人IDと人物行の対応を設定での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "本人IDと人物行の対応を設定での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "本人IDと人物行の対応を設定での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "本人IDと人物行の対応を設定での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "本人IDと人物行の対応を設定での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "本人IDと人物行の対応を設定での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "本人IDと人物行の対応を設定での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "本人IDと人物行の対応を設定での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "本人IDと人物行の対応を設定での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "本人IDと人物行の対応を設定",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "bindingPut"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/access/people/{collection}/rows/{personId}/members": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspaceAccess.membersGet",
        "tags": [
          "workspace-access"
        ],
        "x-availability": "環境による",
        "description": "人物行の所属者を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理権限は業務行の閲覧権を付与しない。人物対応は明示された本人IDと人物行を使い、名前や行所有者から推測しない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "personId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonMembersPage"
                },
                "examples": {
                  "workspaceAccess-membersGet": {
                    "summary": "人物行の所属者を取得",
                    "value": {
                      "items": [
                        {
                          "actor": "11111111-1111-4111-8111-111111111111",
                          "version": 1,
                          "enabled": true,
                          "write": false,
                          "expires_at": "2026-10-05T00:00:00Z"
                        }
                      ],
                      "next_after": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "人物行の所属者を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "人物行の所属者を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "人物行の所属者を取得での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "人物行の所属者を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "人物行の所属者を取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "人物行の所属者を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "人物行の所属者を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "人物行の所属者を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "人物行の所属者を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "人物行の所属者を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "membersGet"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      },
      "put": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspaceAccess.membersPut",
        "tags": [
          "workspace-access"
        ],
        "x-availability": "環境による",
        "description": "人物行の所属者を設定。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理権限は業務行の閲覧権を付与しない。人物対応は明示された本人IDと人物行を使い、名前や行所有者から推測しない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "personId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PersonMembersInput"
              },
              "examples": {
                "workspaceAccess-membersPut": {
                  "summary": "人物行の所属者を設定",
                  "value": {
                    "reason": "閲覧所属を登録",
                    "members": [
                      {
                        "actor": "11111111-1111-4111-8111-111111111111",
                        "version": 0,
                        "enabled": true,
                        "write": false,
                        "expires_at": "2026-10-05T00:00:00Z"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonMembersResult"
                },
                "examples": {
                  "workspaceAccess-membersPut": {
                    "summary": "人物行の所属者を設定",
                    "value": {
                      "items": [
                        {
                          "actor": "11111111-1111-4111-8111-111111111111",
                          "version": 1,
                          "enabled": true,
                          "write": false,
                          "expires_at": "2026-10-05T00:00:00Z"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "人物行の所属者を設定での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "人物行の所属者を設定での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "人物行の所属者を設定での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "人物行の所属者を設定での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "人物行の所属者を設定での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "人物行の所属者を設定での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "人物行の所属者を設定での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "人物行の所属者を設定での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "人物行の所属者を設定での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "人物行の所属者を設定での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "人物行の所属者を設定での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "人物行の所属者を設定での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "人物行の所属者を設定での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "人物行の所属者を設定",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "membersPut"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/people/{collection}/me": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspaceAccess.me",
        "tags": [
          "workspace-access"
        ],
        "x-availability": "環境による",
        "description": "本人に対応する人物行を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理権限は業務行の閲覧権を付与しない。人物対応は明示された本人IDと人物行を使い、名前や行所有者から推測しない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonSelf"
                },
                "examples": {
                  "workspaceAccess-me": {
                    "summary": "本人に対応する人物行を取得",
                    "value": {
                      "resolution": "resolved",
                      "person_id": "22222222-2222-4222-8222-222222222222",
                      "binding_version": 1
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "本人に対応する人物行を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "本人に対応する人物行を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "本人に対応する人物行を取得での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "本人に対応する人物行を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "本人に対応する人物行を取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "本人に対応する人物行を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "本人に対応する人物行を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "本人に対応する人物行を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "本人に対応する人物行を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "本人に対応する人物行を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "person_resolution",
              "action": "me",
              "checks": [
                "enabled_root",
                "current_binding",
                "row_visibility",
                "membership"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/subjects/query": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "workspaceAccess.subjects",
        "tags": [
          "workspace-access"
        ],
        "x-availability": "環境による",
        "description": "行に対応する本人IDを検索。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 管理権限は業務行の閲覧権を付与しない。人物対応は明示された本人IDと人物行を使い、名前や行所有者から推測しない。",
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RowSubjectsInput"
              },
              "examples": {
                "workspaceAccess-subjects": {
                  "summary": "行に対応する本人IDを検索",
                  "value": {
                    "rows": [
                      {
                        "id": "22222222-2222-4222-8222-222222222222",
                        "version": 1
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RowSubjectsResult"
                },
                "examples": {
                  "workspaceAccess-subjects": {
                    "summary": "行に対応する本人IDを検索",
                    "value": {
                      "person_collection": "demo_people",
                      "items": [
                        {
                          "row_id": "22222222-2222-4222-8222-222222222222",
                          "row_version": 1,
                          "person_id": "22222222-2222-4222-8222-222222222222"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "行に対応する本人IDを検索での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "行に対応する本人IDを検索での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "行に対応する本人IDを検索での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "行に対応する本人IDを検索での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "行に対応する本人IDを検索での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "行に対応する本人IDを検索での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "行に対応する本人IDを検索での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "行に対応する本人IDを検索での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "行に対応する本人IDを検索での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "行に対応する本人IDを検索での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "行に対応する本人IDを検索での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "行に対応する本人IDを検索",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "person_resolution",
              "action": "subjects",
              "checks": [
                "enabled_root",
                "current_binding",
                "row_visibility",
                "membership"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/data-migrations": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.migrationList",
        "tags": [
          "app-packages"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "x-availability": "環境による",
        "description": "データ移行の一覧を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "app": {
                            "type": "string"
                          },
                          "state": {
                            "type": "string"
                          },
                          "revision": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "created_at": {
                            "type": "string"
                          },
                          "is_owner": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "id",
                          "app",
                          "state",
                          "revision",
                          "created_at",
                          "is_owner"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 100
                    }
                  },
                  "required": [
                    "items"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-migrationList": {
                    "summary": "データ移行の一覧を取得",
                    "value": {
                      "items": [
                        {
                          "id": "44444444-4444-4444-8444-444444444444",
                          "app": "demo_app",
                          "state": "scanning",
                          "revision": 1,
                          "created_at": "2026-10-04T00:00:00Z",
                          "is_owner": true
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "データ移行の一覧を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "データ移行の一覧を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "データ移行の一覧を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "データ移行の一覧を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "データ移行の一覧を取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "データ移行の一覧を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "データ移行の一覧を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "データ移行の一覧を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "データ移行の一覧を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "データ移行の一覧を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "migrationList"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/data-migrations/{migrationId}/preview": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.migrationPreview",
        "tags": [
          "app-packages"
        ],
        "parameters": [
          {
            "name": "migrationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "x-availability": "環境による",
        "description": "移行前後の行を比較。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "collection": {
                    "type": "string"
                  },
                  "after": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "required": [
                  "collection"
                ],
                "additionalProperties": false
              },
              "examples": {
                "app-packages-migrationPreview": {
                  "summary": "移行前後の行を比較",
                  "value": {
                    "collection": "demo_tasks"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "collection": {
                      "type": "string"
                    },
                    "items": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "before": {
                            "type": "object"
                          },
                          "after_values": {
                            "type": [
                              "object",
                              "null"
                            ]
                          },
                          "error": {
                            "type": [
                              "object",
                              "null"
                            ]
                          }
                        },
                        "required": [
                          "id",
                          "before",
                          "after_values",
                          "error"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 20
                    }
                  },
                  "required": [
                    "collection",
                    "items"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-migrationPreview": {
                    "summary": "移行前後の行を比較",
                    "value": {
                      "collection": "demo_tasks",
                      "items": [
                        {
                          "id": "22222222-2222-4222-8222-222222222222",
                          "before": {
                            "title": "合成データ"
                          },
                          "after_values": {
                            "title": "合成データ"
                          },
                          "error": null
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "移行前後の行を比較での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "移行前後の行を比較での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "移行前後の行を比較での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "移行前後の行を比較での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "移行前後の行を比較での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "移行前後の行を比較での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "移行前後の行を比較での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "移行前後の行を比較での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "移行前後の行を比較での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "移行前後の行を比較での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "移行前後の行を比較での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "移行前後の行を比較",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "migrationPreview"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/data-migrations/plan": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.migrationPlan",
        "tags": [
          "app-packages"
        ],
        "parameters": [],
        "x-availability": "環境による",
        "description": "データ移行計画を作成。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "migration_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "package": {
                    "type": "object",
                    "properties": {
                      "manifest": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "version": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "name": {
                            "type": "string"
                          },
                          "datasets": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "mode": {
                                  "enum": [
                                    "owned",
                                    "shared"
                                  ]
                                },
                                "definition": {
                                  "$ref": "#/components/schemas/WorkspaceDefine"
                                }
                              },
                              "required": [
                                "id",
                                "mode",
                                "definition"
                              ],
                              "additionalProperties": false
                            },
                            "maxItems": 32,
                            "minItems": 1
                          },
                          "dependencies": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "maxItems": 32,
                            "uniqueItems": true
                          }
                        },
                        "required": [
                          "id",
                          "version",
                          "name",
                          "datasets",
                          "dependencies"
                        ],
                        "additionalProperties": false
                      },
                      "csv": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "collection": {
                              "type": "string"
                            },
                            "key_fields": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "maxItems": 64,
                              "minItems": 1,
                              "uniqueItems": true
                            }
                          },
                          "required": [
                            "collection",
                            "key_fields"
                          ],
                          "additionalProperties": false
                        },
                        "maxItems": 32
                      },
                      "requirements": {
                        "type": "object",
                        "properties": {
                          "dependencies": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "min_version": {
                                  "type": "integer",
                                  "minimum": 1
                                }
                              },
                              "required": [
                                "id",
                                "min_version"
                              ],
                              "additionalProperties": false
                            },
                            "maxItems": 32
                          },
                          "integrations": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "maxItems": 16
                          },
                          "service_clients": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "format": "uuid"
                            },
                            "maxItems": 16
                          }
                        },
                        "required": [
                          "dependencies",
                          "integrations",
                          "service_clients"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "manifest",
                      "csv"
                    ],
                    "additionalProperties": false
                  },
                  "transforms": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "collection": {
                          "type": "string"
                        },
                        "fields": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "target": {
                                "type": "string"
                              },
                              "source": {
                                "type": "string"
                              },
                              "convert": {
                                "enum": [
                                  "identity",
                                  "text",
                                  "number",
                                  "boolean"
                                ]
                              },
                              "default": {
                                "type": [
                                  "string",
                                  "number",
                                  "boolean",
                                  "null"
                                ]
                              }
                            },
                            "required": [
                              "target",
                              "convert"
                            ],
                            "additionalProperties": false
                          },
                          "maxItems": 64
                        }
                      },
                      "required": [
                        "collection",
                        "fields"
                      ],
                      "additionalProperties": false
                    },
                    "maxItems": 32
                  },
                  "reason": {
                    "type": "string"
                  }
                },
                "required": [
                  "migration_id",
                  "package",
                  "transforms",
                  "reason"
                ],
                "additionalProperties": false
              },
              "examples": {
                "app-packages-migrationPlan": {
                  "summary": "データ移行計画を作成",
                  "value": {
                    "migration_id": "44444444-4444-4444-8444-444444444444",
                    "package": {
                      "manifest": {
                        "id": "demo_app",
                        "version": 1,
                        "name": "検証アプリ",
                        "datasets": [
                          {
                            "id": "demo_tasks",
                            "mode": "owned",
                            "definition": {
                              "label": "作業",
                              "fields": [
                                {
                                  "id": "title",
                                  "label": "件名",
                                  "type": "text",
                                  "required": true,
                                  "read": [
                                    "staff"
                                  ],
                                  "write": [
                                    "staff"
                                  ],
                                  "searchable": true,
                                  "choices": []
                                }
                              ],
                              "export_roles": [
                                "staff"
                              ]
                            }
                          }
                        ],
                        "dependencies": []
                      },
                      "csv": [
                        {
                          "collection": "demo_tasks",
                          "key_fields": [
                            "title"
                          ]
                        }
                      ]
                    },
                    "transforms": [
                      {
                        "collection": "demo_tasks",
                        "fields": [
                          {
                            "target": "title",
                            "source": "title",
                            "convert": "identity"
                          }
                        ]
                      }
                    ],
                    "reason": "列定義の移行を検証"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "fingerprint": {
                      "type": "string"
                    },
                    "migration": {
                      "type": "object",
                      "properties": {
                        "migration_id": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "package": {
                          "type": "object",
                          "properties": {
                            "manifest": {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "version": {
                                  "type": "integer",
                                  "minimum": 1
                                },
                                "name": {
                                  "type": "string"
                                },
                                "datasets": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "id": {
                                        "type": "string"
                                      },
                                      "mode": {
                                        "enum": [
                                          "owned",
                                          "shared"
                                        ]
                                      },
                                      "definition": {
                                        "$ref": "#/components/schemas/WorkspaceDefine"
                                      }
                                    },
                                    "required": [
                                      "id",
                                      "mode",
                                      "definition"
                                    ],
                                    "additionalProperties": false
                                  },
                                  "maxItems": 32,
                                  "minItems": 1
                                },
                                "dependencies": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  },
                                  "maxItems": 32,
                                  "uniqueItems": true
                                }
                              },
                              "required": [
                                "id",
                                "version",
                                "name",
                                "datasets",
                                "dependencies"
                              ],
                              "additionalProperties": false
                            },
                            "csv": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "collection": {
                                    "type": "string"
                                  },
                                  "key_fields": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    },
                                    "maxItems": 64,
                                    "minItems": 1,
                                    "uniqueItems": true
                                  }
                                },
                                "required": [
                                  "collection",
                                  "key_fields"
                                ],
                                "additionalProperties": false
                              },
                              "maxItems": 32
                            },
                            "requirements": {
                              "type": "object",
                              "properties": {
                                "dependencies": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "id": {
                                        "type": "string"
                                      },
                                      "min_version": {
                                        "type": "integer",
                                        "minimum": 1
                                      }
                                    },
                                    "required": [
                                      "id",
                                      "min_version"
                                    ],
                                    "additionalProperties": false
                                  },
                                  "maxItems": 32
                                },
                                "integrations": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  },
                                  "maxItems": 16
                                },
                                "service_clients": {
                                  "type": "array",
                                  "items": {
                                    "type": "string",
                                    "format": "uuid"
                                  },
                                  "maxItems": 16
                                }
                              },
                              "required": [
                                "dependencies",
                                "integrations",
                                "service_clients"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "manifest",
                            "csv"
                          ],
                          "additionalProperties": false
                        },
                        "transforms": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "collection": {
                                "type": "string"
                              },
                              "fields": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "target": {
                                      "type": "string"
                                    },
                                    "source": {
                                      "type": "string"
                                    },
                                    "convert": {
                                      "enum": [
                                        "identity",
                                        "text",
                                        "number",
                                        "boolean"
                                      ]
                                    },
                                    "default": {
                                      "type": [
                                        "string",
                                        "number",
                                        "boolean",
                                        "null"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "target",
                                    "convert"
                                  ],
                                  "additionalProperties": false
                                },
                                "maxItems": 64
                              }
                            },
                            "required": [
                              "collection",
                              "fields"
                            ],
                            "additionalProperties": false
                          },
                          "maxItems": 32
                        },
                        "reason": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "migration_id",
                        "package",
                        "transforms",
                        "reason"
                      ],
                      "additionalProperties": false
                    },
                    "tables": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "collection": {
                            "type": "string"
                          },
                          "version": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "count": {
                            "type": "integer",
                            "minimum": 0
                          }
                        },
                        "required": [
                          "collection",
                          "version",
                          "count"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 32
                    }
                  },
                  "required": [
                    "fingerprint",
                    "migration",
                    "tables"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-migrationPlan": {
                    "summary": "データ移行計画を作成",
                    "value": {
                      "fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                      "migration": {
                        "migration_id": "44444444-4444-4444-8444-444444444444",
                        "package": {
                          "manifest": {
                            "id": "demo_app",
                            "version": 1,
                            "name": "検証アプリ",
                            "datasets": [
                              {
                                "id": "demo_tasks",
                                "mode": "owned",
                                "definition": {
                                  "label": "作業",
                                  "fields": [
                                    {
                                      "id": "title",
                                      "label": "件名",
                                      "type": "text",
                                      "required": true,
                                      "read": [
                                        "staff"
                                      ],
                                      "write": [
                                        "staff"
                                      ],
                                      "searchable": true,
                                      "choices": []
                                    }
                                  ],
                                  "export_roles": [
                                    "staff"
                                  ]
                                }
                              }
                            ],
                            "dependencies": []
                          },
                          "csv": [
                            {
                              "collection": "demo_tasks",
                              "key_fields": [
                                "title"
                              ]
                            }
                          ]
                        },
                        "transforms": [
                          {
                            "collection": "demo_tasks",
                            "fields": [
                              {
                                "target": "title",
                                "source": "title",
                                "convert": "identity"
                              }
                            ]
                          }
                        ],
                        "reason": "列定義の移行を検証"
                      },
                      "tables": [
                        {
                          "collection": "demo_tasks",
                          "version": 1,
                          "count": 1
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "データ移行計画を作成での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "データ移行計画を作成での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "データ移行計画を作成での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "データ移行計画を作成での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "データ移行計画を作成での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "データ移行計画を作成での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "データ移行計画を作成での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "データ移行計画を作成での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "データ移行計画を作成での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "データ移行計画を作成での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "データ移行計画を作成での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "データ移行計画を作成",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "migrationPlan"
            },
            {
              "kind": "affected_tables",
              "checks": [
                "current_design_grants",
                "dependency_state"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/data-migrations/begin": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.migrationBegin",
        "tags": [
          "app-packages"
        ],
        "parameters": [],
        "x-availability": "環境による",
        "description": "確認済みデータ移行を開始。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "migration": {
                    "type": "object",
                    "properties": {
                      "migration_id": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "package": {
                        "type": "object",
                        "properties": {
                          "manifest": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "version": {
                                "type": "integer",
                                "minimum": 1
                              },
                              "name": {
                                "type": "string"
                              },
                              "datasets": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string"
                                    },
                                    "mode": {
                                      "enum": [
                                        "owned",
                                        "shared"
                                      ]
                                    },
                                    "definition": {
                                      "$ref": "#/components/schemas/WorkspaceDefine"
                                    }
                                  },
                                  "required": [
                                    "id",
                                    "mode",
                                    "definition"
                                  ],
                                  "additionalProperties": false
                                },
                                "maxItems": 32,
                                "minItems": 1
                              },
                              "dependencies": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                },
                                "maxItems": 32,
                                "uniqueItems": true
                              }
                            },
                            "required": [
                              "id",
                              "version",
                              "name",
                              "datasets",
                              "dependencies"
                            ],
                            "additionalProperties": false
                          },
                          "csv": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "collection": {
                                  "type": "string"
                                },
                                "key_fields": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  },
                                  "maxItems": 64,
                                  "minItems": 1,
                                  "uniqueItems": true
                                }
                              },
                              "required": [
                                "collection",
                                "key_fields"
                              ],
                              "additionalProperties": false
                            },
                            "maxItems": 32
                          },
                          "requirements": {
                            "type": "object",
                            "properties": {
                              "dependencies": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string"
                                    },
                                    "min_version": {
                                      "type": "integer",
                                      "minimum": 1
                                    }
                                  },
                                  "required": [
                                    "id",
                                    "min_version"
                                  ],
                                  "additionalProperties": false
                                },
                                "maxItems": 32
                              },
                              "integrations": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                },
                                "maxItems": 16
                              },
                              "service_clients": {
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "format": "uuid"
                                },
                                "maxItems": 16
                              }
                            },
                            "required": [
                              "dependencies",
                              "integrations",
                              "service_clients"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "required": [
                          "manifest",
                          "csv"
                        ],
                        "additionalProperties": false
                      },
                      "transforms": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "collection": {
                              "type": "string"
                            },
                            "fields": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "target": {
                                    "type": "string"
                                  },
                                  "source": {
                                    "type": "string"
                                  },
                                  "convert": {
                                    "enum": [
                                      "identity",
                                      "text",
                                      "number",
                                      "boolean"
                                    ]
                                  },
                                  "default": {
                                    "type": [
                                      "string",
                                      "number",
                                      "boolean",
                                      "null"
                                    ]
                                  }
                                },
                                "required": [
                                  "target",
                                  "convert"
                                ],
                                "additionalProperties": false
                              },
                              "maxItems": 64
                            }
                          },
                          "required": [
                            "collection",
                            "fields"
                          ],
                          "additionalProperties": false
                        },
                        "maxItems": 32
                      },
                      "reason": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "migration_id",
                      "package",
                      "transforms",
                      "reason"
                    ],
                    "additionalProperties": false
                  },
                  "fingerprint": {
                    "type": "string",
                    "pattern": "^[0-9a-f]{64}$"
                  }
                },
                "required": [
                  "migration",
                  "fingerprint"
                ],
                "additionalProperties": false
              },
              "examples": {
                "app-packages-migrationBegin": {
                  "summary": "確認済みデータ移行を開始",
                  "value": {
                    "migration": {
                      "migration_id": "44444444-4444-4444-8444-444444444444",
                      "package": {
                        "manifest": {
                          "id": "demo_app",
                          "version": 1,
                          "name": "検証アプリ",
                          "datasets": [
                            {
                              "id": "demo_tasks",
                              "mode": "owned",
                              "definition": {
                                "label": "作業",
                                "fields": [
                                  {
                                    "id": "title",
                                    "label": "件名",
                                    "type": "text",
                                    "required": true,
                                    "read": [
                                      "staff"
                                    ],
                                    "write": [
                                      "staff"
                                    ],
                                    "searchable": true,
                                    "choices": []
                                  }
                                ],
                                "export_roles": [
                                  "staff"
                                ]
                              }
                            }
                          ],
                          "dependencies": []
                        },
                        "csv": [
                          {
                            "collection": "demo_tasks",
                            "key_fields": [
                              "title"
                            ]
                          }
                        ]
                      },
                      "transforms": [
                        {
                          "collection": "demo_tasks",
                          "fields": [
                            {
                              "target": "title",
                              "source": "title",
                              "convert": "identity"
                            }
                          ]
                        }
                      ],
                      "reason": "列定義の移行を検証"
                    },
                    "fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "state": {
                      "enum": [
                        "scanning",
                        "verifying",
                        "ready",
                        "blocked",
                        "committed",
                        "cancelled"
                      ]
                    },
                    "revision": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "app": {
                      "type": "string"
                    },
                    "reason": {
                      "type": "string"
                    },
                    "targets": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "collection": {
                            "type": "string"
                          },
                          "source_count": {
                            "type": "integer"
                          },
                          "scanned": {
                            "type": "integer"
                          },
                          "cursor": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "done": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "collection",
                          "source_count",
                          "scanned",
                          "cursor",
                          "done"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 32
                    },
                    "verified": {
                      "type": "integer"
                    },
                    "errors": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "collection": {
                            "type": "string"
                          },
                          "row_id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "field": {
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "collection",
                          "row_id",
                          "field",
                          "code"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 100
                    },
                    "error_count": {
                      "type": "integer"
                    },
                    "response": {
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "replayed": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "state",
                    "revision",
                    "app",
                    "reason",
                    "targets",
                    "verified",
                    "errors",
                    "error_count",
                    "response"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-migrationBegin": {
                    "summary": "確認済みデータ移行を開始",
                    "value": {
                      "id": "44444444-4444-4444-8444-444444444444",
                      "state": "scanning",
                      "revision": 1,
                      "app": "demo_app",
                      "reason": "列定義の移行を検証",
                      "targets": [
                        {
                          "collection": "demo_tasks",
                          "source_count": 1,
                          "scanned": 0,
                          "cursor": null,
                          "done": false
                        }
                      ],
                      "verified": 0,
                      "errors": [],
                      "error_count": 0,
                      "response": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "確認済みデータ移行を開始での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "確認済みデータ移行を開始での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "確認済みデータ移行を開始での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "確認済みデータ移行を開始での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "確認済みデータ移行を開始での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "確認済みデータ移行を開始での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "確認済みデータ移行を開始での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "確認済みデータ移行を開始での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "確認済みデータ移行を開始での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "確認済みデータ移行を開始での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "確認済みデータ移行を開始での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "確認済みデータ移行を開始",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "migrationBegin"
            },
            {
              "kind": "affected_tables",
              "checks": [
                "current_design_grants",
                "dependency_state"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "fingerprint",
          "identifier": "body.migration.migration_id + body.fingerprint",
          "safe_to_repeat": true,
          "result_check": "同じ主体・移行ID・本文・fingerprintで再送すると既存jobを返す。GET /v2/data-migrations/{migrationId} でも状態を確認。変更した入力やfingerprintでは再送しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/data-migrations/{migrationId}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.migrationGet",
        "tags": [
          "app-packages"
        ],
        "parameters": [
          {
            "name": "migrationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "x-availability": "環境による",
        "description": "データ移行の進捗を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "state": {
                      "enum": [
                        "scanning",
                        "verifying",
                        "ready",
                        "blocked",
                        "committed",
                        "cancelled"
                      ]
                    },
                    "revision": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "app": {
                      "type": "string"
                    },
                    "reason": {
                      "type": "string"
                    },
                    "targets": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "collection": {
                            "type": "string"
                          },
                          "source_count": {
                            "type": "integer"
                          },
                          "scanned": {
                            "type": "integer"
                          },
                          "cursor": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "done": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "collection",
                          "source_count",
                          "scanned",
                          "cursor",
                          "done"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 32
                    },
                    "verified": {
                      "type": "integer"
                    },
                    "errors": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "collection": {
                            "type": "string"
                          },
                          "row_id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "field": {
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "collection",
                          "row_id",
                          "field",
                          "code"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 100
                    },
                    "error_count": {
                      "type": "integer"
                    },
                    "response": {
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "replayed": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "state",
                    "revision",
                    "app",
                    "reason",
                    "targets",
                    "verified",
                    "errors",
                    "error_count",
                    "response"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-migrationGet": {
                    "summary": "データ移行の進捗を取得",
                    "value": {
                      "id": "44444444-4444-4444-8444-444444444444",
                      "state": "scanning",
                      "revision": 1,
                      "app": "demo_app",
                      "reason": "列定義の移行を検証",
                      "targets": [
                        {
                          "collection": "demo_tasks",
                          "source_count": 1,
                          "scanned": 0,
                          "cursor": null,
                          "done": false
                        }
                      ],
                      "verified": 0,
                      "errors": [],
                      "error_count": 0,
                      "response": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "データ移行の進捗を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "データ移行の進捗を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "データ移行の進捗を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "データ移行の進捗を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "データ移行の進捗を取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "データ移行の進捗を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "データ移行の進捗を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "データ移行の進捗を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "データ移行の進捗を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "データ移行の進捗を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "migrationGet"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/data-migrations/{migrationId}/next": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.migrationNext",
        "tags": [
          "app-packages"
        ],
        "parameters": [
          {
            "name": "migrationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "x-availability": "環境による",
        "description": "データ移行を次の区間へ進める。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "required": [
                  "revision"
                ],
                "additionalProperties": false
              },
              "examples": {
                "app-packages-migrationNext": {
                  "summary": "データ移行を次の区間へ進める",
                  "value": {
                    "revision": 1
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "state": {
                      "enum": [
                        "scanning",
                        "verifying",
                        "ready",
                        "blocked",
                        "committed",
                        "cancelled"
                      ]
                    },
                    "revision": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "app": {
                      "type": "string"
                    },
                    "reason": {
                      "type": "string"
                    },
                    "targets": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "collection": {
                            "type": "string"
                          },
                          "source_count": {
                            "type": "integer"
                          },
                          "scanned": {
                            "type": "integer"
                          },
                          "cursor": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "done": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "collection",
                          "source_count",
                          "scanned",
                          "cursor",
                          "done"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 32
                    },
                    "verified": {
                      "type": "integer"
                    },
                    "errors": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "collection": {
                            "type": "string"
                          },
                          "row_id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "field": {
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "collection",
                          "row_id",
                          "field",
                          "code"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 100
                    },
                    "error_count": {
                      "type": "integer"
                    },
                    "response": {
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "replayed": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "state",
                    "revision",
                    "app",
                    "reason",
                    "targets",
                    "verified",
                    "errors",
                    "error_count",
                    "response"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-migrationNext": {
                    "summary": "データ移行を次の区間へ進める",
                    "value": {
                      "id": "44444444-4444-4444-8444-444444444444",
                      "state": "verifying",
                      "revision": 2,
                      "app": "demo_app",
                      "reason": "列定義の移行を検証",
                      "targets": [
                        {
                          "collection": "demo_tasks",
                          "source_count": 1,
                          "scanned": 1,
                          "cursor": "22222222-2222-4222-8222-222222222222",
                          "done": true
                        }
                      ],
                      "verified": 0,
                      "errors": [],
                      "error_count": 0,
                      "response": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "データ移行を次の区間へ進めるでの拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "データ移行を次の区間へ進めるでの拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "データ移行を次の区間へ進めるでの拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "データ移行を次の区間へ進めるでの拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "データ移行を次の区間へ進めるでの拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "データ移行を次の区間へ進めるでの拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "データ移行を次の区間へ進めるでの拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "データ移行を次の区間へ進めるでの拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "データ移行を次の区間へ進めるでの拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "データ移行を次の区間へ進めるでの拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "データ移行を次の区間へ進めるでの拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "データ移行を次の区間へ進めるでの拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "データ移行を次の区間へ進めるでの拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "データ移行を次の区間へ進める",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "migrationNext"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/data-migrations/{migrationId}/commit": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.migrationCommit",
        "tags": [
          "app-packages"
        ],
        "parameters": [
          {
            "name": "migrationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "x-availability": "環境による",
        "description": "検証済みデータ移行を確定。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "required": [
                  "revision"
                ],
                "additionalProperties": false
              },
              "examples": {
                "app-packages-migrationCommit": {
                  "summary": "検証済みデータ移行を確定",
                  "value": {
                    "revision": 3
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "state": {
                      "enum": [
                        "scanning",
                        "verifying",
                        "ready",
                        "blocked",
                        "committed",
                        "cancelled"
                      ]
                    },
                    "revision": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "app": {
                      "type": "string"
                    },
                    "reason": {
                      "type": "string"
                    },
                    "targets": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "collection": {
                            "type": "string"
                          },
                          "source_count": {
                            "type": "integer"
                          },
                          "scanned": {
                            "type": "integer"
                          },
                          "cursor": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "done": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "collection",
                          "source_count",
                          "scanned",
                          "cursor",
                          "done"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 32
                    },
                    "verified": {
                      "type": "integer"
                    },
                    "errors": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "collection": {
                            "type": "string"
                          },
                          "row_id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "field": {
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "collection",
                          "row_id",
                          "field",
                          "code"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 100
                    },
                    "error_count": {
                      "type": "integer"
                    },
                    "response": {
                      "type": [
                        "object",
                        "null"
                      ]
                    },
                    "replayed": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "state",
                    "revision",
                    "app",
                    "reason",
                    "targets",
                    "verified",
                    "errors",
                    "error_count",
                    "response"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-migrationCommit": {
                    "summary": "検証済みデータ移行を確定",
                    "value": {
                      "id": "44444444-4444-4444-8444-444444444444",
                      "state": "committed",
                      "revision": 4,
                      "app": "demo_app",
                      "reason": "列定義の移行を検証",
                      "targets": [
                        {
                          "collection": "demo_tasks",
                          "source_count": 1,
                          "scanned": 1,
                          "cursor": "22222222-2222-4222-8222-222222222222",
                          "done": true
                        }
                      ],
                      "verified": 1,
                      "errors": [],
                      "error_count": 0,
                      "response": {
                        "id": "demo_app"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "検証済みデータ移行を確定での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "検証済みデータ移行を確定での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "検証済みデータ移行を確定での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "検証済みデータ移行を確定での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "検証済みデータ移行を確定での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "検証済みデータ移行を確定での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "検証済みデータ移行を確定での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "検証済みデータ移行を確定での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "検証済みデータ移行を確定での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "検証済みデータ移行を確定での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "検証済みデータ移行を確定での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "検証済みデータ移行を確定での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "検証済みデータ移行を確定での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "検証済みデータ移行を確定",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "migrationCommit"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/data-migrations/{migrationId}/cancel": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.migrationCancel",
        "tags": [
          "app-packages"
        ],
        "parameters": [
          {
            "name": "migrationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "x-availability": "環境による",
        "description": "データ移行を中止。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "revision": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "reason": {
                    "type": "string"
                  }
                },
                "required": [
                  "revision",
                  "reason"
                ],
                "additionalProperties": false
              },
              "examples": {
                "app-packages-migrationCancel": {
                  "summary": "データ移行を中止",
                  "value": {
                    "revision": 1,
                    "reason": "移行計画を見直す"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "state": {
                      "enum": [
                        "cancelled"
                      ]
                    },
                    "revision": {
                      "type": "integer",
                      "minimum": 1
                    }
                  },
                  "required": [
                    "id",
                    "state",
                    "revision"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-migrationCancel": {
                    "summary": "データ移行を中止",
                    "value": {
                      "id": "44444444-4444-4444-8444-444444444444",
                      "state": "cancelled",
                      "revision": 2
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "データ移行を中止での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "データ移行を中止での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "データ移行を中止での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "データ移行を中止での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "データ移行を中止での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "データ移行を中止での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "データ移行を中止での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "データ移行を中止での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "データ移行を中止での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "データ移行を中止での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "データ移行を中止での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "データ移行を中止",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "migrationCancel"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "version",
          "identifier": "body.revision",
          "safe_to_repeat": false,
          "result_check": "GET /v2/data-migrations/{migrationId} で現在版・状態・対象値を確認。版は競合検出であり応答再生キーではない。未確定ならrequest_idで照会し、最新版を自動採用して再送しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/app-adoptions/plan": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.adoptionPlan",
        "tags": [
          "app-packages"
        ],
        "parameters": [],
        "x-availability": "環境による",
        "description": "既存アプリ台帳の採用を計画。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "migration_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "source_fingerprint": {
                    "type": "string",
                    "pattern": "^[0-9a-f]{64}$"
                  },
                  "apps": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "package": {
                          "type": "object",
                          "properties": {
                            "manifest": {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "version": {
                                  "type": "integer",
                                  "minimum": 1
                                },
                                "name": {
                                  "type": "string"
                                },
                                "datasets": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "id": {
                                        "type": "string"
                                      },
                                      "mode": {
                                        "enum": [
                                          "owned",
                                          "shared"
                                        ]
                                      },
                                      "definition": {
                                        "$ref": "#/components/schemas/WorkspaceDefine"
                                      }
                                    },
                                    "required": [
                                      "id",
                                      "mode",
                                      "definition"
                                    ],
                                    "additionalProperties": false
                                  },
                                  "maxItems": 32,
                                  "minItems": 1
                                },
                                "dependencies": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  },
                                  "maxItems": 32,
                                  "uniqueItems": true
                                }
                              },
                              "required": [
                                "id",
                                "version",
                                "name",
                                "datasets",
                                "dependencies"
                              ],
                              "additionalProperties": false
                            },
                            "csv": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "collection": {
                                    "type": "string"
                                  },
                                  "key_fields": {
                                    "type": "array",
                                    "items": {
                                      "type": "string"
                                    },
                                    "maxItems": 64,
                                    "minItems": 1,
                                    "uniqueItems": true
                                  }
                                },
                                "required": [
                                  "collection",
                                  "key_fields"
                                ],
                                "additionalProperties": false
                              },
                              "maxItems": 32
                            },
                            "requirements": {
                              "type": "object",
                              "properties": {
                                "dependencies": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "id": {
                                        "type": "string"
                                      },
                                      "min_version": {
                                        "type": "integer",
                                        "minimum": 1
                                      }
                                    },
                                    "required": [
                                      "id",
                                      "min_version"
                                    ],
                                    "additionalProperties": false
                                  },
                                  "maxItems": 32
                                },
                                "integrations": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  },
                                  "maxItems": 16
                                },
                                "service_clients": {
                                  "type": "array",
                                  "items": {
                                    "type": "string",
                                    "format": "uuid"
                                  },
                                  "maxItems": 16
                                }
                              },
                              "required": [
                                "dependencies",
                                "integrations",
                                "service_clients"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "manifest",
                            "csv"
                          ],
                          "additionalProperties": false
                        },
                        "revision": {
                          "type": "integer",
                          "minimum": 1
                        },
                        "state": {
                          "enum": [
                            "active",
                            "stopped",
                            "detached"
                          ]
                        },
                        "legacy_state": {
                          "enum": [
                            "registered",
                            "stopped",
                            "detached",
                            "awaiting_activation",
                            "awaiting_integration"
                          ]
                        }
                      },
                      "required": [
                        "package",
                        "revision",
                        "state",
                        "legacy_state"
                      ],
                      "additionalProperties": false
                    },
                    "maxItems": 64
                  }
                },
                "required": [
                  "migration_id",
                  "source_fingerprint",
                  "apps"
                ],
                "additionalProperties": false
              },
              "examples": {
                "app-packages-adoptionPlan": {
                  "summary": "既存アプリ台帳の採用を計画",
                  "value": {
                    "migration_id": "44444444-4444-4444-8444-444444444444",
                    "source_fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                    "apps": [
                      {
                        "package": {
                          "manifest": {
                            "id": "demo_app",
                            "version": 1,
                            "name": "検証アプリ",
                            "datasets": [
                              {
                                "id": "demo_tasks",
                                "mode": "owned",
                                "definition": {
                                  "label": "作業",
                                  "fields": [
                                    {
                                      "id": "title",
                                      "label": "件名",
                                      "type": "text",
                                      "required": true,
                                      "read": [
                                        "staff"
                                      ],
                                      "write": [
                                        "staff"
                                      ],
                                      "searchable": true,
                                      "choices": []
                                    }
                                  ],
                                  "export_roles": [
                                    "staff"
                                  ]
                                }
                              }
                            ],
                            "dependencies": []
                          },
                          "csv": [
                            {
                              "collection": "demo_tasks",
                              "key_fields": [
                                "title"
                              ]
                            }
                          ],
                          "requirements": {
                            "dependencies": [],
                            "integrations": [],
                            "service_clients": []
                          }
                        },
                        "revision": 1,
                        "state": "active",
                        "legacy_state": "registered"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "fingerprint": {
                      "type": "string"
                    },
                    "migration_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "source_fingerprint": {
                      "type": "string"
                    },
                    "observed": {
                      "type": "object"
                    }
                  },
                  "required": [
                    "fingerprint",
                    "migration_id",
                    "source_fingerprint",
                    "observed"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-adoptionPlan": {
                    "summary": "既存アプリ台帳の採用を計画",
                    "value": {
                      "fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                      "migration_id": "44444444-4444-4444-8444-444444444444",
                      "source_fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                      "observed": {}
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "既存アプリ台帳の採用を計画での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "既存アプリ台帳の採用を計画での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "既存アプリ台帳の採用を計画での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "既存アプリ台帳の採用を計画での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "既存アプリ台帳の採用を計画での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "既存アプリ台帳の採用を計画での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "既存アプリ台帳の採用を計画での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "既存アプリ台帳の採用を計画での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "既存アプリ台帳の採用を計画での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "既存アプリ台帳の採用を計画での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "既存アプリ台帳の採用を計画での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "既存アプリ台帳の採用を計画",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "adoptionPlan"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/app-adoptions/apply": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.adoptionApply",
        "tags": [
          "app-packages"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "x-availability": "環境による",
        "description": "確認済みの既存アプリ台帳を採用。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "migration": {
                    "type": "object",
                    "properties": {
                      "migration_id": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "source_fingerprint": {
                        "type": "string",
                        "pattern": "^[0-9a-f]{64}$"
                      },
                      "apps": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "package": {
                              "type": "object",
                              "properties": {
                                "manifest": {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string"
                                    },
                                    "version": {
                                      "type": "integer",
                                      "minimum": 1
                                    },
                                    "name": {
                                      "type": "string"
                                    },
                                    "datasets": {
                                      "type": "array",
                                      "items": {
                                        "type": "object",
                                        "properties": {
                                          "id": {
                                            "type": "string"
                                          },
                                          "mode": {
                                            "enum": [
                                              "owned",
                                              "shared"
                                            ]
                                          },
                                          "definition": {
                                            "$ref": "#/components/schemas/WorkspaceDefine"
                                          }
                                        },
                                        "required": [
                                          "id",
                                          "mode",
                                          "definition"
                                        ],
                                        "additionalProperties": false
                                      },
                                      "maxItems": 32,
                                      "minItems": 1
                                    },
                                    "dependencies": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      },
                                      "maxItems": 32,
                                      "uniqueItems": true
                                    }
                                  },
                                  "required": [
                                    "id",
                                    "version",
                                    "name",
                                    "datasets",
                                    "dependencies"
                                  ],
                                  "additionalProperties": false
                                },
                                "csv": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "collection": {
                                        "type": "string"
                                      },
                                      "key_fields": {
                                        "type": "array",
                                        "items": {
                                          "type": "string"
                                        },
                                        "maxItems": 64,
                                        "minItems": 1,
                                        "uniqueItems": true
                                      }
                                    },
                                    "required": [
                                      "collection",
                                      "key_fields"
                                    ],
                                    "additionalProperties": false
                                  },
                                  "maxItems": 32
                                },
                                "requirements": {
                                  "type": "object",
                                  "properties": {
                                    "dependencies": {
                                      "type": "array",
                                      "items": {
                                        "type": "object",
                                        "properties": {
                                          "id": {
                                            "type": "string"
                                          },
                                          "min_version": {
                                            "type": "integer",
                                            "minimum": 1
                                          }
                                        },
                                        "required": [
                                          "id",
                                          "min_version"
                                        ],
                                        "additionalProperties": false
                                      },
                                      "maxItems": 32
                                    },
                                    "integrations": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      },
                                      "maxItems": 16
                                    },
                                    "service_clients": {
                                      "type": "array",
                                      "items": {
                                        "type": "string",
                                        "format": "uuid"
                                      },
                                      "maxItems": 16
                                    }
                                  },
                                  "required": [
                                    "dependencies",
                                    "integrations",
                                    "service_clients"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "required": [
                                "manifest",
                                "csv"
                              ],
                              "additionalProperties": false
                            },
                            "revision": {
                              "type": "integer",
                              "minimum": 1
                            },
                            "state": {
                              "enum": [
                                "active",
                                "stopped",
                                "detached"
                              ]
                            },
                            "legacy_state": {
                              "enum": [
                                "registered",
                                "stopped",
                                "detached",
                                "awaiting_activation",
                                "awaiting_integration"
                              ]
                            }
                          },
                          "required": [
                            "package",
                            "revision",
                            "state",
                            "legacy_state"
                          ],
                          "additionalProperties": false
                        },
                        "maxItems": 64
                      }
                    },
                    "required": [
                      "migration_id",
                      "source_fingerprint",
                      "apps"
                    ],
                    "additionalProperties": false
                  },
                  "fingerprint": {
                    "type": "string",
                    "pattern": "^[0-9a-f]{64}$"
                  }
                },
                "required": [
                  "migration",
                  "fingerprint"
                ],
                "additionalProperties": false
              },
              "examples": {
                "app-packages-adoptionApply": {
                  "summary": "確認済みの既存アプリ台帳を採用",
                  "value": {
                    "migration": {
                      "migration_id": "44444444-4444-4444-8444-444444444444",
                      "source_fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                      "apps": [
                        {
                          "package": {
                            "manifest": {
                              "id": "demo_app",
                              "version": 1,
                              "name": "検証アプリ",
                              "datasets": [
                                {
                                  "id": "demo_tasks",
                                  "mode": "owned",
                                  "definition": {
                                    "label": "作業",
                                    "fields": [
                                      {
                                        "id": "title",
                                        "label": "件名",
                                        "type": "text",
                                        "required": true,
                                        "read": [
                                          "staff"
                                        ],
                                        "write": [
                                          "staff"
                                        ],
                                        "searchable": true,
                                        "choices": []
                                      }
                                    ],
                                    "export_roles": [
                                      "staff"
                                    ]
                                  }
                                }
                              ],
                              "dependencies": []
                            },
                            "csv": [
                              {
                                "collection": "demo_tasks",
                                "key_fields": [
                                  "title"
                                ]
                              }
                            ],
                            "requirements": {
                              "dependencies": [],
                              "integrations": [],
                              "service_clients": []
                            }
                          },
                          "revision": 1,
                          "state": "active",
                          "legacy_state": "registered"
                        }
                      ]
                    },
                    "fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "migration_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "source_fingerprint": {
                      "type": "string"
                    },
                    "states": {
                      "type": "object"
                    },
                    "apps": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "version": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "revision": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "state": {
                            "enum": [
                              "active",
                              "stopped",
                              "detached",
                              "trashed"
                            ]
                          },
                          "manifest": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "version": {
                                "type": "integer",
                                "minimum": 1
                              },
                              "name": {
                                "type": "string"
                              },
                              "datasets": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string"
                                    },
                                    "mode": {
                                      "enum": [
                                        "owned",
                                        "shared"
                                      ]
                                    },
                                    "definition": {
                                      "$ref": "#/components/schemas/WorkspaceDefine"
                                    }
                                  },
                                  "required": [
                                    "id",
                                    "mode",
                                    "definition"
                                  ],
                                  "additionalProperties": false
                                },
                                "maxItems": 32,
                                "minItems": 1
                              },
                              "dependencies": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                },
                                "maxItems": 32,
                                "uniqueItems": true
                              }
                            },
                            "required": [
                              "id",
                              "version",
                              "name",
                              "datasets",
                              "dependencies"
                            ],
                            "additionalProperties": false
                          },
                          "deleted_at": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "restore_until": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        },
                        "required": [
                          "id",
                          "version",
                          "revision",
                          "state",
                          "manifest",
                          "deleted_at",
                          "restore_until"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 64
                    },
                    "replayed": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "migration_id",
                    "source_fingerprint",
                    "states",
                    "apps"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-adoptionApply": {
                    "summary": "確認済みの既存アプリ台帳を採用",
                    "value": {
                      "migration_id": "44444444-4444-4444-8444-444444444444",
                      "source_fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                      "states": {
                        "demo_app": "active"
                      },
                      "apps": [
                        {
                          "id": "demo_app",
                          "version": 1,
                          "revision": 1,
                          "state": "active",
                          "manifest": {
                            "id": "demo_app",
                            "version": 1,
                            "name": "検証アプリ",
                            "datasets": [
                              {
                                "id": "demo_tasks",
                                "mode": "owned",
                                "definition": {
                                  "label": "作業",
                                  "fields": [
                                    {
                                      "id": "title",
                                      "label": "件名",
                                      "type": "text",
                                      "required": true,
                                      "read": [
                                        "staff"
                                      ],
                                      "write": [
                                        "staff"
                                      ],
                                      "searchable": true,
                                      "choices": []
                                    }
                                  ],
                                  "export_roles": [
                                    "staff"
                                  ]
                                }
                              }
                            ],
                            "dependencies": []
                          },
                          "deleted_at": null,
                          "restore_until": null
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "確認済みの既存アプリ台帳を採用での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "確認済みの既存アプリ台帳を採用での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "確認済みの既存アプリ台帳を採用での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "確認済みの既存アプリ台帳を採用での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "確認済みの既存アプリ台帳を採用での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "確認済みの既存アプリ台帳を採用での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "確認済みの既存アプリ台帳を採用での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "確認済みの既存アプリ台帳を採用での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "確認済みの既存アプリ台帳を採用での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "確認済みの既存アプリ台帳を採用での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "確認済みの既存アプリ台帳を採用での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "確認済みの既存アプリ台帳を採用での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "確認済みの既存アプリ台帳を採用での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "確認済みの既存アプリ台帳を採用",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "adoptionApply"
            },
            {
              "kind": "affected_tables",
              "checks": [
                "current_design_grants",
                "dependency_state"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "fingerprint",
          "identifier": "body.migration.migration_id + body.fingerprint",
          "required_header": "Idempotency-Key（形式検査のみ。受領の識別子ではない）",
          "safe_to_repeat": true,
          "result_check": "同じ主体・移行ID・本文・fingerprintで再送しadoption受領を確認。入力を変更した再送は拒否される。対象アプリのGETでも状態を照合する。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/apps/{appId}/requirements/plan": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.requirementsPlan",
        "tags": [
          "app-packages"
        ],
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "x-availability": "環境による",
        "description": "アプリ接続要件の変更を計画。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "dependencies": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "min_version": {
                          "type": "integer",
                          "minimum": 1
                        }
                      },
                      "required": [
                        "id",
                        "min_version"
                      ],
                      "additionalProperties": false
                    },
                    "maxItems": 32
                  },
                  "integrations": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 16
                  },
                  "service_clients": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "maxItems": 16
                  }
                },
                "required": [
                  "dependencies",
                  "integrations",
                  "service_clients"
                ],
                "additionalProperties": false
              },
              "examples": {
                "app-packages-requirementsPlan": {
                  "summary": "アプリ接続要件の変更を計画",
                  "value": {
                    "dependencies": [],
                    "integrations": [],
                    "service_clients": []
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "revision": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "before": {
                      "type": "object",
                      "properties": {
                        "dependencies": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "min_version": {
                                "type": "integer",
                                "minimum": 1
                              }
                            },
                            "required": [
                              "id",
                              "min_version"
                            ],
                            "additionalProperties": false
                          },
                          "maxItems": 32
                        },
                        "integrations": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 16
                        },
                        "service_clients": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "maxItems": 16
                        }
                      },
                      "required": [
                        "dependencies",
                        "integrations",
                        "service_clients"
                      ],
                      "additionalProperties": false
                    },
                    "requirements": {
                      "type": "object",
                      "properties": {
                        "dependencies": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "min_version": {
                                "type": "integer",
                                "minimum": 1
                              }
                            },
                            "required": [
                              "id",
                              "min_version"
                            ],
                            "additionalProperties": false
                          },
                          "maxItems": 32
                        },
                        "integrations": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 16
                        },
                        "service_clients": {
                          "type": "array",
                          "items": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "maxItems": 16
                        }
                      },
                      "required": [
                        "dependencies",
                        "integrations",
                        "service_clients"
                      ],
                      "additionalProperties": false
                    },
                    "blockers": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "type": "string"
                          },
                          "id": {
                            "type": "string"
                          },
                          "code": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "kind",
                          "id",
                          "code"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "dependencies": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "version": {
                            "type": [
                              "integer",
                              "null"
                            ]
                          },
                          "revision": {
                            "type": [
                              "integer",
                              "null"
                            ]
                          },
                          "state": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        },
                        "required": [
                          "id",
                          "version",
                          "revision",
                          "state"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "clients": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "version": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "state": {
                            "type": "string"
                          },
                          "expires_at": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "id",
                          "version",
                          "state",
                          "expires_at"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "fingerprint": {
                      "type": "string"
                    },
                    "app_revision": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "state_after": {
                      "enum": [
                        "active",
                        "stopped"
                      ]
                    }
                  },
                  "required": [
                    "revision",
                    "before",
                    "requirements",
                    "blockers",
                    "dependencies",
                    "clients",
                    "fingerprint",
                    "app_revision",
                    "state_after"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-requirementsPlan": {
                    "summary": "アプリ接続要件の変更を計画",
                    "value": {
                      "revision": 1,
                      "before": {
                        "dependencies": [],
                        "integrations": [],
                        "service_clients": []
                      },
                      "requirements": {
                        "dependencies": [],
                        "integrations": [],
                        "service_clients": []
                      },
                      "blockers": [],
                      "dependencies": [],
                      "clients": [],
                      "fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                      "app_revision": 1,
                      "state_after": "active"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "アプリ接続要件の変更を計画での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "アプリ接続要件の変更を計画での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "アプリ接続要件の変更を計画での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "アプリ接続要件の変更を計画での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "アプリ接続要件の変更を計画での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "アプリ接続要件の変更を計画での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "アプリ接続要件の変更を計画での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "アプリ接続要件の変更を計画での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "アプリ接続要件の変更を計画での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "アプリ接続要件の変更を計画での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "アプリ接続要件の変更を計画での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "アプリ接続要件の変更を計画",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "requirementsPlan"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/apps/{appId}/requirements/apply": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.requirementsApply",
        "tags": [
          "app-packages"
        ],
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "x-availability": "環境による",
        "description": "確認済みアプリ接続要件を適用。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "requirements": {
                    "type": "object",
                    "properties": {
                      "dependencies": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "min_version": {
                              "type": "integer",
                              "minimum": 1
                            }
                          },
                          "required": [
                            "id",
                            "min_version"
                          ],
                          "additionalProperties": false
                        },
                        "maxItems": 32
                      },
                      "integrations": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "maxItems": 16
                      },
                      "service_clients": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "maxItems": 16
                      }
                    },
                    "required": [
                      "dependencies",
                      "integrations",
                      "service_clients"
                    ],
                    "additionalProperties": false
                  },
                  "fingerprint": {
                    "type": "string",
                    "pattern": "^[0-9a-f]{64}$"
                  }
                },
                "required": [
                  "requirements",
                  "fingerprint"
                ],
                "additionalProperties": false
              },
              "examples": {
                "app-packages-requirementsApply": {
                  "summary": "確認済みアプリ接続要件を適用",
                  "value": {
                    "requirements": {
                      "dependencies": [],
                      "integrations": [],
                      "service_clients": []
                    },
                    "fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "version": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "revision": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "state": {
                      "enum": [
                        "active",
                        "stopped",
                        "detached",
                        "trashed"
                      ]
                    },
                    "manifest": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "version": {
                          "type": "integer",
                          "minimum": 1
                        },
                        "name": {
                          "type": "string"
                        },
                        "datasets": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "mode": {
                                "enum": [
                                  "owned",
                                  "shared"
                                ]
                              },
                              "definition": {
                                "$ref": "#/components/schemas/WorkspaceDefine"
                              }
                            },
                            "required": [
                              "id",
                              "mode",
                              "definition"
                            ],
                            "additionalProperties": false
                          },
                          "maxItems": 32,
                          "minItems": 1
                        },
                        "dependencies": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 32,
                          "uniqueItems": true
                        }
                      },
                      "required": [
                        "id",
                        "version",
                        "name",
                        "datasets",
                        "dependencies"
                      ],
                      "additionalProperties": false
                    },
                    "deleted_at": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "restore_until": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requirements": {
                      "type": "object",
                      "properties": {
                        "revision": {
                          "type": "integer",
                          "minimum": 0
                        },
                        "before": {
                          "type": "object",
                          "properties": {
                            "dependencies": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string"
                                  },
                                  "min_version": {
                                    "type": "integer",
                                    "minimum": 1
                                  }
                                },
                                "required": [
                                  "id",
                                  "min_version"
                                ],
                                "additionalProperties": false
                              },
                              "maxItems": 32
                            },
                            "integrations": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "maxItems": 16
                            },
                            "service_clients": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "maxItems": 16
                            }
                          },
                          "required": [
                            "dependencies",
                            "integrations",
                            "service_clients"
                          ],
                          "additionalProperties": false
                        },
                        "requirements": {
                          "type": "object",
                          "properties": {
                            "dependencies": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string"
                                  },
                                  "min_version": {
                                    "type": "integer",
                                    "minimum": 1
                                  }
                                },
                                "required": [
                                  "id",
                                  "min_version"
                                ],
                                "additionalProperties": false
                              },
                              "maxItems": 32
                            },
                            "integrations": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "maxItems": 16
                            },
                            "service_clients": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "maxItems": 16
                            }
                          },
                          "required": [
                            "dependencies",
                            "integrations",
                            "service_clients"
                          ],
                          "additionalProperties": false
                        },
                        "blockers": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string"
                              },
                              "id": {
                                "type": "string"
                              },
                              "code": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "id",
                              "code"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "dependencies": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "version": {
                                "type": [
                                  "integer",
                                  "null"
                                ]
                              },
                              "revision": {
                                "type": [
                                  "integer",
                                  "null"
                                ]
                              },
                              "state": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "version",
                              "revision",
                              "state"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "clients": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "version": {
                                "type": "integer",
                                "minimum": 1
                              },
                              "state": {
                                "type": "string"
                              },
                              "expires_at": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "id",
                              "version",
                              "state",
                              "expires_at"
                            ],
                            "additionalProperties": false
                          }
                        }
                      },
                      "required": [
                        "revision",
                        "before",
                        "requirements",
                        "blockers",
                        "dependencies",
                        "clients"
                      ],
                      "additionalProperties": false
                    },
                    "replayed": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "version",
                    "revision",
                    "state",
                    "manifest",
                    "deleted_at",
                    "restore_until",
                    "requirements"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-requirementsApply": {
                    "summary": "確認済みアプリ接続要件を適用",
                    "value": {
                      "id": "demo_app",
                      "version": 1,
                      "revision": 1,
                      "state": "active",
                      "manifest": {
                        "id": "demo_app",
                        "version": 1,
                        "name": "検証アプリ",
                        "datasets": [
                          {
                            "id": "demo_tasks",
                            "mode": "owned",
                            "definition": {
                              "label": "作業",
                              "fields": [
                                {
                                  "id": "title",
                                  "label": "件名",
                                  "type": "text",
                                  "required": true,
                                  "read": [
                                    "staff"
                                  ],
                                  "write": [
                                    "staff"
                                  ],
                                  "searchable": true,
                                  "choices": []
                                }
                              ],
                              "export_roles": [
                                "staff"
                              ]
                            }
                          }
                        ],
                        "dependencies": []
                      },
                      "deleted_at": null,
                      "restore_until": null,
                      "requirements": {
                        "revision": 1,
                        "before": {
                          "dependencies": [],
                          "integrations": [],
                          "service_clients": []
                        },
                        "requirements": {
                          "dependencies": [],
                          "integrations": [],
                          "service_clients": []
                        },
                        "blockers": [],
                        "dependencies": [],
                        "clients": []
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "確認済みアプリ接続要件を適用での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "確認済みアプリ接続要件を適用での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "確認済みアプリ接続要件を適用での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "確認済みアプリ接続要件を適用での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "確認済みアプリ接続要件を適用での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "確認済みアプリ接続要件を適用での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "確認済みアプリ接続要件を適用での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "確認済みアプリ接続要件を適用での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "確認済みアプリ接続要件を適用での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "確認済みアプリ接続要件を適用での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "確認済みアプリ接続要件を適用での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "確認済みアプリ接続要件を適用での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "確認済みアプリ接続要件を適用での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "確認済みアプリ接続要件を適用",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "requirementsApply"
            },
            {
              "kind": "affected_tables",
              "checks": [
                "current_design_grants",
                "dependency_state"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/import-profiles": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.profiles",
        "tags": [
          "app-packages"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "x-availability": "環境による",
        "description": "本人が利用可能な取込形式を一覧取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "contract_id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "kind": {
                            "const": "workspace-v1"
                          },
                          "id": {
                            "type": "string"
                          },
                          "collection": {
                            "type": "string"
                          },
                          "label": {
                            "type": "string"
                          },
                          "definition": {
                            "$ref": "#/components/schemas/WorkspaceDefine"
                          },
                          "key_columns": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "maxItems": 64
                          },
                          "headers": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "maxItems": 64
                          }
                        },
                        "required": [
                          "contract_id",
                          "kind",
                          "id",
                          "collection",
                          "label",
                          "definition",
                          "key_columns",
                          "headers"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 100
                    }
                  },
                  "required": [
                    "items"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-profiles": {
                    "summary": "本人が利用可能な取込形式を一覧取得",
                    "value": {
                      "items": [
                        {
                          "contract_id": "44444444-4444-4444-8444-444444444444",
                          "kind": "workspace-v1",
                          "id": "demo_tasks",
                          "collection": "demo_tasks",
                          "label": "作業",
                          "definition": {
                            "label": "作業",
                            "fields": [
                              {
                                "id": "title",
                                "label": "件名",
                                "type": "text",
                                "required": true,
                                "read": [
                                  "staff"
                                ],
                                "write": [
                                  "staff"
                                ],
                                "searchable": true,
                                "choices": []
                              }
                            ],
                            "export_roles": [
                              "staff"
                            ]
                          },
                          "key_columns": [
                            "title"
                          ],
                          "headers": [
                            "title"
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "本人が利用可能な取込形式を一覧取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "本人が利用可能な取込形式を一覧取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "本人が利用可能な取込形式を一覧取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "本人が利用可能な取込形式を一覧取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "本人が利用可能な取込形式を一覧取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "本人が利用可能な取込形式を一覧取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "本人が利用可能な取込形式を一覧取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "本人が利用可能な取込形式を一覧取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "本人が利用可能な取込形式を一覧取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "本人が利用可能な取込形式を一覧取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": false,
          "mfa_when_lifecycle_enabled": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "import_grant",
              "checks": [
                "can_import",
                "current_schema",
                "read_write_fields"
              ],
              "action": "profiles"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/tables/{collection}/import-profile": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.import",
        "tags": [
          "app-packages"
        ],
        "parameters": [
          {
            "name": "collection",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "x-availability": "環境による",
        "description": "版付きCSV契約で行を取込。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "schema_version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "expected_actor": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Optional compare-only precondition on the authenticated internal actor. Does not set or transfer ownership. Required by the resumable import SDK."
                  },
                  "operations": {
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "action": {
                              "const": "create"
                            },
                            "values": {
                              "type": "object",
                              "additionalProperties": {
                                "type": [
                                  "string",
                                  "number",
                                  "boolean",
                                  "null"
                                ]
                              },
                              "maxProperties": 64
                            },
                            "status": {
                              "enum": [
                                "draft",
                                "committed"
                              ]
                            }
                          },
                          "required": [
                            "action",
                            "values"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "action": {
                              "const": "update"
                            },
                            "id": {
                              "type": "string",
                              "format": "uuid",
                              "description": "変更対象の既存行のUUID。行の取得・一覧応答のidを使用する。expected_actor（呼出本人ID）とは別。"
                            },
                            "version": {
                              "type": "integer",
                              "minimum": 1
                            },
                            "values": {
                              "type": "object",
                              "additionalProperties": {
                                "type": [
                                  "string",
                                  "number",
                                  "boolean",
                                  "null"
                                ]
                              },
                              "maxProperties": 64
                            },
                            "status": {
                              "enum": [
                                "draft",
                                "committed"
                              ]
                            }
                          },
                          "required": [
                            "action",
                            "id",
                            "version",
                            "values"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "action": {
                              "const": "delete"
                            },
                            "id": {
                              "type": "string",
                              "format": "uuid",
                              "description": "変更対象の既存行のUUID。行の取得・一覧応答のidを使用する。expected_actor（呼出本人ID）とは別。"
                            },
                            "version": {
                              "type": "integer",
                              "minimum": 1
                            },
                            "reason": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 500
                            }
                          },
                          "required": [
                            "action",
                            "id",
                            "version"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "action": {
                              "enum": [
                                "close",
                                "reopen"
                              ]
                            },
                            "id": {
                              "type": "string",
                              "format": "uuid",
                              "description": "変更対象の既存行のUUID。行の取得・一覧応答のidを使用する。expected_actor（呼出本人ID）とは別。"
                            },
                            "version": {
                              "type": "integer",
                              "minimum": 1
                            },
                            "reason": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 500
                            }
                          },
                          "required": [
                            "action",
                            "id",
                            "version",
                            "reason"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    },
                    "maxItems": 100,
                    "minItems": 1
                  },
                  "contract_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "required": [
                  "schema_version",
                  "operations",
                  "expected_actor",
                  "contract_id"
                ],
                "additionalProperties": false
              },
              "examples": {
                "app-packages-import": {
                  "summary": "版付きCSV契約で行を取込",
                  "value": {
                    "contract_id": "44444444-4444-4444-8444-444444444444",
                    "schema_version": 1,
                    "expected_actor": "11111111-1111-4111-8111-111111111111",
                    "operations": [
                      {
                        "action": "create",
                        "values": {
                          "title": "合成データ"
                        },
                        "status": "committed"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceBatchResult"
                },
                "examples": {
                  "app-packages-import": {
                    "summary": "版付きCSV契約で行を取込",
                    "value": {
                      "rows": [
                        {
                          "id": "22222222-2222-4222-8222-222222222222",
                          "version": 1,
                          "deleted": false
                        }
                      ],
                      "schema_version": 1
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "版付きCSV契約で行を取込での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "版付きCSV契約で行を取込での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "版付きCSV契約で行を取込での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "版付きCSV契約で行を取込での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "版付きCSV契約で行を取込での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "版付きCSV契約で行を取込での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "版付きCSV契約で行を取込での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "版付きCSV契約で行を取込での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "版付きCSV契約で行を取込での拒否・失敗: IDEMPOTENCY_MISMATCH, INVALID_TRANSITION, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "INVALID_TRANSITION",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "版付きCSV契約で行を取込での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "版付きCSV契約で行を取込での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "版付きCSV契約で行を取込での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "版付きCSV契約で行を取込での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "版付きCSV契約で行を取込",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": false,
          "resource_checks": [
            {
              "kind": "import_grant",
              "checks": [
                "can_import",
                "current_schema",
                "read_write_fields",
                "expected_actor",
                "contract_id"
              ],
              "action": "import"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/app-packages/{appId}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.get",
        "tags": [
          "app-packages"
        ],
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "x-availability": "環境による",
        "description": "アプリとCSV契約を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "version": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "revision": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "state": {
                      "enum": [
                        "active",
                        "stopped",
                        "detached",
                        "trashed"
                      ]
                    },
                    "manifest": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "version": {
                          "type": "integer",
                          "minimum": 1
                        },
                        "name": {
                          "type": "string"
                        },
                        "datasets": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "mode": {
                                "enum": [
                                  "owned",
                                  "shared"
                                ]
                              },
                              "definition": {
                                "$ref": "#/components/schemas/WorkspaceDefine"
                              }
                            },
                            "required": [
                              "id",
                              "mode",
                              "definition"
                            ],
                            "additionalProperties": false
                          },
                          "maxItems": 32,
                          "minItems": 1
                        },
                        "dependencies": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 32,
                          "uniqueItems": true
                        }
                      },
                      "required": [
                        "id",
                        "version",
                        "name",
                        "datasets",
                        "dependencies"
                      ],
                      "additionalProperties": false
                    },
                    "deleted_at": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "restore_until": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "csv": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "collection": {
                            "type": "string"
                          },
                          "key_fields": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "maxItems": 64,
                            "minItems": 1,
                            "uniqueItems": true
                          }
                        },
                        "required": [
                          "collection",
                          "key_fields"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 32
                    },
                    "requirements": {
                      "type": "object",
                      "properties": {
                        "revision": {
                          "type": "integer",
                          "minimum": 0
                        },
                        "before": {
                          "type": "object",
                          "properties": {
                            "dependencies": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string"
                                  },
                                  "min_version": {
                                    "type": "integer",
                                    "minimum": 1
                                  }
                                },
                                "required": [
                                  "id",
                                  "min_version"
                                ],
                                "additionalProperties": false
                              },
                              "maxItems": 32
                            },
                            "integrations": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "maxItems": 16
                            },
                            "service_clients": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "maxItems": 16
                            }
                          },
                          "required": [
                            "dependencies",
                            "integrations",
                            "service_clients"
                          ],
                          "additionalProperties": false
                        },
                        "requirements": {
                          "type": "object",
                          "properties": {
                            "dependencies": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string"
                                  },
                                  "min_version": {
                                    "type": "integer",
                                    "minimum": 1
                                  }
                                },
                                "required": [
                                  "id",
                                  "min_version"
                                ],
                                "additionalProperties": false
                              },
                              "maxItems": 32
                            },
                            "integrations": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "maxItems": 16
                            },
                            "service_clients": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "maxItems": 16
                            }
                          },
                          "required": [
                            "dependencies",
                            "integrations",
                            "service_clients"
                          ],
                          "additionalProperties": false
                        },
                        "blockers": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string"
                              },
                              "id": {
                                "type": "string"
                              },
                              "code": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "id",
                              "code"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "dependencies": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "version": {
                                "type": [
                                  "integer",
                                  "null"
                                ]
                              },
                              "revision": {
                                "type": [
                                  "integer",
                                  "null"
                                ]
                              },
                              "state": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "version",
                              "revision",
                              "state"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "clients": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "version": {
                                "type": "integer",
                                "minimum": 1
                              },
                              "state": {
                                "type": "string"
                              },
                              "expires_at": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "id",
                              "version",
                              "state",
                              "expires_at"
                            ],
                            "additionalProperties": false
                          }
                        }
                      },
                      "required": [
                        "revision",
                        "before",
                        "requirements",
                        "blockers",
                        "dependencies",
                        "clients"
                      ],
                      "additionalProperties": false
                    },
                    "replayed": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "version",
                    "revision",
                    "state",
                    "manifest",
                    "deleted_at",
                    "restore_until",
                    "csv"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-get": {
                    "summary": "アプリとCSV契約を取得",
                    "value": {
                      "id": "demo_app",
                      "version": 1,
                      "revision": 1,
                      "state": "active",
                      "manifest": {
                        "id": "demo_app",
                        "version": 1,
                        "name": "検証アプリ",
                        "datasets": [
                          {
                            "id": "demo_tasks",
                            "mode": "owned",
                            "definition": {
                              "label": "作業",
                              "fields": [
                                {
                                  "id": "title",
                                  "label": "件名",
                                  "type": "text",
                                  "required": true,
                                  "read": [
                                    "staff"
                                  ],
                                  "write": [
                                    "staff"
                                  ],
                                  "searchable": true,
                                  "choices": []
                                }
                              ],
                              "export_roles": [
                                "staff"
                              ]
                            }
                          }
                        ],
                        "dependencies": []
                      },
                      "deleted_at": null,
                      "restore_until": null,
                      "csv": [
                        {
                          "collection": "demo_tasks",
                          "key_fields": [
                            "title"
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "アプリとCSV契約を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "アプリとCSV契約を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "アプリとCSV契約を取得での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "アプリとCSV契約を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "アプリとCSV契約を取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "アプリとCSV契約を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "アプリとCSV契約を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "アプリとCSV契約を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "アプリとCSV契約を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "アプリとCSV契約を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "get"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/app-packages/plan": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.plan",
        "tags": [
          "app-packages"
        ],
        "parameters": [],
        "x-availability": "環境による",
        "description": "アプリとCSV契約の変更を計画。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "manifest": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "version": {
                        "type": "integer",
                        "minimum": 1
                      },
                      "name": {
                        "type": "string"
                      },
                      "datasets": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "mode": {
                              "enum": [
                                "owned",
                                "shared"
                              ]
                            },
                            "definition": {
                              "$ref": "#/components/schemas/WorkspaceDefine"
                            }
                          },
                          "required": [
                            "id",
                            "mode",
                            "definition"
                          ],
                          "additionalProperties": false
                        },
                        "maxItems": 32,
                        "minItems": 1
                      },
                      "dependencies": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "maxItems": 32,
                        "uniqueItems": true
                      }
                    },
                    "required": [
                      "id",
                      "version",
                      "name",
                      "datasets",
                      "dependencies"
                    ],
                    "additionalProperties": false
                  },
                  "csv": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "collection": {
                          "type": "string"
                        },
                        "key_fields": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 64,
                          "minItems": 1,
                          "uniqueItems": true
                        }
                      },
                      "required": [
                        "collection",
                        "key_fields"
                      ],
                      "additionalProperties": false
                    },
                    "maxItems": 32
                  },
                  "requirements": {
                    "type": "object",
                    "properties": {
                      "dependencies": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "min_version": {
                              "type": "integer",
                              "minimum": 1
                            }
                          },
                          "required": [
                            "id",
                            "min_version"
                          ],
                          "additionalProperties": false
                        },
                        "maxItems": 32
                      },
                      "integrations": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "maxItems": 16
                      },
                      "service_clients": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "maxItems": 16
                      }
                    },
                    "required": [
                      "dependencies",
                      "integrations",
                      "service_clients"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "manifest",
                  "csv"
                ],
                "additionalProperties": false
              },
              "examples": {
                "app-packages-plan": {
                  "summary": "アプリとCSV契約の変更を計画",
                  "value": {
                    "manifest": {
                      "id": "demo_app",
                      "version": 1,
                      "name": "検証アプリ",
                      "datasets": [
                        {
                          "id": "demo_tasks",
                          "mode": "owned",
                          "definition": {
                            "label": "作業",
                            "fields": [
                              {
                                "id": "title",
                                "label": "件名",
                                "type": "text",
                                "required": true,
                                "read": [
                                  "staff"
                                ],
                                "write": [
                                  "staff"
                                ],
                                "searchable": true,
                                "choices": []
                              }
                            ],
                            "export_roles": [
                              "staff"
                            ]
                          }
                        }
                      ],
                      "dependencies": []
                    },
                    "csv": [
                      {
                        "collection": "demo_tasks",
                        "key_fields": [
                          "title"
                        ]
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "fingerprint": {
                      "type": "string"
                    },
                    "app_fingerprint": {
                      "type": "string"
                    },
                    "revision": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "changes": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "mode": {
                            "enum": [
                              "owned",
                              "shared"
                            ]
                          },
                          "action": {
                            "enum": [
                              "create",
                              "retain",
                              "define",
                              "reference"
                            ]
                          },
                          "version": {
                            "type": "integer",
                            "minimum": 0
                          }
                        },
                        "required": [
                          "id",
                          "mode",
                          "action",
                          "version"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 32
                    },
                    "csv_before": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "collection": {
                            "type": "string"
                          },
                          "key_fields": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "maxItems": 64,
                            "minItems": 1,
                            "uniqueItems": true
                          }
                        },
                        "required": [
                          "collection",
                          "key_fields"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 32
                    },
                    "csv_after": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "collection": {
                            "type": "string"
                          },
                          "key_fields": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "maxItems": 64,
                            "minItems": 1,
                            "uniqueItems": true
                          }
                        },
                        "required": [
                          "collection",
                          "key_fields"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 32
                    },
                    "requirement_plan": {
                      "type": "object",
                      "properties": {
                        "revision": {
                          "type": "integer",
                          "minimum": 0
                        },
                        "before": {
                          "type": "object",
                          "properties": {
                            "dependencies": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string"
                                  },
                                  "min_version": {
                                    "type": "integer",
                                    "minimum": 1
                                  }
                                },
                                "required": [
                                  "id",
                                  "min_version"
                                ],
                                "additionalProperties": false
                              },
                              "maxItems": 32
                            },
                            "integrations": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "maxItems": 16
                            },
                            "service_clients": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "maxItems": 16
                            }
                          },
                          "required": [
                            "dependencies",
                            "integrations",
                            "service_clients"
                          ],
                          "additionalProperties": false
                        },
                        "requirements": {
                          "type": "object",
                          "properties": {
                            "dependencies": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string"
                                  },
                                  "min_version": {
                                    "type": "integer",
                                    "minimum": 1
                                  }
                                },
                                "required": [
                                  "id",
                                  "min_version"
                                ],
                                "additionalProperties": false
                              },
                              "maxItems": 32
                            },
                            "integrations": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "maxItems": 16
                            },
                            "service_clients": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "maxItems": 16
                            }
                          },
                          "required": [
                            "dependencies",
                            "integrations",
                            "service_clients"
                          ],
                          "additionalProperties": false
                        },
                        "blockers": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string"
                              },
                              "id": {
                                "type": "string"
                              },
                              "code": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "id",
                              "code"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "dependencies": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "version": {
                                "type": [
                                  "integer",
                                  "null"
                                ]
                              },
                              "revision": {
                                "type": [
                                  "integer",
                                  "null"
                                ]
                              },
                              "state": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "version",
                              "revision",
                              "state"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "clients": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "version": {
                                "type": "integer",
                                "minimum": 1
                              },
                              "state": {
                                "type": "string"
                              },
                              "expires_at": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "id",
                              "version",
                              "state",
                              "expires_at"
                            ],
                            "additionalProperties": false
                          }
                        }
                      },
                      "required": [
                        "revision",
                        "before",
                        "requirements",
                        "blockers",
                        "dependencies",
                        "clients"
                      ],
                      "additionalProperties": false
                    },
                    "state_after": {
                      "enum": [
                        "active",
                        "stopped"
                      ]
                    }
                  },
                  "required": [
                    "fingerprint",
                    "app_fingerprint",
                    "revision",
                    "changes",
                    "csv_before",
                    "csv_after"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-plan": {
                    "summary": "アプリとCSV契約の変更を計画",
                    "value": {
                      "fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                      "app_fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                      "revision": 0,
                      "changes": [
                        {
                          "id": "demo_tasks",
                          "mode": "owned",
                          "action": "create",
                          "version": 0
                        }
                      ],
                      "csv_before": [],
                      "csv_after": [
                        {
                          "collection": "demo_tasks",
                          "key_fields": [
                            "title"
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "アプリとCSV契約の変更を計画での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "アプリとCSV契約の変更を計画での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "アプリとCSV契約の変更を計画での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "アプリとCSV契約の変更を計画での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "アプリとCSV契約の変更を計画での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "アプリとCSV契約の変更を計画での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "アプリとCSV契約の変更を計画での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "アプリとCSV契約の変更を計画での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "アプリとCSV契約の変更を計画での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "アプリとCSV契約の変更を計画での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "アプリとCSV契約の変更を計画での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "アプリとCSV契約の変更を計画",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "plan"
            },
            {
              "kind": "affected_tables",
              "checks": [
                "current_design_grants",
                "dependency_state"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/app-packages/apply": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "app-packages.apply",
        "tags": [
          "app-packages"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "x-availability": "環境による",
        "description": "確認済みアプリとCSV契約を適用。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリとCSV契約・接続要件・移行の操作。計画を確認してからfingerprintを変えず適用する。空のcsvは対象アプリの取込形式を明示的に無効化する。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "package": {
                    "type": "object",
                    "properties": {
                      "manifest": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "version": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "name": {
                            "type": "string"
                          },
                          "datasets": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "mode": {
                                  "enum": [
                                    "owned",
                                    "shared"
                                  ]
                                },
                                "definition": {
                                  "$ref": "#/components/schemas/WorkspaceDefine"
                                }
                              },
                              "required": [
                                "id",
                                "mode",
                                "definition"
                              ],
                              "additionalProperties": false
                            },
                            "maxItems": 32,
                            "minItems": 1
                          },
                          "dependencies": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "maxItems": 32,
                            "uniqueItems": true
                          }
                        },
                        "required": [
                          "id",
                          "version",
                          "name",
                          "datasets",
                          "dependencies"
                        ],
                        "additionalProperties": false
                      },
                      "csv": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "collection": {
                              "type": "string"
                            },
                            "key_fields": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "maxItems": 64,
                              "minItems": 1,
                              "uniqueItems": true
                            }
                          },
                          "required": [
                            "collection",
                            "key_fields"
                          ],
                          "additionalProperties": false
                        },
                        "maxItems": 32
                      },
                      "requirements": {
                        "type": "object",
                        "properties": {
                          "dependencies": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "min_version": {
                                  "type": "integer",
                                  "minimum": 1
                                }
                              },
                              "required": [
                                "id",
                                "min_version"
                              ],
                              "additionalProperties": false
                            },
                            "maxItems": 32
                          },
                          "integrations": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "maxItems": 16
                          },
                          "service_clients": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "format": "uuid"
                            },
                            "maxItems": 16
                          }
                        },
                        "required": [
                          "dependencies",
                          "integrations",
                          "service_clients"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "manifest",
                      "csv"
                    ],
                    "additionalProperties": false
                  },
                  "fingerprint": {
                    "type": "string",
                    "pattern": "^[0-9a-f]{64}$"
                  }
                },
                "required": [
                  "package",
                  "fingerprint"
                ],
                "additionalProperties": false
              },
              "examples": {
                "app-packages-apply": {
                  "summary": "確認済みアプリとCSV契約を適用",
                  "value": {
                    "package": {
                      "manifest": {
                        "id": "demo_app",
                        "version": 1,
                        "name": "検証アプリ",
                        "datasets": [
                          {
                            "id": "demo_tasks",
                            "mode": "owned",
                            "definition": {
                              "label": "作業",
                              "fields": [
                                {
                                  "id": "title",
                                  "label": "件名",
                                  "type": "text",
                                  "required": true,
                                  "read": [
                                    "staff"
                                  ],
                                  "write": [
                                    "staff"
                                  ],
                                  "searchable": true,
                                  "choices": []
                                }
                              ],
                              "export_roles": [
                                "staff"
                              ]
                            }
                          }
                        ],
                        "dependencies": []
                      },
                      "csv": [
                        {
                          "collection": "demo_tasks",
                          "key_fields": [
                            "title"
                          ]
                        }
                      ]
                    },
                    "fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "version": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "revision": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "state": {
                      "enum": [
                        "active",
                        "stopped",
                        "detached",
                        "trashed"
                      ]
                    },
                    "manifest": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "version": {
                          "type": "integer",
                          "minimum": 1
                        },
                        "name": {
                          "type": "string"
                        },
                        "datasets": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "mode": {
                                "enum": [
                                  "owned",
                                  "shared"
                                ]
                              },
                              "definition": {
                                "$ref": "#/components/schemas/WorkspaceDefine"
                              }
                            },
                            "required": [
                              "id",
                              "mode",
                              "definition"
                            ],
                            "additionalProperties": false
                          },
                          "maxItems": 32,
                          "minItems": 1
                        },
                        "dependencies": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 32,
                          "uniqueItems": true
                        }
                      },
                      "required": [
                        "id",
                        "version",
                        "name",
                        "datasets",
                        "dependencies"
                      ],
                      "additionalProperties": false
                    },
                    "deleted_at": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "restore_until": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "csv": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "collection": {
                            "type": "string"
                          },
                          "key_fields": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "maxItems": 64,
                            "minItems": 1,
                            "uniqueItems": true
                          }
                        },
                        "required": [
                          "collection",
                          "key_fields"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 32
                    },
                    "requirements": {
                      "type": "object",
                      "properties": {
                        "revision": {
                          "type": "integer",
                          "minimum": 0
                        },
                        "before": {
                          "type": "object",
                          "properties": {
                            "dependencies": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string"
                                  },
                                  "min_version": {
                                    "type": "integer",
                                    "minimum": 1
                                  }
                                },
                                "required": [
                                  "id",
                                  "min_version"
                                ],
                                "additionalProperties": false
                              },
                              "maxItems": 32
                            },
                            "integrations": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "maxItems": 16
                            },
                            "service_clients": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "maxItems": 16
                            }
                          },
                          "required": [
                            "dependencies",
                            "integrations",
                            "service_clients"
                          ],
                          "additionalProperties": false
                        },
                        "requirements": {
                          "type": "object",
                          "properties": {
                            "dependencies": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string"
                                  },
                                  "min_version": {
                                    "type": "integer",
                                    "minimum": 1
                                  }
                                },
                                "required": [
                                  "id",
                                  "min_version"
                                ],
                                "additionalProperties": false
                              },
                              "maxItems": 32
                            },
                            "integrations": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              },
                              "maxItems": 16
                            },
                            "service_clients": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "maxItems": 16
                            }
                          },
                          "required": [
                            "dependencies",
                            "integrations",
                            "service_clients"
                          ],
                          "additionalProperties": false
                        },
                        "blockers": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string"
                              },
                              "id": {
                                "type": "string"
                              },
                              "code": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "kind",
                              "id",
                              "code"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "dependencies": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "version": {
                                "type": [
                                  "integer",
                                  "null"
                                ]
                              },
                              "revision": {
                                "type": [
                                  "integer",
                                  "null"
                                ]
                              },
                              "state": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "version",
                              "revision",
                              "state"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "clients": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid"
                              },
                              "version": {
                                "type": "integer",
                                "minimum": 1
                              },
                              "state": {
                                "type": "string"
                              },
                              "expires_at": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "id",
                              "version",
                              "state",
                              "expires_at"
                            ],
                            "additionalProperties": false
                          }
                        }
                      },
                      "required": [
                        "revision",
                        "before",
                        "requirements",
                        "blockers",
                        "dependencies",
                        "clients"
                      ],
                      "additionalProperties": false
                    },
                    "replayed": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "version",
                    "revision",
                    "state",
                    "manifest",
                    "deleted_at",
                    "restore_until",
                    "csv"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "app-packages-apply": {
                    "summary": "確認済みアプリとCSV契約を適用",
                    "value": {
                      "id": "demo_app",
                      "version": 1,
                      "revision": 1,
                      "state": "active",
                      "manifest": {
                        "id": "demo_app",
                        "version": 1,
                        "name": "検証アプリ",
                        "datasets": [
                          {
                            "id": "demo_tasks",
                            "mode": "owned",
                            "definition": {
                              "label": "作業",
                              "fields": [
                                {
                                  "id": "title",
                                  "label": "件名",
                                  "type": "text",
                                  "required": true,
                                  "read": [
                                    "staff"
                                  ],
                                  "write": [
                                    "staff"
                                  ],
                                  "searchable": true,
                                  "choices": []
                                }
                              ],
                              "export_roles": [
                                "staff"
                              ]
                            }
                          }
                        ],
                        "dependencies": []
                      },
                      "deleted_at": null,
                      "restore_until": null,
                      "csv": [
                        {
                          "collection": "demo_tasks",
                          "key_fields": [
                            "title"
                          ]
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "確認済みアプリとCSV契約を適用での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "確認済みアプリとCSV契約を適用での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "確認済みアプリとCSV契約を適用での拒否・失敗: FIELD_NOT_WRITABLE, FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED, SCOPE_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FIELD_NOT_WRITABLE",
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "SCOPE_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "確認済みアプリとCSV契約を適用での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "確認済みアプリとCSV契約を適用での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "確認済みアプリとCSV契約を適用での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "確認済みアプリとCSV契約を適用での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "確認済みアプリとCSV契約を適用での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "確認済みアプリとCSV契約を適用での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "確認済みアプリとCSV契約を適用での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "確認済みアプリとCSV契約を適用での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "確認済みアプリとCSV契約を適用での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "確認済みアプリとCSV契約を適用での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "確認済みアプリとCSV契約を適用",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "apply"
            },
            {
              "kind": "affected_tables",
              "checks": [
                "current_design_grants",
                "dependency_state"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/organization/overview": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "organization.overview",
        "tags": [
          "organization"
        ],
        "parameters": [],
        "x-availability": "環境による",
        "description": "利用環境の容量とアプリ件数を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 接続した環境に固定した管理情報のみ。業務値やIdP資格は返さない。不明な容量・契約指標はnullまたはnot_connected。設定変更は通知を送らない。",
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "as_of": {
                      "type": "string"
                    },
                    "data_api": {
                      "const": "available"
                    },
                    "applications": {
                      "type": "object",
                      "properties": {
                        "active": {
                          "type": "integer",
                          "minimum": 0
                        },
                        "stopped": {
                          "type": "integer",
                          "minimum": 0
                        },
                        "detached": {
                          "type": "integer",
                          "minimum": 0
                        },
                        "trashed": {
                          "type": "integer",
                          "minimum": 0
                        }
                      },
                      "required": [
                        "active",
                        "stopped",
                        "detached",
                        "trashed"
                      ],
                      "additionalProperties": false
                    },
                    "defined_tables": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "storage": {
                      "type": "object",
                      "properties": {
                        "database_bytes": {
                          "type": "integer",
                          "minimum": 0
                        },
                        "quota_bytes": {
                          "type": "null"
                        },
                        "managed_object_bytes": {
                          "type": "null"
                        },
                        "external_original_bytes": {
                          "type": "null"
                        },
                        "backup_bytes": {
                          "type": "null"
                        }
                      },
                      "required": [
                        "database_bytes",
                        "quota_bytes",
                        "managed_object_bytes",
                        "external_original_bytes",
                        "backup_bytes"
                      ],
                      "additionalProperties": false
                    },
                    "measurement_scope": {
                      "const": "dedicated_environment_database"
                    },
                    "backup_state": {
                      "const": "not_connected"
                    },
                    "contract_state": {
                      "const": "not_connected"
                    }
                  },
                  "required": [
                    "as_of",
                    "data_api",
                    "applications",
                    "defined_tables",
                    "storage",
                    "measurement_scope",
                    "backup_state",
                    "contract_state"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "organization-overview": {
                    "summary": "利用環境の容量とアプリ件数を取得",
                    "value": {
                      "as_of": "2026-10-04T00:00:00Z",
                      "data_api": "available",
                      "applications": {
                        "active": 1,
                        "stopped": 0,
                        "detached": 0,
                        "trashed": 0
                      },
                      "defined_tables": 1,
                      "storage": {
                        "database_bytes": 10485760,
                        "quota_bytes": null,
                        "managed_object_bytes": null,
                        "external_original_bytes": null,
                        "backup_bytes": null
                      },
                      "measurement_scope": "dedicated_environment_database",
                      "backup_state": "not_connected",
                      "contract_state": "not_connected"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "利用環境の容量とアプリ件数を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "利用環境の容量とアプリ件数を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "利用環境の容量とアプリ件数を取得での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "利用環境の容量とアプリ件数を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "利用環境の容量とアプリ件数を取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "利用環境の容量とアプリ件数を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "利用環境の容量とアプリ件数を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "利用環境の容量とアプリ件数を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "利用環境の容量とアプリ件数を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "overview"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/organization/settings": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "organization.settings",
        "tags": [
          "organization"
        ],
        "parameters": [],
        "x-availability": "環境による",
        "description": "組織設定を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 接続した環境に固定した管理情報のみ。業務値やIdP資格は返さない。不明な容量・契約指標はnullまたはnot_connected。設定変更は通知を送らない。",
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "version": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "values": {
                      "type": "object",
                      "properties": {
                        "organization_name": {
                          "type": "string",
                          "maxLength": 120
                        },
                        "contact_note": {
                          "type": "string",
                          "maxLength": 500
                        }
                      },
                      "required": [
                        "organization_name",
                        "contact_note"
                      ],
                      "additionalProperties": false
                    },
                    "updated_at": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "replayed": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "version",
                    "values",
                    "updated_at"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "organization-settings": {
                    "summary": "組織設定を取得",
                    "value": {
                      "version": 1,
                      "values": {
                        "organization_name": "検証用組織",
                        "contact_note": "連絡先は別途交付"
                      },
                      "updated_at": "2026-10-04T00:00:00Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "組織設定を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "組織設定を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "組織設定を取得での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "組織設定を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "組織設定を取得での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "組織設定を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "組織設定を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "組織設定を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "組織設定を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "settings"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/organization/settings/plan": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "organization.settingsPlan",
        "tags": [
          "organization"
        ],
        "parameters": [],
        "x-availability": "環境による",
        "description": "組織設定の変更を計画。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 接続した環境に固定した管理情報のみ。業務値やIdP資格は返さない。不明な容量・契約指標はnullまたはnot_connected。設定変更は通知を送らない。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "version": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "values": {
                    "type": "object",
                    "properties": {
                      "organization_name": {
                        "type": "string",
                        "maxLength": 120
                      },
                      "contact_note": {
                        "type": "string",
                        "maxLength": 500
                      }
                    },
                    "required": [
                      "organization_name",
                      "contact_note"
                    ],
                    "additionalProperties": false
                  },
                  "reason": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 500
                  }
                },
                "required": [
                  "version",
                  "values",
                  "reason"
                ],
                "additionalProperties": false
              },
              "examples": {
                "organization-settingsPlan": {
                  "summary": "組織設定の変更を計画",
                  "value": {
                    "version": 1,
                    "values": {
                      "organization_name": "検証用組織",
                      "contact_note": "連絡先は別途交付"
                    },
                    "reason": "表示名を更新"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "before": {
                      "type": "object",
                      "properties": {
                        "version": {
                          "type": "integer",
                          "minimum": 0
                        },
                        "values": {
                          "type": "object",
                          "properties": {
                            "organization_name": {
                              "type": "string",
                              "maxLength": 120
                            },
                            "contact_note": {
                              "type": "string",
                              "maxLength": 500
                            }
                          },
                          "required": [
                            "organization_name",
                            "contact_note"
                          ],
                          "additionalProperties": false
                        },
                        "updated_at": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "replayed": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "version",
                        "values",
                        "updated_at"
                      ],
                      "additionalProperties": false
                    },
                    "change": {
                      "type": "object",
                      "properties": {
                        "version": {
                          "type": "integer",
                          "minimum": 0
                        },
                        "values": {
                          "type": "object",
                          "properties": {
                            "organization_name": {
                              "type": "string",
                              "maxLength": 120
                            },
                            "contact_note": {
                              "type": "string",
                              "maxLength": 500
                            }
                          },
                          "required": [
                            "organization_name",
                            "contact_note"
                          ],
                          "additionalProperties": false
                        },
                        "reason": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 500
                        }
                      },
                      "required": [
                        "version",
                        "values",
                        "reason"
                      ],
                      "additionalProperties": false
                    },
                    "fingerprint": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "before",
                    "change",
                    "fingerprint"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "organization-settingsPlan": {
                    "summary": "組織設定の変更を計画",
                    "value": {
                      "before": {
                        "version": 1,
                        "values": {
                          "organization_name": "検証用組織",
                          "contact_note": "連絡先は別途交付"
                        },
                        "updated_at": "2026-10-04T00:00:00Z"
                      },
                      "change": {
                        "version": 1,
                        "values": {
                          "organization_name": "検証用組織",
                          "contact_note": "連絡先は別途交付"
                        },
                        "reason": "表示名を更新"
                      },
                      "fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "組織設定の変更を計画での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "組織設定の変更を計画での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "組織設定の変更を計画での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "組織設定の変更を計画での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "組織設定の変更を計画での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "組織設定の変更を計画での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "組織設定の変更を計画での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "組織設定の変更を計画での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "組織設定の変更を計画での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "組織設定の変更を計画での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "組織設定の変更を計画での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "組織設定の変更を計画",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "settingsPlan"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/organization/settings/apply": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "organization.settingsApply",
        "tags": [
          "organization"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "x-availability": "環境による",
        "description": "確認済み組織設定を適用。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 接続した環境に固定した管理情報のみ。業務値やIdP資格は返さない。不明な容量・契約指標はnullまたはnot_connected。設定変更は通知を送らない。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "change": {
                    "type": "object",
                    "properties": {
                      "version": {
                        "type": "integer",
                        "minimum": 0
                      },
                      "values": {
                        "type": "object",
                        "properties": {
                          "organization_name": {
                            "type": "string",
                            "maxLength": 120
                          },
                          "contact_note": {
                            "type": "string",
                            "maxLength": 500
                          }
                        },
                        "required": [
                          "organization_name",
                          "contact_note"
                        ],
                        "additionalProperties": false
                      },
                      "reason": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 500
                      }
                    },
                    "required": [
                      "version",
                      "values",
                      "reason"
                    ],
                    "additionalProperties": false
                  },
                  "fingerprint": {
                    "type": "string",
                    "pattern": "^[0-9a-f]{64}$"
                  }
                },
                "required": [
                  "change",
                  "fingerprint"
                ],
                "additionalProperties": false
              },
              "examples": {
                "organization-settingsApply": {
                  "summary": "確認済み組織設定を適用",
                  "value": {
                    "change": {
                      "version": 1,
                      "values": {
                        "organization_name": "検証用組織",
                        "contact_note": "連絡先は別途交付"
                      },
                      "reason": "表示名を更新"
                    },
                    "fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "version": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "values": {
                      "type": "object",
                      "properties": {
                        "organization_name": {
                          "type": "string",
                          "maxLength": 120
                        },
                        "contact_note": {
                          "type": "string",
                          "maxLength": 500
                        }
                      },
                      "required": [
                        "organization_name",
                        "contact_note"
                      ],
                      "additionalProperties": false
                    },
                    "updated_at": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "replayed": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "version",
                    "values",
                    "updated_at"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "organization-settingsApply": {
                    "summary": "確認済み組織設定を適用",
                    "value": {
                      "version": 2,
                      "values": {
                        "organization_name": "検証用組織",
                        "contact_note": "連絡先は別途交付"
                      },
                      "updated_at": "2026-10-04T00:00:00Z"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "確認済み組織設定を適用での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "確認済み組織設定を適用での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "確認済み組織設定を適用での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "確認済み組織設定を適用での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "確認済み組織設定を適用での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "確認済み組織設定を適用での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "確認済み組織設定を適用での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "確認済み組織設定を適用での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "確認済み組織設定を適用での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "確認済み組織設定を適用での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "確認済み組織設定を適用での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "確認済み組織設定を適用での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "確認済み組織設定を適用での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "確認済み組織設定を適用",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "settingsApply"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/organization/activity": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "organization.activity",
        "tags": [
          "organization"
        ],
        "parameters": [],
        "x-availability": "環境による",
        "description": "確定操作の履歴を検索。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 接続した環境に固定した管理情報のみ。業務値やIdP資格は返さない。不明な容量・契約指標はnullまたはnot_connected。設定変更は通知を送らない。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100
                  },
                  "source": {
                    "enum": [
                      "apps",
                      "data",
                      "services",
                      "permissions",
                      "tables",
                      "imports",
                      "requirements",
                      "migrations",
                      "organization"
                    ]
                  },
                  "actor": {
                    "type": "string"
                  },
                  "target": {
                    "type": "string"
                  },
                  "action": {
                    "type": "string"
                  },
                  "since": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "until": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "cursor": {
                    "type": "string",
                    "maxLength": 4096
                  }
                },
                "required": [],
                "additionalProperties": false
              },
              "examples": {
                "organization-activity": {
                  "summary": "確定操作の履歴を検索",
                  "value": {
                    "limit": 20,
                    "source": "organization"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "source": {
                            "enum": [
                              "apps",
                              "data",
                              "services",
                              "permissions",
                              "tables",
                              "imports",
                              "requirements",
                              "migrations",
                              "organization"
                            ]
                          },
                          "sequence": {
                            "type": "string",
                            "pattern": "^[1-9][0-9]*$"
                          },
                          "request_id": {
                            "type": "string",
                            "format": "uuid"
                          },
                          "actor": {
                            "type": "string"
                          },
                          "client": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "target": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "action": {
                            "type": "string"
                          },
                          "reason": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "at": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "source",
                          "sequence",
                          "request_id",
                          "actor",
                          "client",
                          "target",
                          "action",
                          "reason",
                          "at"
                        ],
                        "additionalProperties": false
                      },
                      "maxItems": 100
                    },
                    "next_cursor": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "until": {
                      "type": "string"
                    },
                    "sources": {
                      "type": "array",
                      "items": {
                        "enum": [
                          "apps",
                          "data",
                          "services",
                          "permissions",
                          "tables",
                          "imports",
                          "requirements",
                          "migrations",
                          "organization"
                        ]
                      },
                      "maxItems": 9
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor",
                    "until",
                    "sources"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "organization-activity": {
                    "summary": "確定操作の履歴を検索",
                    "value": {
                      "items": [
                        {
                          "source": "organization",
                          "sequence": "1",
                          "request_id": "44444444-4444-4444-8444-444444444444",
                          "actor": "11111111-1111-4111-8111-111111111111",
                          "client": "hub-spa",
                          "target": "organization",
                          "action": "settings.apply",
                          "reason": "表示名を更新",
                          "at": "2026-10-04T00:00:00Z"
                        }
                      ],
                      "next_cursor": null,
                      "until": "2026-10-04T00:01:00Z",
                      "sources": [
                        "organization"
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "確定操作の履歴を検索での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "確定操作の履歴を検索での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "確定操作の履歴を検索での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "確定操作の履歴を検索での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "確定操作の履歴を検索での拒否・失敗: CURSOR_STALE, LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "CURSOR_STALE",
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "確定操作の履歴を検索での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "確定操作の履歴を検索での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "確定操作の履歴を検索での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "確定操作の履歴を検索での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "確定操作の履歴を検索での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "確定操作の履歴を検索での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "確定操作の履歴を検索",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "activity"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/app-policy": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "apps.policy",
        "tags": [
          "apps"
        ],
        "parameters": [],
        "x-availability": "試験提供（環境による）",
        "description": "アプリごみ箱の保持期間を確認。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリ台帳の計画・適用・状態遷移。画面プログラムの環境を自動実行する契約ではない。",
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceTrashPolicy"
                }
              }
            }
          },
          "400": {
            "description": "アプリごみ箱の保持期間を確認での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "アプリごみ箱の保持期間を確認での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "アプリごみ箱の保持期間を確認での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "アプリごみ箱の保持期間を確認での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "アプリごみ箱の保持期間を確認での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "アプリごみ箱の保持期間を確認での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "アプリごみ箱の保持期間を確認での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "アプリごみ箱の保持期間を確認での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "アプリごみ箱の保持期間を確認での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "アプリごみ箱の保持期間を確認",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "policy"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/apps": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "apps.list",
        "tags": [
          "apps"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            }
          }
        ],
        "x-availability": "試験提供（環境による）",
        "description": "登録アプリを一覧取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリ台帳の計画・適用・状態遷移。画面プログラムの環境を自動実行する契約ではない。",
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppList"
                }
              }
            }
          },
          "400": {
            "description": "登録アプリを一覧取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "登録アプリを一覧取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "登録アプリを一覧取得での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "登録アプリを一覧取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "登録アプリを一覧取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "登録アプリを一覧取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "登録アプリを一覧取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "登録アプリを一覧取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "登録アプリを一覧取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "登録アプリを一覧取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "list"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/apps/{appId}": {
      "get": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "apps.get",
        "tags": [
          "apps"
        ],
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            }
          }
        ],
        "x-availability": "試験提供（環境による）",
        "description": "アプリの状態と定義を取得。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリ台帳の計画・適用・状態遷移。画面プログラムの環境を自動実行する契約ではない。",
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppState"
                }
              }
            }
          },
          "400": {
            "description": "アプリの状態と定義を取得での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "アプリの状態と定義を取得での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "アプリの状態と定義を取得での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "アプリの状態と定義を取得での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "アプリの状態と定義を取得での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "アプリの状態と定義を取得での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "アプリの状態と定義を取得での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "アプリの状態と定義を取得での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "アプリの状態と定義を取得での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "アプリの状態と定義を取得",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "get"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/apps/plan": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "apps.plan",
        "tags": [
          "apps"
        ],
        "parameters": [],
        "x-availability": "試験提供（環境による）",
        "description": "アプリ登録・更新を計画。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリ台帳の計画・適用・状態遷移。画面プログラムの環境を自動実行する契約ではない。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AppManifest"
              },
              "examples": {
                "app-plan": {
                  "summary": "アプリ登録計画",
                  "value": {
                    "id": "demo_app",
                    "version": 1,
                    "name": "検証アプリ",
                    "datasets": [
                      {
                        "id": "demo_tasks",
                        "mode": "owned",
                        "definition": {
                          "label": "作業",
                          "fields": [
                            {
                              "id": "title",
                              "label": "件名",
                              "type": "text",
                              "required": true,
                              "read": [
                                "staff"
                              ],
                              "write": [
                                "staff"
                              ],
                              "searchable": true,
                              "choices": []
                            }
                          ],
                          "export_roles": [
                            "staff"
                          ]
                        }
                      }
                    ],
                    "dependencies": []
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppPlan"
                },
                "examples": {
                  "app-plan": {
                    "summary": "アプリ登録計画",
                    "value": {
                      "fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                      "revision": 0,
                      "changes": [
                        {
                          "id": "demo_tasks",
                          "mode": "owned",
                          "action": "create",
                          "version": 0
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "アプリ登録・更新を計画での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "アプリ登録・更新を計画での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "アプリ登録・更新を計画での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "アプリ登録・更新を計画での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "アプリ登録・更新を計画での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "アプリ登録・更新を計画での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "アプリ登録・更新を計画での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "アプリ登録・更新を計画での拒否・失敗: VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "アプリ登録・更新を計画での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "アプリ登録・更新を計画での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "アプリ登録・更新を計画での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "アプリ登録・更新を計画",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "plan"
            },
            {
              "kind": "affected_tables",
              "checks": [
                "current_design_grants",
                "dependency_state"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/apps/apply": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "apps.apply",
        "tags": [
          "apps"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "x-availability": "試験提供（環境による）",
        "description": "確認済みアプリ定義を適用。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリ台帳の計画・適用・状態遷移。画面プログラムの環境を自動実行する契約ではない。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AppApply"
              },
              "examples": {
                "app-apply": {
                  "summary": "確認したアプリ計画を反映",
                  "value": {
                    "manifest": {
                      "id": "demo_app",
                      "version": 1,
                      "name": "検証アプリ",
                      "datasets": [
                        {
                          "id": "demo_tasks",
                          "mode": "owned",
                          "definition": {
                            "label": "作業",
                            "fields": [
                              {
                                "id": "title",
                                "label": "件名",
                                "type": "text",
                                "required": true,
                                "read": [
                                  "staff"
                                ],
                                "write": [
                                  "staff"
                                ],
                                "searchable": true,
                                "choices": []
                              }
                            ],
                            "export_roles": [
                              "staff"
                            ]
                          }
                        }
                      ],
                      "dependencies": []
                    },
                    "fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppState"
                },
                "examples": {
                  "app-apply": {
                    "summary": "確認したアプリ計画を反映",
                    "value": {
                      "id": "demo_app",
                      "version": 1,
                      "revision": 1,
                      "state": "active",
                      "manifest": {
                        "id": "demo_app",
                        "version": 1,
                        "name": "検証アプリ",
                        "datasets": [
                          {
                            "id": "demo_tasks",
                            "mode": "owned",
                            "definition": {
                              "label": "作業",
                              "fields": [
                                {
                                  "id": "title",
                                  "label": "件名",
                                  "type": "text",
                                  "required": true,
                                  "read": [
                                    "staff"
                                  ],
                                  "write": [
                                    "staff"
                                  ],
                                  "searchable": true,
                                  "choices": []
                                }
                              ],
                              "export_roles": [
                                "staff"
                              ]
                            }
                          }
                        ],
                        "dependencies": []
                      },
                      "deleted_at": null,
                      "restore_until": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "確認済みアプリ定義を適用での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "確認済みアプリ定義を適用での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "確認済みアプリ定義を適用での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "確認済みアプリ定義を適用での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "確認済みアプリ定義を適用での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "確認済みアプリ定義を適用での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "確認済みアプリ定義を適用での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "確認済みアプリ定義を適用での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "確認済みアプリ定義を適用での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "確認済みアプリ定義を適用での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "確認済みアプリ定義を適用での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "確認済みアプリ定義を適用での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "確認済みアプリ定義を適用での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "確認済みアプリ定義を適用",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "apply"
            },
            {
              "kind": "affected_tables",
              "checks": [
                "current_design_grants",
                "dependency_state"
              ]
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/apps/{appId}/state": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "apps.transition",
        "tags": [
          "apps"
        ],
        "parameters": [
          {
            "name": "appId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[-a-zA-Z0-9_]{8,128}$"
            }
          }
        ],
        "x-availability": "試験提供（環境による）",
        "description": "アプリを停止・再開・切離し・ごみ箱移動・復元。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 アプリ台帳の計画・適用・状態遷移。画面プログラムの環境を自動実行する契約ではない。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AppTransition"
              },
              "examples": {
                "app-stop": {
                  "summary": "アプリを停止",
                  "value": {
                    "action": "stop",
                    "revision": 1,
                    "reason": "検証停止"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppState"
                },
                "examples": {
                  "app-stop": {
                    "summary": "アプリを停止",
                    "value": {
                      "id": "demo_app",
                      "version": 1,
                      "revision": 2,
                      "state": "stopped",
                      "manifest": {
                        "id": "demo_app",
                        "version": 1,
                        "name": "検証アプリ",
                        "datasets": [
                          {
                            "id": "demo_tasks",
                            "mode": "owned",
                            "definition": {
                              "label": "作業",
                              "fields": [
                                {
                                  "id": "title",
                                  "label": "件名",
                                  "type": "text",
                                  "required": true,
                                  "read": [
                                    "staff"
                                  ],
                                  "write": [
                                    "staff"
                                  ],
                                  "searchable": true,
                                  "choices": []
                                }
                              ],
                              "export_roles": [
                                "staff"
                              ]
                            }
                          }
                        ],
                        "dependencies": []
                      },
                      "deleted_at": null,
                      "restore_until": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "アプリを停止・再開・切離し・ごみ箱移動・復元での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "アプリを停止・再開・切離し・ごみ箱移動・復元での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "アプリを停止・再開・切離し・ごみ箱移動・復元での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "アプリを停止・再開・切離し・ごみ箱移動・復元での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "アプリを停止・再開・切離し・ごみ箱移動・復元での拒否・失敗: LOCK_BUSY, STATE_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY",
              "STATE_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "アプリを停止・再開・切離し・ごみ箱移動・復元での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "アプリを停止・再開・切離し・ごみ箱移動・復元での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "アプリを停止・再開・切離し・ごみ箱移動・復元での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "アプリを停止・再開・切離し・ごみ箱移動・復元での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "428": {
            "description": "アプリを停止・再開・切離し・ごみ箱移動・復元での拒否・失敗: IDEMPOTENCY_KEY_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_KEY_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "アプリを停止・再開・切離し・ごみ箱移動・復元での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "アプリを停止・再開・切離し・ごみ箱移動・復元での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "アプリを停止・再開・切離し・ごみ箱移動・復元での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "アプリを停止・再開・切離し・ごみ箱移動・復元",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "current_identity",
          "mfa": true,
          "mfa_when_lifecycle_enabled": true,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "external_human_mfa": true,
          "identity_freshness": {
            "checked_age_seconds": 5,
            "reconciled_age_seconds": 60
          },
          "administrative_session_when_lifecycle_enabled": true,
          "resource_checks": [
            {
              "kind": "management",
              "all_of": [
                "service_administrator",
                "manage_access"
              ],
              "action": "transition"
            }
          ]
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "Idempotency-Key",
          "identifier": "header.Idempotency-Key",
          "preconditions": [
            "本文のversion/schema_version/revision/fingerprint（定義される操作のみ）"
          ],
          "safe_to_repeat": true,
          "result_check": "同じキー・本文・前提版で再送し受領結果を確認する。現在権限も再検査する。競合時は最新状態と利用者の意図を照合し、版だけを置換しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "同時2要求まで。固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/v2/session/logout": {
      "post": {
        "security": [
          {
            "bearerAuth": []
          },
          {
            "humanOidc": [
              "openid"
            ]
          }
        ],
        "operationId": "identity.logoutSelf",
        "tags": [
          "identity"
        ],
        "parameters": [],
        "x-availability": "環境による",
        "description": "本人セッションを失効。登録された人のaccess tokenと現在権限を検査する。操作固有のMFA・管理権・データ権が追加で必要。 本人と現在セッションの境界を維持する。",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "attempt_id": {
                    "type": "string",
                    "format": "uuid"
                  }
                },
                "required": [
                  "attempt_id"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "const": "revoked"
                    },
                    "attempt_id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "request_id": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "status",
                    "attempt_id",
                    "request_id"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "本人セッションを失効での拒否・失敗: BAD_REQUEST, SELF_DECLARED_HEADER。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "BAD_REQUEST",
              "SELF_DECLARED_HEADER"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "本人セッションを失効での拒否・失敗: AUTH_REQUIRED, TOKEN_EXPIRED, TOKEN_INVALID。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "AUTH_REQUIRED",
              "TOKEN_EXPIRED",
              "TOKEN_INVALID"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "本人セッションを失効での拒否・失敗: FORBIDDEN_ROLE, MFA_REQUIRED, REAUTH_REQUIRED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "FORBIDDEN_ROLE",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "本人セッションを失効での拒否・失敗: NOT_FOUND。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "NOT_FOUND"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "409": {
            "description": "本人セッションを失効での拒否・失敗: LOCK_BUSY。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "LOCK_BUSY"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "412": {
            "description": "本人セッションを失効での拒否・失敗: VERSION_CONFLICT。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "VERSION_CONFLICT"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "413": {
            "description": "本人セッションを失効での拒否・失敗: PAYLOAD_TOO_LARGE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "PAYLOAD_TOO_LARGE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "本人セッションを失効での拒否・失敗: UNSUPPORTED_MEDIA_TYPE。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "UNSUPPORTED_MEDIA_TYPE"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "本人セッションを失効での拒否・失敗: IDEMPOTENCY_MISMATCH, VALIDATION_FAILED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "IDEMPOTENCY_MISMATCH",
              "VALIDATION_FAILED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "本人セッションを失効での拒否・失敗: RATE_LIMITED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "RATE_LIMITED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "秒。返される場合のみ従う。workspace/v1表の同時数制限は1秒。apps/serviceの一部経路は未設定。固定リクエスト毎秒値を保証しない。",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            }
          },
          "500": {
            "description": "本人セッションを失効での拒否・失敗: INTERNAL_CONTRACT_VIOLATION。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "INTERNAL_CONTRACT_VIOLATION"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "本人セッションを失効での拒否・失敗: DEPENDENCY_UNAVAILABLE, MAINTENANCE, OUTCOME_UNKNOWN, TX_ABORT_UNCONFIRMED, TX_RETRY_EXHAUSTED。codeで分岐しrequest_idを保管する。",
            "x-error-codes": [
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED"
            ],
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "summary": "本人セッションを失効",
        "x-required-authority": {
          "actor_types": [
            "human"
          ],
          "authentication": "logout_session_binding",
          "mfa": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "resource_checks": [
            {
              "kind": "self_session",
              "checks": [
                "issuer",
                "subject",
                "client_id",
                "sid",
                "attempt_id"
              ]
            }
          ],
          "note": "失効済みセッションも同じattempt_idの受領確認に使用できる専用経路。通常APIの有効セッション条件とは別。"
        },
        "x-retry-policy": {
          "effect": "write",
          "mode": "attempt_id",
          "identifier": "body.attempt_id",
          "safe_to_repeat": true,
          "result_check": "同じセッションとattempt_idで再送し失効受領を確認する。別attempt_idを自動発行しない。"
        },
        "x-error-coverage": "操作条件と機能の既知の拒否コード。実際に発生する組合せは対象・状態・有効な機能に依存。未知codeはHTTP分類に従い自動書換え再送しない。",
        "x-rate-limit": "固定のレート上限は定めていません。環境側の制限があり、429が返ることがあります。"
      }
    },
    "/health/live": {
      "get": {
        "security": [],
        "operationId": "health.live",
        "tags": [
          "health"
        ],
        "parameters": [],
        "x-availability": "提供中",
        "description": "プロセスの応答を確認。認証不要。固定の稼働状態だけを返す。 認証不要の固定状態応答。業務データを返さない。",
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "alive": {
                      "const": true
                    }
                  },
                  "required": [
                    "alive"
                  ],
                  "additionalProperties": false
                }
              }
            }
          }
        },
        "summary": "プロセスの応答を確認",
        "x-required-authority": {
          "actor_types": [],
          "authentication": "none",
          "mfa": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "resource_checks": []
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-rate-limit": "この確認用のルートに、専用のレート制限はありません。環境側の制限はあります。",
        "x-error-coverage": "正常応答200 {alive:true}。業務用Problemコードの対象外。通信・上流エラーは別。"
      }
    },
    "/health/ready": {
      "get": {
        "security": [],
        "operationId": "health.ready",
        "tags": [
          "health"
        ],
        "parameters": [],
        "x-availability": "提供中",
        "description": "基盤と依存先の準備状態を確認。認証不要。固定の稼働状態だけを返す。 認証不要の固定状態応答。業務データを返さない。",
        "responses": {
          "200": {
            "description": "Success; fields are projected using current authorization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ready": {
                      "const": true
                    }
                  },
                  "required": [
                    "ready"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "503": {
            "description": "依存先または基盤が準備未完了。Problem形式ではない。",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ready": {
                      "const": false
                    }
                  },
                  "required": [
                    "ready"
                  ],
                  "additionalProperties": false
                }
              }
            }
          }
        },
        "summary": "基盤と依存先の準備状態を確認",
        "x-required-authority": {
          "actor_types": [],
          "authentication": "none",
          "mfa": false,
          "required_capabilities": [],
          "max_authentication_age_seconds": null,
          "resource_checks": []
        },
        "x-retry-policy": {
          "effect": "read_or_plan",
          "mode": "none",
          "safe_to_repeat": true,
          "result_check": "同じ条件で取得可能。ただし一覧・計画・cursor・fingerprintは現在状態で変化する。計画を再取得しても適用は行わない。"
        },
        "x-rate-limit": "この確認用のルートに、専用のレート制限はありません。環境側の制限はあります。",
        "x-error-coverage": "200 {ready:true} / 503 {ready:false}。503はapplication/jsonで業務用Problemコードを持たない。通信・上流エラーは別。"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      },
      "humanOidc": {
        "type": "openIdConnect",
        "openIdConnectUrl": "https://idp.example.invalid/realms/customer/.well-known/openid-configuration",
        "description": "本人用Authorization Code + PKCE(S256)。環境版OpenAPIを生成して実issuerへ置換し、登録済みclient_id/redirect_uriを使用。scope=openid。ID tokenを基盤へ送らない。"
      },
      "serviceOAuth": {
        "type": "oauth2",
        "description": "サービス専用audience。private_key_jwtでclient_credentialsを取得しactivateする。汎用UIのclient_secret方式は使用不可。",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://idp.example.invalid/realms/customer/protocol/openid-connect/token",
            "scopes": {}
          }
        }
      }
    },
    "schemas": {
      "AssetProblem": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          },
          "request_id": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "error",
          "request_id"
        ],
        "additionalProperties": false
      },
      "Problem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "エラー種別の識別子。応答値はurn:hub:problem:<code>形式で、codeは小文字化し、下線をハイフンへ置換する。取得用URLではない。処理分岐にはcodeを使用する。"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "code": {
            "type": "string",
            "enum": [
              "ASSET_REASON_REQUIRED",
              "ASSET_INVALID",
              "ASSET_INVALID_IMAGE",
              "ASSET_FORBIDDEN",
              "ASSET_POLICY_DENIED",
              "ASSET_NOT_FOUND",
              "ASSET_NO_THUMBNAIL",
              "ASSET_VERSION_CONFLICT",
              "ASSET_IDEMPOTENCY_MISMATCH",
              "ASSET_POLICY_CHANGED",
              "ASSET_PRECONDITION_REQUIRED",
              "ASSET_TOO_LARGE",
              "ASSET_QUOTA_EXCEEDED",
              "ASSET_DEPENDENCY_UNAVAILABLE",
              "ASSET_BUSY",
              "ASSET_CAPACITY",
              "BAD_REQUEST",
              "ETAG_MALFORMED",
              "SELF_DECLARED_HEADER",
              "AUTH_REQUIRED",
              "TOKEN_INVALID",
              "TOKEN_EXPIRED",
              "FORBIDDEN_ROLE",
              "FIELD_NOT_WRITABLE",
              "SCOPE_VIOLATION",
              "MFA_REQUIRED",
              "REAUTH_REQUIRED",
              "AI_MUST_USE_PROPOSALS",
              "AI_SUSPENDED",
              "NOT_FOUND",
              "STATE_CONFLICT",
              "PROPOSAL_CONFLICT",
              "OPERATION_IN_PROGRESS",
              "FOLDER_LIMIT_REACHED",
              "DUPLICATE",
              "STALE_SOURCE",
              "AUTHORITY_CONFLICT",
              "IDEMPOTENCY_IN_PROGRESS",
              "LOCK_BUSY",
              "CURSOR_STALE",
              "VERSION_CONFLICT",
              "PAYLOAD_TOO_LARGE",
              "UNSUPPORTED_MEDIA_TYPE",
              "FIELD_UNKNOWN",
              "FIELD_NOT_ALLOWED",
              "FIELD_REQUIRED",
              "EMPTY_PATCH",
              "VALIDATION_FAILED",
              "INVALID_TRANSITION",
              "IDEMPOTENCY_MISMATCH",
              "PRECONDITION_REQUIRED",
              "IDEMPOTENCY_KEY_REQUIRED",
              "RATE_LIMITED",
              "AI_RATE_LIMITED",
              "DEPENDENCY_UNAVAILABLE",
              "MAINTENANCE",
              "OUTCOME_UNKNOWN",
              "TX_ABORT_UNCONFIRMED",
              "TX_RETRY_EXHAUSTED",
              "INTERNAL_CONTRACT_VIOLATION"
            ]
          },
          "request_id": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "code",
          "request_id"
        ],
        "additionalProperties": false,
        "description": "Error responses intentionally contain no current row values or versions. After 412, GET /v1/tables/{collection}/rows/{rowId} under current authorization, show latest versus local values, and ask the user to resolve. A deleted/revoked row can return 404/403. Never blindly replace the expected version and retry. 409 CURSOR_STALE requires discarding the accumulated page set and starting over."
      },
      "Field": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_-]{0,47}$"
          },
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "type": {
            "type": "string",
            "enum": [
              "text",
              "number",
              "boolean",
              "date",
              "choice"
            ]
          },
          "required": {
            "type": "boolean"
          },
          "read": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "designer",
                "editor",
                "viewer"
              ]
            },
            "maxItems": 3,
            "uniqueItems": true
          },
          "write": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "designer",
                "editor",
                "viewer"
              ]
            },
            "maxItems": 3,
            "uniqueItems": true
          },
          "searchable": {
            "type": "boolean"
          },
          "retired": {
            "type": "boolean"
          },
          "choices": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128
            },
            "maxItems": 100
          }
        },
        "required": [
          "id",
          "label",
          "type",
          "required",
          "read",
          "write",
          "searchable",
          "retired",
          "choices"
        ],
        "additionalProperties": false
      },
      "Define": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "fields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Field"
            },
            "maxItems": 64,
            "minItems": 1
          },
          "export_roles": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "designer",
                "editor",
                "viewer"
              ]
            },
            "maxItems": 3,
            "uniqueItems": true
          }
        },
        "required": [
          "label",
          "fields",
          "export_roles"
        ],
        "additionalProperties": false
      },
      "Mutation": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "create",
              "update",
              "delete"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "version": {
            "type": "integer",
            "minimum": 0,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "values": {
            "type": "object",
            "additionalProperties": {
              "type": [
                "string",
                "number",
                "boolean",
                "null"
              ]
            },
            "maxProperties": 64
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "committed"
            ],
            "description": "行の保存状態。draftは必須値の未入力を許容し、committedは必須値を検証する。この値の変更は業務工程の進行や請求の確定を実行しない。"
          },
          "expected_values": {
            "type": "object",
            "additionalProperties": {
              "type": [
                "string",
                "number",
                "boolean",
                "null"
              ]
            },
            "maxProperties": 64
          }
        },
        "required": [
          "action",
          "id",
          "version"
        ],
        "additionalProperties": false
      },
      "Batch": {
        "type": "object",
        "properties": {
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "operations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Mutation"
            },
            "maxItems": 100,
            "minItems": 1
          }
        },
        "required": [
          "schema_version",
          "operations"
        ],
        "additionalProperties": false
      },
      "RowResult": {
        "type": "object",
        "properties": {
          "item": {
            "$ref": "#/components/schemas/Row"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "description": "この応答が表す資源・一覧の変更版。別資源へ流用しない。"
          }
        },
        "required": [
          "item",
          "schema_version",
          "revision"
        ],
        "additionalProperties": false
      },
      "Row": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "committed"
            ],
            "description": "行の保存状態。draftは必須値の未入力を許容し、committedは必須値を検証する。この値の変更は業務工程の進行や請求の確定を実行しない。"
          },
          "values": {
            "type": "object",
            "additionalProperties": {
              "type": [
                "string",
                "number",
                "boolean",
                "null"
              ]
            },
            "maxProperties": 64
          }
        },
        "required": [
          "id",
          "version",
          "status",
          "values"
        ],
        "additionalProperties": false
      },
      "Query": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 199,
            "default": 50
          },
          "sort": {
            "type": "object",
            "properties": {
              "field": {
                "type": "string"
              },
              "direction": {
                "type": "string",
                "enum": [
                  "asc",
                  "desc"
                ]
              }
            },
            "required": [
              "field",
              "direction"
            ],
            "additionalProperties": false
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "field": {
                  "type": "string"
                },
                "op": {
                  "type": "string",
                  "enum": [
                    "eq",
                    "contains",
                    "gte",
                    "lte"
                  ]
                },
                "value": {
                  "type": [
                    "string",
                    "number",
                    "boolean",
                    "null"
                  ]
                }
              },
              "required": [
                "field",
                "op",
                "value"
              ],
              "additionalProperties": false
            },
            "maxItems": 8
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "committed"
            ]
          },
          "cursor": {
            "type": "string",
            "maxLength": 4096
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "QueryResult": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Row"
            },
            "maxItems": 199
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "description": "この応答が表す資源・一覧の変更版。別資源へ流用しない。"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          }
        },
        "required": [
          "items",
          "next_cursor",
          "revision",
          "schema_version"
        ],
        "additionalProperties": false
      },
      "BatchResult": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                },
                "deleted": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "version",
                "deleted"
              ],
              "additionalProperties": false
            },
            "maxItems": 100
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "description": "この応答が表す資源・一覧の変更版。別資源へ流用しない。"
          },
          "committed": {
            "type": "boolean"
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "rows",
          "schema_version",
          "revision",
          "committed"
        ],
        "additionalProperties": false
      },
      "DefineResult": {
        "type": "object",
        "properties": {
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "description": "この応答が表す資源・一覧の変更版。別資源へ流用しない。"
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "schema_version",
          "revision"
        ],
        "additionalProperties": false
      },
      "ViewInput": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "version": {
            "type": "integer",
            "minimum": 0,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "columns": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "field": {
                  "type": "string"
                },
                "width": {
                  "type": "integer",
                  "minimum": 40,
                  "maximum": 1000
                }
              },
              "required": [
                "field",
                "width"
              ],
              "additionalProperties": false
            },
            "maxItems": 64
          }
        },
        "required": [
          "id",
          "version",
          "schema_version",
          "columns"
        ],
        "additionalProperties": false
      },
      "ViewResult": {
        "type": "object",
        "properties": {
          "revision": {
            "type": "integer",
            "minimum": 0,
            "description": "この応答が表す資源・一覧の変更版。別資源へ流用しない。"
          },
          "view_version": {
            "type": "integer",
            "minimum": 1
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "revision",
          "view_version"
        ],
        "additionalProperties": false
      },
      "Import": {
        "type": "object",
        "properties": {
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "mode": {
            "type": "string",
            "enum": [
              "preview",
              "commit"
            ]
          },
          "csv": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200000
          }
        },
        "required": [
          "schema_version",
          "mode",
          "csv"
        ],
        "additionalProperties": false
      },
      "ExportResult": {
        "type": "object",
        "properties": {
          "csv": {
            "type": "string"
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "description": "この応答が表す資源・一覧の変更版。別資源へ流用しない。"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          }
        },
        "required": [
          "csv",
          "next_cursor",
          "revision",
          "schema_version"
        ],
        "additionalProperties": false
      },
      "Changes": {
        "type": "object",
        "properties": {
          "revision": {
            "type": "integer",
            "minimum": 0,
            "description": "この応答が表す資源・一覧の変更版。別資源へ流用しない。"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          }
        },
        "required": [
          "revision",
          "schema_version"
        ],
        "additionalProperties": false
      },
      "Views": {
        "type": "object",
        "properties": {
          "views": {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "version": {
                  "type": "integer",
                  "minimum": 1
                },
                "columns": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "field": {
                        "type": "string"
                      },
                      "width": {
                        "type": "integer",
                        "minimum": 0
                      }
                    },
                    "required": [
                      "field",
                      "width"
                    ],
                    "additionalProperties": false
                  },
                  "maxItems": 64
                }
              },
              "required": [
                "version",
                "columns"
              ],
              "additionalProperties": false
            }
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "description": "この応答が表す資源・一覧の変更版。別資源へ流用しない。"
          }
        },
        "required": [
          "views",
          "schema_version",
          "revision"
        ],
        "additionalProperties": false
      },
      "Definition": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "description": "この応答が表す資源・一覧の変更版。別資源へ流用しない。"
          },
          "fields": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                },
                "required": {
                  "type": "boolean"
                },
                "choices": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "readable": {
                  "type": "boolean"
                },
                "writable": {
                  "type": "boolean"
                },
                "searchable": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "label",
                "type",
                "required",
                "choices",
                "readable",
                "writable",
                "searchable"
              ],
              "additionalProperties": false
            },
            "maxItems": 64
          },
          "can_design": {
            "type": "boolean"
          },
          "can_export": {
            "type": "boolean"
          },
          "limits": {
            "type": "object",
            "properties": {
              "rows": {
                "type": "integer",
                "minimum": 0
              },
              "fields": {
                "type": "integer",
                "minimum": 0
              },
              "batch": {
                "type": "integer",
                "minimum": 0
              },
              "page": {
                "type": "integer",
                "minimum": 0
              }
            },
            "required": [
              "rows",
              "fields",
              "batch",
              "page"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "label",
          "schema_version",
          "revision",
          "fields",
          "can_design",
          "can_export",
          "limits"
        ],
        "additionalProperties": false
      },
      "Tables": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "revision": {
                  "type": "integer",
                  "minimum": 0
                },
                "label": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "revision",
                "label"
              ],
              "additionalProperties": false
            }
          },
          "role": {
            "type": "string",
            "enum": [
              "designer",
              "editor",
              "viewer"
            ]
          }
        },
        "required": [
          "items",
          "role"
        ],
        "additionalProperties": false
      },
      "Asset": {
        "type": "object",
        "properties": {
          "asset_id": {
            "type": "string",
            "format": "uuid"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "custody": {
            "type": "string",
            "enum": [
              "managed_original",
              "external_reference"
            ]
          },
          "sha256": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "size": {
            "type": "integer",
            "minimum": 0
          },
          "media_type": {
            "type": "string"
          },
          "thumbnail": {
            "type": "boolean"
          },
          "created_at": {
            "type": "string"
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "asset_id",
          "version",
          "custody",
          "sha256",
          "size",
          "media_type",
          "thumbnail",
          "created_at"
        ],
        "additionalProperties": false
      },
      "AssetReference": {
        "type": "object",
        "properties": {
          "relative_path": {
            "type": "string"
          },
          "media_type": {
            "type": "string"
          }
        },
        "required": [
          "relative_path",
          "media_type"
        ],
        "additionalProperties": false
      },
      "AssetPolicy": {
        "type": "object",
        "properties": {
          "contract_version": {
            "type": "integer",
            "minimum": 1
          },
          "modes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "max_managed_bytes": {
            "type": "integer",
            "minimum": 0
          },
          "max_external_bytes": {
            "type": "integer",
            "minimum": 0
          },
          "media_types": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "can_write": {
            "type": "boolean"
          }
        },
        "required": [
          "contract_version",
          "modes",
          "max_managed_bytes",
          "max_external_bytes",
          "media_types",
          "can_write"
        ],
        "additionalProperties": false
      },
      "WorkspaceDefine": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "fields": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[a-z][a-z0-9_-]{0,47}$",
                  "not": {
                    "enum": [
                      "id",
                      "owner_id",
                      "version",
                      "status",
                      "closed",
                      "constructor",
                      "prototype",
                      "__proto__"
                    ]
                  },
                  "x-reserved-field-ids": [
                    "id",
                    "owner_id",
                    "version",
                    "status",
                    "closed"
                  ]
                },
                "label": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 128
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "text",
                    "number",
                    "boolean",
                    "date",
                    "choice",
                    "time",
                    "duration",
                    "money_jpy",
                    "case_ref",
                    "asset_ref"
                  ]
                },
                "required": {
                  "type": "boolean"
                },
                "read": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "pattern": "^[a-z][a-z0-9_-]{0,47}$"
                  },
                  "maxItems": 32,
                  "uniqueItems": true
                },
                "write": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "pattern": "^[a-z][a-z0-9_-]{0,47}$"
                  },
                  "maxItems": 32,
                  "uniqueItems": true
                },
                "searchable": {
                  "type": "boolean"
                },
                "choices": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 128
                  },
                  "maxItems": 300
                },
                "computed": {
                  "type": "object",
                  "properties": {
                    "start": {
                      "type": "string"
                    },
                    "end": {
                      "type": "string"
                    },
                    "overnight": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "start",
                    "end",
                    "overnight"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "id",
                "label",
                "type",
                "required",
                "read",
                "write",
                "searchable",
                "choices"
              ],
              "additionalProperties": false
            },
            "maxItems": 64,
            "minItems": 1
          },
          "export_roles": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            },
            "maxItems": 32,
            "uniqueItems": true
          }
        },
        "required": [
          "label",
          "fields",
          "export_roles"
        ],
        "additionalProperties": false
      },
      "WorkspaceDefinition": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "fields": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                },
                "required": {
                  "type": "boolean"
                },
                "choices": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "readable": {
                  "type": "boolean"
                },
                "owner_readable": {
                  "type": "boolean"
                },
                "writable": {
                  "type": "boolean"
                },
                "owner_writable": {
                  "type": "boolean"
                },
                "searchable": {
                  "type": "boolean"
                },
                "computed": {
                  "type": "object",
                  "properties": {
                    "start": {
                      "type": "string"
                    },
                    "end": {
                      "type": "string"
                    },
                    "overnight": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "start",
                    "end",
                    "overnight"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "id",
                "label",
                "type",
                "required",
                "choices",
                "readable",
                "owner_readable",
                "writable",
                "owner_writable",
                "searchable"
              ],
              "additionalProperties": false
            },
            "maxItems": 64
          },
          "can_design": {
            "type": "boolean"
          },
          "can_close": {
            "type": "boolean"
          },
          "can_import": {
            "type": "boolean"
          },
          "can_export": {
            "type": "boolean"
          },
          "row_scope": {
            "type": "string",
            "enum": [
              "own",
              "all"
            ]
          },
          "limits": {
            "type": "object",
            "properties": {
              "rows": {
                "type": "integer",
                "minimum": 0
              },
              "fields": {
                "type": "integer",
                "minimum": 0
              },
              "batch": {
                "type": "integer",
                "minimum": 0
              },
              "page": {
                "type": "integer",
                "minimum": 0
              }
            },
            "required": [
              "rows",
              "fields",
              "batch",
              "page"
            ],
            "additionalProperties": false
          },
          "delete_scope": {
            "enum": [
              "none",
              "own",
              "all"
            ],
            "description": "Separate human deletion scope when workspace_access is installed. Existing read, field, closed-row and membership checks still apply."
          }
        },
        "required": [
          "label",
          "schema_version",
          "fields",
          "can_design",
          "can_close",
          "can_import",
          "can_export",
          "row_scope",
          "limits"
        ],
        "additionalProperties": false
      },
      "WorkspaceBatch": {
        "type": "object",
        "properties": {
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "expected_actor": {
            "type": "string",
            "format": "uuid",
            "description": "Optional compare-only precondition on the authenticated internal actor. Does not set or transfer ownership. Required by the resumable import SDK."
          },
          "operations": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "action": {
                      "const": "create"
                    },
                    "values": {
                      "type": "object",
                      "additionalProperties": {
                        "type": [
                          "string",
                          "number",
                          "boolean",
                          "null"
                        ]
                      },
                      "maxProperties": 64
                    },
                    "status": {
                      "enum": [
                        "draft",
                        "committed"
                      ]
                    }
                  },
                  "required": [
                    "action",
                    "values"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "action": {
                      "const": "update"
                    },
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "変更対象の既存行のUUID。行の取得・一覧応答のidを使用する。expected_actor（呼出本人ID）とは別。"
                    },
                    "version": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "values": {
                      "type": "object",
                      "additionalProperties": {
                        "type": [
                          "string",
                          "number",
                          "boolean",
                          "null"
                        ]
                      },
                      "maxProperties": 64
                    },
                    "status": {
                      "enum": [
                        "draft",
                        "committed"
                      ]
                    }
                  },
                  "required": [
                    "action",
                    "id",
                    "version",
                    "values"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "action": {
                      "const": "delete"
                    },
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "変更対象の既存行のUUID。行の取得・一覧応答のidを使用する。expected_actor（呼出本人ID）とは別。"
                    },
                    "version": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "reason": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 500
                    }
                  },
                  "required": [
                    "action",
                    "id",
                    "version"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "action": {
                      "enum": [
                        "close",
                        "reopen"
                      ]
                    },
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "変更対象の既存行のUUID。行の取得・一覧応答のidを使用する。expected_actor（呼出本人ID）とは別。"
                    },
                    "version": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "reason": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 500
                    }
                  },
                  "required": [
                    "action",
                    "id",
                    "version",
                    "reason"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "maxItems": 100,
            "minItems": 1
          }
        },
        "required": [
          "schema_version",
          "operations"
        ],
        "additionalProperties": false
      },
      "WorkspaceBatchResult": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                },
                "deleted": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "version",
                "deleted"
              ],
              "additionalProperties": false
            },
            "maxItems": 100
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "rows",
          "schema_version"
        ],
        "additionalProperties": false
      },
      "WorkspaceDefineResult": {
        "type": "object",
        "properties": {
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "schema_version"
        ],
        "additionalProperties": false
      },
      "WorkspaceRowResult": {
        "type": "object",
        "properties": {
          "item": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid"
              },
              "version": {
                "type": "integer",
                "minimum": 1
              },
              "status": {
                "type": "string",
                "enum": [
                  "draft",
                  "committed"
                ]
              },
              "closed": {
                "type": "boolean"
              },
              "is_owner": {
                "type": "boolean"
              },
              "values": {
                "type": "object",
                "additionalProperties": {
                  "type": [
                    "string",
                    "number",
                    "boolean",
                    "null"
                  ]
                },
                "maxProperties": 64
              }
            },
            "required": [
              "id",
              "version",
              "status",
              "closed",
              "is_owner",
              "values"
            ],
            "additionalProperties": false
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          }
        },
        "required": [
          "item",
          "schema_version"
        ],
        "additionalProperties": false
      },
      "WorkspaceQueryResult": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "draft",
                    "committed"
                  ]
                },
                "closed": {
                  "type": "boolean"
                },
                "is_owner": {
                  "type": "boolean"
                },
                "values": {
                  "type": "object",
                  "additionalProperties": {
                    "type": [
                      "string",
                      "number",
                      "boolean",
                      "null"
                    ]
                  },
                  "maxProperties": 64
                }
              },
              "required": [
                "id",
                "version",
                "status",
                "closed",
                "is_owner",
                "values"
              ],
              "additionalProperties": false
            },
            "maxItems": 199
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "revision": {
            "type": "string",
            "description": "現在の権限で見える行集合の変更を表す不透明な文字列。同じ資源・取得条件で等値比較に使い、数値変換・加算・大小比較をしない。v1表やv2の状態変更用の整数revisionとは別契約。"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          }
        },
        "required": [
          "items",
          "next_cursor",
          "revision",
          "schema_version"
        ],
        "additionalProperties": false
      },
      "WorkspaceChanges": {
        "type": "object",
        "properties": {
          "revision": {
            "type": "string",
            "description": "現在の権限で見える行集合の変更を表す不透明な文字列。同じ資源・取得条件で等値比較に使い、数値変換・加算・大小比較をしない。v1表やv2の状態変更用の整数revisionとは別契約。"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          }
        },
        "required": [
          "revision",
          "schema_version"
        ],
        "additionalProperties": false
      },
      "WorkspaceAggregate": {
        "type": "object",
        "properties": {
          "filters": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "field": {
                  "type": "string"
                },
                "op": {
                  "type": "string",
                  "enum": [
                    "eq",
                    "contains",
                    "gte",
                    "lte"
                  ]
                },
                "value": {
                  "type": [
                    "string",
                    "number",
                    "boolean",
                    "null"
                  ]
                }
              },
              "required": [
                "field",
                "op",
                "value"
              ],
              "additionalProperties": false
            },
            "maxItems": 8
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "committed"
            ]
          },
          "group_by": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$",
              "not": {
                "enum": [
                  "id",
                  "owner_id",
                  "version",
                  "status",
                  "closed",
                  "constructor",
                  "prototype",
                  "__proto__"
                ]
              },
              "x-reserved-field-ids": [
                "id",
                "owner_id",
                "version",
                "status",
                "closed"
              ]
            },
            "maxItems": 4,
            "uniqueItems": true
          },
          "metrics": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^[a-z][a-z0-9_-]{0,47}$",
                      "not": {
                        "enum": [
                          "id",
                          "owner_id",
                          "version",
                          "status",
                          "closed",
                          "constructor",
                          "prototype",
                          "__proto__"
                        ]
                      },
                      "x-reserved-field-ids": [
                        "id",
                        "owner_id",
                        "version",
                        "status",
                        "closed"
                      ]
                    },
                    "op": {
                      "const": "count"
                    }
                  },
                  "required": [
                    "id",
                    "op"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "pattern": "^[a-z][a-z0-9_-]{0,47}$",
                      "not": {
                        "enum": [
                          "id",
                          "owner_id",
                          "version",
                          "status",
                          "closed",
                          "constructor",
                          "prototype",
                          "__proto__"
                        ]
                      },
                      "x-reserved-field-ids": [
                        "id",
                        "owner_id",
                        "version",
                        "status",
                        "closed"
                      ]
                    },
                    "op": {
                      "enum": [
                        "sum",
                        "min",
                        "max"
                      ]
                    },
                    "field": {
                      "type": "string",
                      "pattern": "^[a-z][a-z0-9_-]{0,47}$",
                      "not": {
                        "enum": [
                          "id",
                          "owner_id",
                          "version",
                          "status",
                          "closed",
                          "constructor",
                          "prototype",
                          "__proto__"
                        ]
                      },
                      "x-reserved-field-ids": [
                        "id",
                        "owner_id",
                        "version",
                        "status",
                        "closed"
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "op",
                    "field"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "maxItems": 8,
            "minItems": 1
          }
        },
        "required": [
          "metrics"
        ],
        "additionalProperties": false
      },
      "WorkspaceAggregateResult": {
        "type": "object",
        "properties": {
          "groups": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "object",
                  "additionalProperties": {
                    "type": [
                      "string",
                      "number",
                      "boolean",
                      "null"
                    ]
                  },
                  "maxProperties": 4
                },
                "metrics": {
                  "type": "object",
                  "additionalProperties": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "maxProperties": 8
                }
              },
              "required": [
                "key",
                "metrics"
              ],
              "additionalProperties": false
            },
            "maxItems": 199
          },
          "revision": {
            "type": "string",
            "description": "現在の権限で見える行集合の変更を表す不透明な文字列。同じ資源・取得条件で等値比較に使い、数値変換・加算・大小比較をしない。v1表やv2の状態変更用の整数revisionとは別契約。"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          }
        },
        "required": [
          "groups",
          "revision",
          "schema_version"
        ],
        "additionalProperties": false
      },
      "WorkspaceExport": {
        "type": "object",
        "properties": {
          "csv": {
            "type": "string"
          },
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "revision": {
            "type": "string",
            "description": "現在の権限で見える行集合の変更を表す不透明な文字列。同じ資源・取得条件で等値比較に使い、数値変換・加算・大小比較をしない。v1表やv2の状態変更用の整数revisionとは別契約。"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          }
        },
        "required": [
          "csv",
          "next_cursor",
          "revision",
          "schema_version"
        ],
        "additionalProperties": false
      },
      "NumberSeries": {
        "type": "object",
        "properties": {
          "prefix": {
            "type": "string",
            "minLength": 1,
            "maxLength": 32
          },
          "width": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10
          },
          "next_value": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9999999999
          },
          "reuse_cancelled": {
            "type": "boolean"
          }
        },
        "required": [
          "prefix",
          "width",
          "next_value",
          "reuse_cancelled"
        ],
        "additionalProperties": false
      },
      "NumberSeriesResult": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "version"
        ],
        "additionalProperties": false
      },
      "CaseCreate": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 512
          },
          "series": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_-]{0,47}$"
          },
          "period": {
            "type": "string",
            "minLength": 1,
            "maxLength": 32
          }
        },
        "required": [
          "title",
          "series",
          "period"
        ],
        "additionalProperties": false
      },
      "Case": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "number": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "status": {
            "enum": [
              "active",
              "cancelled"
            ]
          },
          "legacy": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "number",
          "title",
          "version",
          "status",
          "legacy"
        ],
        "additionalProperties": false
      },
      "CaseResult": {
        "type": "object",
        "properties": {
          "item": {
            "$ref": "#/components/schemas/Case"
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "item"
        ],
        "additionalProperties": false
      },
      "CaseImport": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "number": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 256
                },
                "title": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 512
                },
                "source_key": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 256
                }
              },
              "required": [
                "number",
                "title",
                "source_key"
              ],
              "additionalProperties": false
            },
            "maxItems": 100,
            "minItems": 1
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "CaseImportResult": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Case"
            },
            "maxItems": 100
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "CaseQuery": {
        "type": "object",
        "properties": {
          "number": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256
          },
          "after": {
            "type": "string",
            "format": "uuid"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 199
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "CaseQueryResult": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Case"
            },
            "maxItems": 199
          },
          "next_after": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "items",
          "next_after"
        ],
        "additionalProperties": false
      },
      "CaseCancel": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          }
        },
        "required": [
          "version"
        ],
        "additionalProperties": false
      },
      "WorkspaceTrashPolicy": {
        "type": "object",
        "properties": {
          "configured": {
            "type": "boolean"
          },
          "retention_days": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 1,
            "maximum": 3650
          }
        },
        "required": [
          "configured",
          "retention_days"
        ],
        "additionalProperties": false
      },
      "WorkspaceTrashList": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "trash_id": {
                  "type": "string",
                  "format": "uuid"
                },
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                },
                "deleted_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "restore_until": {
                  "type": "string",
                  "format": "date-time"
                },
                "reason": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "is_owner": {
                  "type": "boolean"
                },
                "schema_unchanged": {
                  "type": "boolean"
                }
              },
              "required": [
                "trash_id",
                "id",
                "version",
                "deleted_at",
                "restore_until",
                "reason",
                "is_owner",
                "schema_unchanged"
              ],
              "additionalProperties": false
            },
            "maxItems": 100
          },
          "next_after": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "items",
          "next_after"
        ],
        "additionalProperties": false
      },
      "WorkspaceRestore": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "reason": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          }
        },
        "required": [
          "version",
          "reason"
        ],
        "additionalProperties": false
      },
      "WorkspaceRestoreResult": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "trash_id": {
            "type": "string",
            "format": "uuid"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "version",
          "trash_id",
          "schema_version"
        ],
        "additionalProperties": false
      },
      "WorkspaceCatalog": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "schema_version": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "required": [
                "id",
                "label",
                "schema_version"
              ],
              "additionalProperties": false
            },
            "maxItems": 100
          },
          "next_after": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "items",
          "next_after"
        ],
        "additionalProperties": false
      },
      "WorkspaceTableLifecycle": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "state": {
            "enum": [
              "active",
              "trashed"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "description": "この応答が表す資源・一覧の変更版。別資源へ流用しない。"
          },
          "owner_app": {
            "type": [
              "string",
              "null"
            ]
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "restore_until": {
            "type": [
              "string",
              "null"
            ]
          },
          "reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "blockers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "kind": {
                  "enum": [
                    "shared_app",
                    "child_table"
                  ]
                },
                "id": {
                  "type": "string"
                }
              },
              "required": [
                "kind",
                "id"
              ],
              "additionalProperties": false
            }
          },
          "retention_days": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 1,
            "maximum": 3650
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "label",
          "schema_version",
          "state",
          "revision",
          "owner_app",
          "deleted_at",
          "restore_until",
          "reason",
          "blockers",
          "retention_days"
        ],
        "additionalProperties": false
      },
      "WorkspaceTableTrash": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "schema_version": {
                  "type": "integer",
                  "minimum": 1
                },
                "state": {
                  "enum": [
                    "active",
                    "trashed"
                  ]
                },
                "revision": {
                  "type": "integer",
                  "minimum": 0
                },
                "owner_app": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "deleted_at": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "restore_until": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "reason": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "id",
                "label",
                "schema_version",
                "state",
                "revision",
                "owner_app",
                "deleted_at",
                "restore_until",
                "reason"
              ],
              "additionalProperties": false
            },
            "maxItems": 100
          },
          "next_after": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "items",
          "next_after"
        ],
        "additionalProperties": false
      },
      "WorkspaceTableTransition": {
        "type": "object",
        "properties": {
          "action": {
            "enum": [
              "trash",
              "restore"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "description": "この応答が表す資源・一覧の変更版。別資源へ流用しない。"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "reason": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          }
        },
        "required": [
          "action",
          "revision",
          "schema_version",
          "reason"
        ],
        "additionalProperties": false
      },
      "WorkspaceAccess": {
        "type": "object",
        "properties": {
          "mode": {
            "enum": [
              "table",
              "members"
            ]
          },
          "parent_collection": {
            "type": [
              "string",
              "null"
            ]
          },
          "field": {
            "type": [
              "string",
              "null"
            ]
          },
          "cardinality": {
            "enum": [
              "one",
              "many"
            ]
          }
        },
        "required": [
          "mode",
          "parent_collection",
          "field",
          "cardinality"
        ],
        "additionalProperties": false
      },
      "WorkspaceAccessResult": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 0,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "mode": {
            "enum": [
              "table",
              "members"
            ]
          },
          "parent_collection": {
            "type": [
              "string",
              "null"
            ]
          },
          "field": {
            "type": [
              "string",
              "null"
            ]
          },
          "cardinality": {
            "enum": [
              "one",
              "many"
            ]
          }
        },
        "required": [
          "version",
          "mode",
          "parent_collection",
          "field",
          "cardinality"
        ],
        "additionalProperties": false
      },
      "WorkspaceMember": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "write": {
            "type": "boolean"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "enabled",
          "write",
          "expires_at"
        ],
        "additionalProperties": false
      },
      "WorkspaceMembers": {
        "type": "object",
        "properties": {
          "members": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "actor": {
                  "type": "string",
                  "format": "uuid"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                },
                "enabled": {
                  "type": "boolean"
                },
                "write": {
                  "type": "boolean"
                },
                "expires_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "required": [
                "actor",
                "version",
                "enabled",
                "write",
                "expires_at"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "members"
        ],
        "additionalProperties": false
      },
      "WorkspaceSocketVersion": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "version"
        ],
        "additionalProperties": false
      },
      "WorkspaceEvents": {
        "type": "object",
        "properties": {
          "cursor": {
            "type": "string",
            "maxLength": 4096
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 199
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "WorkspaceEventsResult": {
        "type": "object",
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "row_id": {
                  "type": "string",
                  "format": "uuid"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                },
                "kind": {
                  "enum": [
                    "created",
                    "updated",
                    "deleted"
                  ]
                }
              },
              "required": [
                "id",
                "row_id",
                "version",
                "kind"
              ],
              "additionalProperties": false
            },
            "maxItems": 199
          },
          "has_more": {
            "type": "boolean"
          },
          "cursor": {
            "type": "string"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          }
        },
        "required": [
          "events",
          "has_more",
          "cursor",
          "schema_version"
        ],
        "additionalProperties": false
      },
      "WorkspaceTransaction": {
        "type": "object",
        "properties": {
          "tables": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "collection": {
                  "type": "string"
                },
                "schema_version": {
                  "type": "integer",
                  "minimum": 1
                },
                "operations": {
                  "type": "array",
                  "items": {
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "action": {
                            "const": "create"
                          },
                          "values": {
                            "type": "object",
                            "additionalProperties": {
                              "type": [
                                "string",
                                "number",
                                "boolean",
                                "null"
                              ]
                            },
                            "maxProperties": 64
                          },
                          "status": {
                            "enum": [
                              "draft",
                              "committed"
                            ]
                          }
                        },
                        "required": [
                          "action",
                          "values"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "action": {
                            "const": "update"
                          },
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "description": "変更対象の既存行のUUID。行の取得・一覧応答のidを使用する。expected_actor（呼出本人ID）とは別。"
                          },
                          "version": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "values": {
                            "type": "object",
                            "additionalProperties": {
                              "type": [
                                "string",
                                "number",
                                "boolean",
                                "null"
                              ]
                            },
                            "maxProperties": 64
                          },
                          "status": {
                            "enum": [
                              "draft",
                              "committed"
                            ]
                          }
                        },
                        "required": [
                          "action",
                          "id",
                          "version",
                          "values"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "action": {
                            "const": "delete"
                          },
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "description": "変更対象の既存行のUUID。行の取得・一覧応答のidを使用する。expected_actor（呼出本人ID）とは別。"
                          },
                          "version": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "reason": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 500
                          }
                        },
                        "required": [
                          "action",
                          "id",
                          "version"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "action": {
                            "enum": [
                              "close",
                              "reopen"
                            ]
                          },
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "description": "変更対象の既存行のUUID。行の取得・一覧応答のidを使用する。expected_actor（呼出本人ID）とは別。"
                          },
                          "version": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "reason": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 500
                          }
                        },
                        "required": [
                          "action",
                          "id",
                          "version",
                          "reason"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  },
                  "maxItems": 100,
                  "minItems": 1
                }
              },
              "required": [
                "collection",
                "schema_version",
                "operations"
              ],
              "additionalProperties": false
            },
            "maxItems": 8,
            "minItems": 1
          },
          "expected_actor": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "tables"
        ],
        "additionalProperties": false
      },
      "WorkspaceTransactionResult": {
        "type": "object",
        "properties": {
          "transaction_id": {
            "type": "string",
            "format": "uuid"
          },
          "tables": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "collection": {
                  "type": "string"
                },
                "rows": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "version": {
                        "type": "integer",
                        "minimum": 1
                      },
                      "deleted": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "id",
                      "version",
                      "deleted"
                    ],
                    "additionalProperties": false
                  },
                  "maxItems": 100
                },
                "schema_version": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "required": [
                "collection",
                "rows",
                "schema_version"
              ],
              "additionalProperties": false
            },
            "maxItems": 8
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "transaction_id",
          "tables"
        ],
        "additionalProperties": false
      },
      "ServicePublicKey": {
        "type": "object",
        "properties": {
          "kty": {
            "const": "RSA"
          },
          "n": {
            "type": "string",
            "minLength": 342,
            "maxLength": 1400,
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "e": {
            "const": "AQAB"
          },
          "kid": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]{1,64}$"
          },
          "alg": {
            "const": "RS256"
          },
          "use": {
            "const": "sig"
          }
        },
        "required": [
          "kty",
          "n",
          "e",
          "kid"
        ],
        "additionalProperties": false
      },
      "ServiceScope": {
        "type": "object",
        "properties": {
          "collection": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_-]{0,47}$"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "read": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            },
            "maxItems": 64,
            "uniqueItems": true
          },
          "write": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            },
            "maxItems": 64,
            "uniqueItems": true
          },
          "operations": {
            "type": "array",
            "items": {
              "enum": [
                "query",
                "update",
                "create",
                "delete"
              ]
            },
            "maxItems": 4,
            "minItems": 1,
            "uniqueItems": true
          },
          "rows": {
            "type": "object",
            "properties": {
              "kind": {
                "enum": [
                  "all",
                  "match"
                ]
              },
              "values": {
                "type": "object",
                "additionalProperties": {
                  "type": [
                    "string",
                    "number",
                    "boolean",
                    "null"
                  ]
                },
                "maxProperties": 8
              }
            },
            "required": [
              "kind",
              "values"
            ],
            "additionalProperties": false
          },
          "custodian": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          }
        },
        "required": [
          "collection",
          "schema_version",
          "read",
          "write",
          "operations",
          "rows"
        ],
        "additionalProperties": false
      },
      "ServiceApplication": {
        "type": "object",
        "properties": {
          "app_id": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_-]{0,47}$"
          },
          "purpose": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "rpm": {
            "type": "integer",
            "minimum": 1,
            "maximum": 120
          },
          "jwk": {
            "$ref": "#/components/schemas/ServicePublicKey"
          },
          "scopes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ServiceScope"
            },
            "maxItems": 16,
            "minItems": 1
          }
        },
        "required": [
          "app_id",
          "purpose",
          "expires_at",
          "rpm",
          "jwk",
          "scopes"
        ],
        "additionalProperties": false
      },
      "ServiceClient": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "client_id": {
            "type": "string"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "generation": {
            "type": "integer",
            "minimum": 1
          },
          "policy_version": {
            "type": "integer",
            "minimum": 1
          },
          "authority_kind": {
            "enum": [
              "legacy",
              "managed"
            ]
          },
          "state": {
            "enum": [
              "requested",
              "approved",
              "ready",
              "active",
              "suspended",
              "revoked"
            ]
          },
          "application": {
            "$ref": "#/components/schemas/ServiceApplication"
          },
          "applicant": {
            "type": "string",
            "format": "uuid"
          },
          "approver": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "approver_client": {
            "type": [
              "string",
              "null"
            ]
          },
          "subject": {
            "type": [
              "string",
              "null"
            ]
          },
          "idp_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "connection": {
            "type": "object",
            "properties": {
              "issuer": {
                "type": "string"
              },
              "token_endpoint": {
                "type": "string"
              },
              "audience": {
                "type": "string"
              },
              "auth_method": {
                "const": "private_key_jwt"
              }
            },
            "required": [
              "issuer",
              "token_endpoint",
              "audience",
              "auth_method"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "id",
          "client_id",
          "version",
          "generation",
          "policy_version",
          "authority_kind",
          "state",
          "application",
          "applicant",
          "approver",
          "approver_client",
          "subject",
          "idp_id",
          "expires_at",
          "connection"
        ],
        "additionalProperties": false
      },
      "AccessPolicy": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "rpm": {
            "type": "integer",
            "minimum": 1,
            "maximum": 120
          },
          "scopes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ServiceScope"
            },
            "maxItems": 16,
            "minItems": 1
          }
        },
        "required": [
          "version",
          "expires_at",
          "rpm",
          "scopes"
        ],
        "additionalProperties": false
      },
      "AccessClients": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "client_id": {
                  "type": "string"
                },
                "app_id": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                },
                "policy_version": {
                  "type": "integer",
                  "minimum": 1
                },
                "authority_kind": {
                  "enum": [
                    "legacy",
                    "managed"
                  ]
                },
                "state": {
                  "type": "string"
                },
                "expires_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "required": [
                "id",
                "client_id",
                "app_id",
                "version",
                "policy_version",
                "authority_kind",
                "state",
                "expires_at"
              ],
              "additionalProperties": false
            },
            "maxItems": 100
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "AccessSubjects": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "active": {
                  "type": "boolean"
                },
                "actor_type": {
                  "const": "human"
                }
              },
              "required": [
                "id",
                "active",
                "actor_type"
              ],
              "additionalProperties": false
            },
            "maxItems": 100
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "AccessTables": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                },
                "label": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "version",
                "label"
              ],
              "additionalProperties": false
            },
            "maxItems": 100
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "AccessDefinition": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "definition": {
            "$ref": "#/components/schemas/WorkspaceDefine"
          }
        },
        "required": [
          "id",
          "version",
          "definition"
        ],
        "additionalProperties": false
      },
      "AccessGrantInput": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "version": {
                "type": "integer",
                "minimum": 0
              },
              "enabled": {
                "const": false
              }
            },
            "required": [
              "version",
              "enabled"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "version": {
                "type": "integer",
                "minimum": 0
              },
              "enabled": {
                "const": true
              },
              "role": {
                "type": "string",
                "pattern": "^[a-z][a-z0-9_-]{0,47}$",
                "not": {
                  "const": "owner"
                }
              },
              "read_scope": {
                "enum": [
                  "own",
                  "all"
                ]
              },
              "write_scope": {
                "enum": [
                  "none",
                  "own",
                  "all"
                ]
              },
              "can_design": {
                "type": "boolean"
              },
              "can_close": {
                "type": "boolean"
              },
              "can_import": {
                "type": "boolean"
              },
              "expires_at": {
                "type": "string",
                "format": "date-time"
              }
            },
            "required": [
              "version",
              "enabled",
              "role",
              "read_scope",
              "write_scope",
              "can_design",
              "can_close",
              "can_import",
              "expires_at"
            ],
            "additionalProperties": false
          }
        ]
      },
      "AccessGrant": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 0,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "grant": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "properties": {
                  "actor": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "client": {
                    "const": "hub-spa",
                    "description": "このgrantが適用される本人用の登録済みクライアントID。現在のAPIはhub-spa固定。任意のアプリ名やserviceのclient_idへ置換しない。"
                  },
                  "collection": {
                    "type": "string"
                  },
                  "role": {
                    "type": "string"
                  },
                  "read_scope": {
                    "enum": [
                      "own",
                      "all"
                    ]
                  },
                  "write_scope": {
                    "enum": [
                      "none",
                      "own",
                      "all"
                    ]
                  },
                  "can_design": {
                    "type": "boolean"
                  },
                  "can_close": {
                    "type": "boolean"
                  },
                  "can_import": {
                    "type": "boolean"
                  },
                  "expires_at": {
                    "type": "string",
                    "format": "date-time"
                  }
                },
                "required": [
                  "actor",
                  "client",
                  "collection",
                  "role",
                  "read_scope",
                  "write_scope",
                  "can_design",
                  "can_close",
                  "can_import",
                  "expires_at"
                ],
                "additionalProperties": false
              }
            ]
          }
        },
        "required": [
          "version",
          "grant"
        ],
        "additionalProperties": false
      },
      "AccessDelete": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          }
        },
        "required": [
          "version"
        ],
        "additionalProperties": false
      },
      "ServiceChange": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "jwk": {
            "$ref": "#/components/schemas/ServicePublicKey"
          }
        },
        "required": [
          "version"
        ],
        "additionalProperties": false
      },
      "ServiceQuery": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 199,
            "default": 50
          },
          "after": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "ServiceQueryResult": {
        "type": "object",
        "properties": {
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                },
                "status": {
                  "enum": [
                    "draft",
                    "committed"
                  ]
                },
                "closed": {
                  "type": "boolean"
                },
                "values": {
                  "type": "object",
                  "additionalProperties": {
                    "type": [
                      "string",
                      "number",
                      "boolean",
                      "null"
                    ]
                  },
                  "maxProperties": 64
                }
              },
              "required": [
                "id",
                "version",
                "status",
                "closed",
                "values"
              ],
              "additionalProperties": false
            },
            "maxItems": 199
          },
          "next_after": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          }
        },
        "required": [
          "schema_version",
          "items",
          "next_after"
        ],
        "additionalProperties": false
      },
      "ServiceBatch": {
        "type": "object",
        "properties": {
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "operations": {
            "type": "array",
            "minItems": 1,
            "maxItems": 50,
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "action": {
                      "const": "create"
                    },
                    "values": {
                      "type": "object",
                      "additionalProperties": {
                        "type": [
                          "string",
                          "number",
                          "boolean",
                          "null"
                        ]
                      },
                      "maxProperties": 64
                    }
                  },
                  "required": [
                    "action",
                    "values"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "action": {
                      "const": "update"
                    },
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "version": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "values": {
                      "type": "object",
                      "additionalProperties": {
                        "type": [
                          "string",
                          "number",
                          "boolean",
                          "null"
                        ]
                      },
                      "maxProperties": 64
                    }
                  },
                  "required": [
                    "action",
                    "id",
                    "version",
                    "values"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "action": {
                      "const": "delete"
                    },
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "version": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "reason": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 500
                    }
                  },
                  "required": [
                    "action",
                    "id",
                    "version"
                  ],
                  "additionalProperties": false
                }
              ]
            }
          }
        },
        "required": [
          "schema_version",
          "operations"
        ],
        "additionalProperties": false
      },
      "ServiceBatchResult": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "required": [
                "id",
                "version"
              ],
              "additionalProperties": false
            },
            "maxItems": 50
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          }
        },
        "required": [
          "items",
          "schema_version"
        ],
        "additionalProperties": false
      },
      "ServiceTableMetadata": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string"
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "custodian": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "fields": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "type": {
                  "type": "string"
                },
                "required": {
                  "type": "boolean"
                },
                "choices": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "readable": {
                  "type": "boolean"
                },
                "writable": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "label",
                "type",
                "required",
                "choices",
                "readable",
                "writable"
              ],
              "additionalProperties": false
            },
            "maxItems": 64
          },
          "can_import": {
            "type": "boolean"
          },
          "can_export": {
            "type": "boolean"
          },
          "limits": {
            "type": "object",
            "properties": {
              "batch": {
                "const": 100
              },
              "page": {
                "const": 199
              }
            },
            "required": [
              "batch",
              "page"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "label",
          "schema_version",
          "custodian",
          "fields",
          "can_import",
          "can_export",
          "limits"
        ],
        "additionalProperties": false
      },
      "ServiceImport": {
        "type": "object",
        "properties": {
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "expected_actor": {
            "type": "string",
            "format": "uuid"
          },
          "operations": {
            "type": "array",
            "minItems": 1,
            "maxItems": 100,
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "action": {
                      "const": "create"
                    },
                    "values": {
                      "type": "object",
                      "additionalProperties": {
                        "type": [
                          "string",
                          "number",
                          "boolean",
                          "null"
                        ]
                      },
                      "maxProperties": 64
                    }
                  },
                  "required": [
                    "action",
                    "values"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "action": {
                      "const": "update"
                    },
                    "id": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "version": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "values": {
                      "type": "object",
                      "additionalProperties": {
                        "type": [
                          "string",
                          "number",
                          "boolean",
                          "null"
                        ]
                      },
                      "maxProperties": 64
                    }
                  },
                  "required": [
                    "action",
                    "id",
                    "version",
                    "values"
                  ],
                  "additionalProperties": false
                }
              ]
            }
          }
        },
        "required": [
          "schema_version",
          "expected_actor",
          "operations"
        ],
        "additionalProperties": false
      },
      "ServiceImportResult": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "required": [
                "id",
                "version"
              ],
              "additionalProperties": false
            },
            "maxItems": 100
          },
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          }
        },
        "required": [
          "rows",
          "schema_version"
        ],
        "additionalProperties": false
      },
      "Media": {
        "type": "object",
        "properties": {
          "asset_id": {
            "type": "string",
            "format": "uuid"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "custody": {
            "enum": [
              "managed_original",
              "external_reference"
            ]
          },
          "media_type": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "size": {
            "type": "integer",
            "minimum": 0
          },
          "sha256": {
            "type": "string"
          },
          "preview": {
            "enum": [
              "ready",
              "not_supported"
            ]
          },
          "deleted": {
            "type": "boolean"
          },
          "updated_at": {
            "type": "string"
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "asset_id",
          "version",
          "deleted",
          "updated_at"
        ],
        "additionalProperties": false
      },
      "MediaPolicy": {
        "type": "object",
        "properties": {
          "schema_version": {
            "type": "integer",
            "minimum": 1,
            "description": "表の列定義の版。行versionとは別。"
          },
          "parent_version": {
            "type": "integer",
            "minimum": 1
          },
          "can_write": {
            "type": "boolean"
          },
          "contract_version": {
            "const": 1
          },
          "modes": {
            "type": "array",
            "items": {
              "enum": [
                "managed_original",
                "external_reference"
              ]
            }
          },
          "max_bytes": {
            "type": "integer",
            "minimum": 1,
            "maximum": 33554432
          },
          "max_attachments": {
            "const": 100
          },
          "reference_stores": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "formats": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "thumbnail": {
                  "type": "boolean"
                },
                "download": {
                  "const": true
                },
                "browser_preview": {
                  "enum": [
                    "browser-dependent",
                    "download"
                  ]
                },
                "transcode": {
                  "const": false
                }
              },
              "required": [
                "type",
                "thumbnail",
                "download",
                "browser_preview",
                "transcode"
              ],
              "additionalProperties": false
            }
          },
          "resumable": {
            "const": false
          },
          "range": {
            "const": false
          }
        },
        "required": [
          "schema_version",
          "parent_version",
          "can_write",
          "contract_version",
          "modes",
          "max_bytes",
          "max_attachments",
          "reference_stores",
          "formats",
          "resumable",
          "range"
        ],
        "additionalProperties": false
      },
      "MediaReference": {
        "type": "object",
        "properties": {
          "store": {
            "type": "string"
          },
          "relative_path": {
            "type": "string",
            "maxLength": 1400
          },
          "media_type": {
            "enum": [
              "image/png",
              "image/jpeg",
              "image/webp",
              "application/pdf",
              "text/plain",
              "audio/mpeg",
              "audio/wav",
              "audio/ogg",
              "video/mp4",
              "video/webm"
            ]
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255
          }
        },
        "required": [
          "store",
          "relative_path",
          "media_type",
          "name"
        ],
        "additionalProperties": false
      },
      "HumanDeleteInput": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 0,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "scope": {
            "enum": [
              "none",
              "own",
              "all"
            ]
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "reason": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          }
        },
        "required": [
          "version",
          "scope",
          "expires_at",
          "reason"
        ],
        "additionalProperties": false
      },
      "HumanDeleteGrant": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 0,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "grant": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "properties": {
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "scope": {
                    "enum": [
                      "none",
                      "own",
                      "all"
                    ]
                  },
                  "expires_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "source": {
                    "enum": [
                      "legacy",
                      "explicit",
                      "new",
                      "revoked"
                    ]
                  }
                },
                "required": [
                  "version",
                  "scope",
                  "expires_at",
                  "source"
                ],
                "additionalProperties": false
              }
            ]
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "version",
          "grant"
        ],
        "additionalProperties": false
      },
      "PersonRootInput": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 0,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "enabled": {
            "type": "boolean"
          },
          "reason": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          }
        },
        "required": [
          "version",
          "enabled",
          "reason"
        ],
        "additionalProperties": false
      },
      "PersonRootResult": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 0,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "root": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "properties": {
                  "collection": {
                    "type": "string"
                  },
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "enabled": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "collection",
                  "version",
                  "enabled"
                ],
                "additionalProperties": false
              }
            ]
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "version",
          "root"
        ],
        "additionalProperties": false
      },
      "PersonBindingInput": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 0,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "person_id": {
            "type": "string",
            "format": "uuid"
          },
          "enabled": {
            "type": "boolean"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "reason": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          }
        },
        "required": [
          "version",
          "person_id",
          "enabled",
          "expires_at",
          "reason"
        ],
        "additionalProperties": false
      },
      "PersonBindingResult": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 0,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "binding": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "properties": {
                  "person_id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "expires_at": {
                    "type": "string",
                    "format": "date-time"
                  }
                },
                "required": [
                  "person_id",
                  "version",
                  "enabled",
                  "expires_at"
                ],
                "additionalProperties": false
              }
            ]
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "version",
          "binding"
        ],
        "additionalProperties": false
      },
      "PersonMembersInput": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          },
          "members": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "actor": {
                  "type": "string",
                  "format": "uuid"
                },
                "version": {
                  "type": "integer",
                  "minimum": 0
                },
                "enabled": {
                  "type": "boolean"
                },
                "write": {
                  "type": "boolean"
                },
                "expires_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "required": [
                "actor",
                "version",
                "enabled",
                "write",
                "expires_at"
              ],
              "additionalProperties": false
            },
            "maxItems": 100,
            "minItems": 1
          }
        },
        "required": [
          "reason",
          "members"
        ],
        "additionalProperties": false
      },
      "PersonMembersResult": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "actor": {
                  "type": "string",
                  "format": "uuid"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                },
                "enabled": {
                  "type": "boolean"
                },
                "write": {
                  "type": "boolean"
                },
                "expires_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "required": [
                "actor",
                "version",
                "enabled",
                "write",
                "expires_at"
              ],
              "additionalProperties": false
            },
            "maxItems": 100
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "PersonMembersPage": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "actor": {
                  "type": "string",
                  "format": "uuid"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                },
                "enabled": {
                  "type": "boolean"
                },
                "write": {
                  "type": "boolean"
                },
                "expires_at": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "required": [
                "actor",
                "version",
                "enabled",
                "write",
                "expires_at"
              ],
              "additionalProperties": false
            },
            "maxItems": 100
          },
          "next_after": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          }
        },
        "required": [
          "items",
          "next_after"
        ],
        "additionalProperties": false
      },
      "PersonSelf": {
        "type": "object",
        "properties": {
          "resolution": {
            "enum": [
              "resolved",
              "unresolved"
            ]
          },
          "person_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "binding_version": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 1
          }
        },
        "required": [
          "resolution",
          "person_id",
          "binding_version"
        ],
        "additionalProperties": false
      },
      "RowSubjectsInput": {
        "type": "object",
        "properties": {
          "rows": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "required": [
                "id",
                "version"
              ],
              "additionalProperties": false
            },
            "maxItems": 100,
            "minItems": 1
          }
        },
        "required": [
          "rows"
        ],
        "additionalProperties": false
      },
      "RowSubjectsResult": {
        "type": "object",
        "properties": {
          "person_collection": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "row_id": {
                  "type": "string",
                  "format": "uuid"
                },
                "row_version": {
                  "type": "integer",
                  "minimum": 1
                },
                "person_id": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "required": [
                "row_id",
                "row_version",
                "person_id"
              ],
              "additionalProperties": false
            },
            "maxItems": 100
          }
        },
        "required": [
          "person_collection",
          "items"
        ],
        "additionalProperties": false
      },
      "AppManifest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_-]{0,47}$"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          },
          "datasets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[a-z][a-z0-9_-]{0,47}$"
                },
                "mode": {
                  "enum": [
                    "owned",
                    "shared"
                  ]
                },
                "definition": {
                  "$ref": "#/components/schemas/WorkspaceDefine"
                }
              },
              "required": [
                "id",
                "mode",
                "definition"
              ],
              "additionalProperties": false
            },
            "maxItems": 32,
            "minItems": 1
          },
          "dependencies": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_-]{0,47}$"
            },
            "maxItems": 32,
            "uniqueItems": true
          }
        },
        "required": [
          "id",
          "version",
          "name",
          "datasets",
          "dependencies"
        ],
        "additionalProperties": false
      },
      "AppState": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_-]{0,47}$"
          },
          "version": {
            "type": "integer",
            "minimum": 1,
            "description": "この資源自身の版。最新の取得結果と照合する。"
          },
          "revision": {
            "type": "integer",
            "minimum": 1,
            "description": "この応答が表す資源・一覧の変更版。別資源へ流用しない。"
          },
          "state": {
            "enum": [
              "active",
              "stopped",
              "detached",
              "trashed"
            ]
          },
          "manifest": {
            "$ref": "#/components/schemas/AppManifest"
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "restore_until": {
            "type": [
              "string",
              "null"
            ]
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "version",
          "revision",
          "state",
          "manifest",
          "deleted_at",
          "restore_until"
        ],
        "additionalProperties": false
      },
      "AppList": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[a-z][a-z0-9_-]{0,47}$"
                },
                "version": {
                  "type": "integer",
                  "minimum": 1
                },
                "revision": {
                  "type": "integer",
                  "minimum": 1
                },
                "state": {
                  "enum": [
                    "active",
                    "stopped",
                    "detached",
                    "trashed"
                  ]
                },
                "name": {
                  "type": "string"
                },
                "deleted_at": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "restore_until": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "id",
                "version",
                "revision",
                "state",
                "name",
                "deleted_at",
                "restore_until"
              ],
              "additionalProperties": false
            },
            "maxItems": 100
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      },
      "AppPlan": {
        "type": "object",
        "properties": {
          "fingerprint": {
            "type": "string",
            "pattern": "^[0-9a-f]{64}$"
          },
          "revision": {
            "type": "integer",
            "minimum": 0,
            "description": "この応答が表す資源・一覧の変更版。別資源へ流用しない。"
          },
          "changes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "pattern": "^[a-z][a-z0-9_-]{0,47}$"
                },
                "mode": {
                  "enum": [
                    "owned",
                    "shared"
                  ]
                },
                "action": {
                  "enum": [
                    "create",
                    "retain",
                    "define",
                    "reference"
                  ]
                },
                "version": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "required": [
                "id",
                "mode",
                "action",
                "version"
              ],
              "additionalProperties": false
            },
            "maxItems": 32
          }
        },
        "required": [
          "fingerprint",
          "revision",
          "changes"
        ],
        "additionalProperties": false
      },
      "AppApply": {
        "type": "object",
        "properties": {
          "manifest": {
            "$ref": "#/components/schemas/AppManifest"
          },
          "fingerprint": {
            "type": "string",
            "pattern": "^[0-9a-f]{64}$"
          }
        },
        "required": [
          "manifest",
          "fingerprint"
        ],
        "additionalProperties": false
      },
      "AppTransition": {
        "type": "object",
        "properties": {
          "action": {
            "enum": [
              "stop",
              "resume",
              "detach",
              "trash",
              "restore"
            ]
          },
          "revision": {
            "type": "integer",
            "minimum": 1,
            "description": "この応答が表す資源・一覧の変更版。別資源へ流用しない。"
          },
          "reason": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          }
        },
        "required": [
          "action",
          "revision",
          "reason"
        ],
        "additionalProperties": false
      }
    }
  },
  "x-error-status": {
    "ASSET_REASON_REQUIRED": 428,
    "ASSET_INVALID": 400,
    "ASSET_INVALID_IMAGE": 400,
    "ASSET_FORBIDDEN": 403,
    "ASSET_POLICY_DENIED": 403,
    "ASSET_NOT_FOUND": 404,
    "ASSET_NO_THUMBNAIL": 404,
    "ASSET_VERSION_CONFLICT": 409,
    "ASSET_IDEMPOTENCY_MISMATCH": 409,
    "ASSET_POLICY_CHANGED": 409,
    "ASSET_PRECONDITION_REQUIRED": 428,
    "ASSET_TOO_LARGE": 413,
    "ASSET_QUOTA_EXCEEDED": 507,
    "ASSET_DEPENDENCY_UNAVAILABLE": 503,
    "ASSET_BUSY": 503,
    "ASSET_CAPACITY": 503,
    "BAD_REQUEST": 400,
    "ETAG_MALFORMED": 400,
    "SELF_DECLARED_HEADER": 400,
    "AUTH_REQUIRED": 401,
    "TOKEN_INVALID": 401,
    "TOKEN_EXPIRED": 401,
    "FORBIDDEN_ROLE": 403,
    "FIELD_NOT_WRITABLE": 403,
    "SCOPE_VIOLATION": 403,
    "MFA_REQUIRED": 403,
    "REAUTH_REQUIRED": 403,
    "AI_MUST_USE_PROPOSALS": 403,
    "AI_SUSPENDED": 403,
    "NOT_FOUND": 404,
    "STATE_CONFLICT": 409,
    "PROPOSAL_CONFLICT": 409,
    "OPERATION_IN_PROGRESS": 409,
    "FOLDER_LIMIT_REACHED": 409,
    "DUPLICATE": 409,
    "STALE_SOURCE": 409,
    "AUTHORITY_CONFLICT": 409,
    "IDEMPOTENCY_IN_PROGRESS": 409,
    "LOCK_BUSY": 409,
    "CURSOR_STALE": 409,
    "VERSION_CONFLICT": 412,
    "PAYLOAD_TOO_LARGE": 413,
    "UNSUPPORTED_MEDIA_TYPE": 415,
    "FIELD_UNKNOWN": 422,
    "FIELD_NOT_ALLOWED": 422,
    "FIELD_REQUIRED": 422,
    "EMPTY_PATCH": 422,
    "VALIDATION_FAILED": 422,
    "INVALID_TRANSITION": 422,
    "IDEMPOTENCY_MISMATCH": 422,
    "PRECONDITION_REQUIRED": 428,
    "IDEMPOTENCY_KEY_REQUIRED": 428,
    "RATE_LIMITED": 429,
    "AI_RATE_LIMITED": 429,
    "DEPENDENCY_UNAVAILABLE": 503,
    "MAINTENANCE": 503,
    "OUTCOME_UNKNOWN": 503,
    "TX_ABORT_UNCONFIRMED": 503,
    "TX_RETRY_EXHAUSTED": 503,
    "INTERNAL_CONTRACT_VIOLATION": 500
  },
  "servers": [
    {
      "url": "{baseUrl}",
      "description": "環境管理者が交付した基盤 HTTPS originへ置換。既定値は接続不能な説明用予約ドメイン。",
      "variables": {
        "baseUrl": {
          "default": "https://api.example.invalid",
          "description": "末尾スラッシュなしの、基盤のHTTPS origin。アプリや認証サービスのURLとは別。"
        }
      }
    }
  ],
  "x-language-policy": "ガイド・操作説明は日本語。プロトコル名・JSON識別子は原表記。schema内の既存技術補足は英語を併記する。",
  "x-availability-legend": {
    "提供中": "提供しています。環境での有効化と、権限は必要です。",
    "試験提供": "試験の段階です。仕様は変更されることがあります。利用する版を固定してください。",
    "環境による": "環境ごとに有効かどうかが異なります。環境管理者に確認してください。"
  },
  "tags": [
    {
      "name": "business",
      "description": "本人情報・既存業務"
    },
    {
      "name": "tables",
      "description": "顧客定義表 v1"
    },
    {
      "name": "workspaces",
      "description": "業務表・ケース v2"
    },
    {
      "name": "workspace-sockets",
      "description": "関連・所属・一括取引"
    },
    {
      "name": "assets",
      "description": "資産の保存と外部参照"
    },
    {
      "name": "service-access",
      "description": "サービス資格と権限管理"
    },
    {
      "name": "media",
      "description": "行の画像・添付"
    },
    {
      "name": "workspace-access",
      "description": "人物行とアクセス範囲"
    },
    {
      "name": "app-packages",
      "description": "アプリ配布契約と移行"
    },
    {
      "name": "organization",
      "description": "組織設定と運用履歴"
    },
    {
      "name": "apps",
      "description": "アプリ登録と状態"
    },
    {
      "name": "identity",
      "description": "本人セッション"
    },
    {
      "name": "health",
      "description": "稼働確認"
    }
  ],
  "x-error-code-usage": {
    "ASSET_REASON_REQUIRED": "documented_operation_response",
    "ASSET_INVALID": "documented_operation_response",
    "ASSET_INVALID_IMAGE": "documented_operation_response",
    "ASSET_FORBIDDEN": "documented_operation_response",
    "ASSET_POLICY_DENIED": "documented_operation_response",
    "ASSET_NOT_FOUND": "documented_operation_response",
    "ASSET_NO_THUMBNAIL": "documented_operation_response",
    "ASSET_VERSION_CONFLICT": "documented_operation_response",
    "ASSET_IDEMPOTENCY_MISMATCH": "documented_operation_response",
    "ASSET_POLICY_CHANGED": "documented_operation_response",
    "ASSET_PRECONDITION_REQUIRED": "documented_operation_response",
    "ASSET_TOO_LARGE": "documented_operation_response",
    "ASSET_QUOTA_EXCEEDED": "documented_operation_response",
    "ASSET_DEPENDENCY_UNAVAILABLE": "documented_operation_response",
    "ASSET_BUSY": "documented_operation_response",
    "ASSET_CAPACITY": "documented_operation_response",
    "BAD_REQUEST": "documented_operation_response",
    "ETAG_MALFORMED": "documented_operation_response",
    "SELF_DECLARED_HEADER": "documented_operation_response",
    "AUTH_REQUIRED": "documented_operation_response",
    "TOKEN_INVALID": "documented_operation_response",
    "TOKEN_EXPIRED": "documented_operation_response",
    "FORBIDDEN_ROLE": "documented_operation_response",
    "FIELD_NOT_WRITABLE": "documented_operation_response",
    "SCOPE_VIOLATION": "documented_operation_response",
    "MFA_REQUIRED": "documented_operation_response",
    "REAUTH_REQUIRED": "documented_operation_response",
    "AI_MUST_USE_PROPOSALS": "documented_operation_response",
    "AI_SUSPENDED": "documented_operation_response",
    "NOT_FOUND": "documented_operation_response",
    "STATE_CONFLICT": "documented_operation_response",
    "PROPOSAL_CONFLICT": "documented_operation_response",
    "OPERATION_IN_PROGRESS": "other_core_contract_not_mapped_to_public_operation",
    "FOLDER_LIMIT_REACHED": "other_core_contract_not_mapped_to_public_operation",
    "DUPLICATE": "documented_operation_response",
    "STALE_SOURCE": "other_core_contract_not_mapped_to_public_operation",
    "AUTHORITY_CONFLICT": "documented_operation_response",
    "IDEMPOTENCY_IN_PROGRESS": "documented_operation_response",
    "LOCK_BUSY": "documented_operation_response",
    "CURSOR_STALE": "documented_operation_response",
    "VERSION_CONFLICT": "documented_operation_response",
    "PAYLOAD_TOO_LARGE": "documented_operation_response",
    "UNSUPPORTED_MEDIA_TYPE": "documented_operation_response",
    "FIELD_UNKNOWN": "documented_operation_response",
    "FIELD_NOT_ALLOWED": "documented_operation_response",
    "FIELD_REQUIRED": "documented_operation_response",
    "EMPTY_PATCH": "documented_operation_response",
    "VALIDATION_FAILED": "documented_operation_response",
    "INVALID_TRANSITION": "documented_operation_response",
    "IDEMPOTENCY_MISMATCH": "documented_operation_response",
    "PRECONDITION_REQUIRED": "documented_operation_response",
    "IDEMPOTENCY_KEY_REQUIRED": "documented_operation_response",
    "RATE_LIMITED": "documented_operation_response",
    "AI_RATE_LIMITED": "documented_operation_response",
    "DEPENDENCY_UNAVAILABLE": "documented_operation_response",
    "MAINTENANCE": "documented_operation_response",
    "OUTCOME_UNKNOWN": "documented_operation_response",
    "TX_ABORT_UNCONFIRMED": "documented_operation_response",
    "TX_RETRY_EXHAUSTED": "documented_operation_response",
    "INTERNAL_CONTRACT_VIOLATION": "documented_operation_response"
  }
}
