{
  "openapi": "3.0.3",
  "info": {
    "title": "Axiom API 0.1.1 - Parties",
    "description": "Party, role, relationship, contact, identity, and party-group operations.",
    "version": "0.1.1",
    "contact": {
      "name": "Axiom Platform Team",
      "email": "hello@axiom.express"
    },
    "license": {
      "name": "Proprietary",
      "url": "https://axiom.express/license"
    }
  },
  "servers": [
    {
      "url": "https://api.afr-dev.axiom.express",
      "description": "Africa developer preview"
    }
  ],
  "security": [
    {
      "BearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "Party",
      "description": "Party management \u2014 individuals, organisations, brokers, agents, and providers.\nParties are the actors in the insurance lifecycle (policyholders, claimants,\nbeneficiaries, underwriters).\n\nPublic maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.",
      "x-axiom-public-maturity": {
        "availability": "developer-preview",
        "stability": "evolving",
        "response_profile": "endpoint-specific",
        "usage": "available",
        "published": true,
        "authorisation": "requires-issued-alpha-access-pack",
        "alpha_access_required": true,
        "production_ready": false,
        "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
      }
    },
    {
      "name": "Party Group",
      "description": "Composable party-grouping primitive under the governed contract. Groups can contain\nparties and other groups (polymorphic DAG membership), support static\nand dynamic (CEL-rule-driven) membership, and can hold roles in their\nown right without inheriting to member parties. Distinct from Policy\nGroup (governed contract) which groups policies for cover application.\n\nPublic maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.",
      "x-axiom-public-maturity": {
        "availability": "developer-preview",
        "stability": "evolving",
        "response_profile": "endpoint-specific",
        "usage": "available",
        "published": true,
        "authorisation": "requires-issued-alpha-access-pack",
        "alpha_access_required": true,
        "production_ready": false,
        "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
      }
    },
    {
      "name": "Payment",
      "description": "Payment processing \u2014 payment records and payment schedule management.\nSupports bank transfer, credit card, debit order, and other methods.\nStatus: pending \u2192 processing \u2192 completed \u2192 failed \u2192 cancelled.\n\nPublic maturity: Developer preview. This surface is available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0.",
      "x-axiom-public-maturity": {
        "availability": "developer-preview",
        "stability": "evolving",
        "response_profile": "endpoint-specific",
        "usage": "available",
        "published": true,
        "authorisation": "requires-issued-alpha-access-pack",
        "alpha_access_required": true,
        "production_ready": false,
        "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
      }
    }
  ],
  "paths": {
    "/v1/parties/role-types": {
      "get": {
        "operationId": "listRoleTypes",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "List distinct active role types",
        "description": "Returns the distinct role types that have at least one active (non-revoked) assignment\nfor the current tenant. Used by applications to dynamically build navigation based on\nwhat role types exist in the data.\n\n\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          }
        ],
        "responses": {
          "200": {
            "description": "Distinct role types",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoleTypeListResponse"
                },
                "example": {
                  "data": [
                    "beneficiary",
                    "broker",
                    "insured",
                    "policyholder"
                  ],
                  "meta": {
                    "total": 4
                  },
                  "status": "success"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "bounded-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "bounded-list",
          "request_parameters": [],
          "consumer_posture": "explicit-bounded-list",
          "exception": "This list is intentionally published as an API 0.1.1 bounded-list exception with no page traversal contract. Consumers must not infer cursor, offset, or full-history traversal semantics from this operation.",
          "response_metadata": [
            "meta.total"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/parties/role-types/usage": {
      "get": {
        "operationId": "listRoleTypeUsage",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Role-type usage counts",
        "description": "Returns each role type that has at least one active (non-revoked)\nassignment for the tenant, with the count of holders. Role types in the\nregistry with zero holders are not returned \u2014 pair with\n`GET /v1/parties/role-types` to render \"available but unused\" rows.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          }
        ],
        "responses": {
          "200": {
            "description": "Role-type usage counts",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RoleTypeUsageListResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "bounded-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "bounded-list",
          "request_parameters": [],
          "consumer_posture": "explicit-bounded-list",
          "exception": "This list is intentionally published as an API 0.1.1 bounded-list exception with no page traversal contract. Consumers must not infer cursor, offset, or full-history traversal semantics from this operation.",
          "response_metadata": [
            "meta.total"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/parties": {
      "post": {
        "description": "Register a party identity record that may later carry roles. A party is the foundational Axiom primitive anchoring all relationships \u2014 to covers, policies, premiums, and events. This contract creates the identity record; role assignment is a separate operation.",
        "operationId": "createParty",
        "parameters": [
          {
            "description": "Operating-tenant context (binding: operating_tenant).",
            "in": "header",
            "name": "X-Tenant-Context",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Request correlation ID (governed contract). Generated by the server if omitted; always echoed in the response.",
            "in": "header",
            "name": "X-Correlation-ID",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePartyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyResponse"
                }
              }
            },
            "description": "Party created successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Invalid request, including invalid lifecycle transition shape such as status=merged without merged_into_party_id"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Authentication required"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Insufficient permissions"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Server Error"
          }
        },
        "security": [
          {
            "BearerAuth": [
              "parties:register"
            ]
          }
        ],
        "summary": "Register Party",
        "tags": [
          "Party"
        ],
        "x-axiom-wire-success-profile": "json-api",
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "standard",
          "scopes": [
            "parties:register"
          ],
          "required_permissions": [
            "parties:register"
          ],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation",
            "scope-authorisation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      },
      "get": {
        "operationId": "listParties",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "List parties",
        "description": "Retrieve a paginated list of parties for the tenant.\nResults are sorted by created_at descending. Sort order is not configurable.\n\nSupports cursor-based pagination via page[size] and page[after] query parameters.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "page[size]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            },
            "description": "Maximum number of parties to return in this cursor page."
          },
          {
            "name": "page[after]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Opaque cursor returned as meta.next_cursor by the previous page."
          },
          {
            "name": "source_system",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/PartyExternalIDSourceSystem"
            },
            "description": "Exact external identifier source-system filter. Must be supplied together with external_id; unknown values return 400 INVALID_REQUEST with accepted values in the error detail."
          },
          {
            "name": "external_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "tenant-external-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Exact external identifier filter. Must be supplied together with source_system so bare external_id cannot create ambiguous identity resolution."
          }
        ],
        "responses": {
          "200": {
            "description": "Parties retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyListResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "cursor",
          "filter_profile": "explicit-filters"
        },
        "x-axiom-pagination-contract": {
          "profile": "cursor",
          "request_parameters": [
            "page[size]",
            "page[after]"
          ],
          "consumer_posture": "cursor-page",
          "response_metadata": [
            "meta.next_cursor",
            "meta.page_size"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "explicit-filters",
          "filter_parameters": [
            "source_system",
            "external_id"
          ]
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/parties/{id}": {
      "get": {
        "operationId": "getParty",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Get a party by ID",
        "description": "Retrieve a single party by its unique identifier, including any assigned roles.\nWhen as_of or recorded_at is supplied, the response replays the party from\nthe immutable party history substrate using effective time and recorded time\nas-was semantics.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          },
          {
            "name": "as_of",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "RFC3339 effective-time timestamp for party history replay. Defaults to current effective time."
          },
          {
            "name": "recorded_at",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "RFC3339 recorded-time timestamp for as-was party history replay. Defaults to the latest recorded version."
          }
        ],
        "responses": {
          "200": {
            "description": "Party retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "explicit-filters"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "explicit-filters",
          "filter_parameters": [
            "recorded_at"
          ]
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      },
      "put": {
        "operationId": "updateParty",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Update a party",
        "description": "Update an existing party's attributes and/or status.\nAttribute updates are merged with existing attributes (partial update semantics).\n\nSide effects: updates the party record; emits an audit entry recording the change.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePartyRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Party updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/parties/{id}/roles": {
      "get": {
        "operationId": "getPartyRoles",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Get roles assigned to a party",
        "description": "Retrieve all role assignments for a party across policies, claims, and other entities.\nEach role includes the context (entity type and ID) it is scoped to.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          }
        ],
        "responses": {
          "200": {
            "description": "Party roles retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyRoleListResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      },
      "post": {
        "operationId": "addPartyRole",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Assign a role to a party",
        "description": "Assign a new role to a party, scoped to a specific entity (e.g. a policy,\nclaim, product, organization, policy item, or PartyGroup). For sponsor\nrole assignments on a group context, the sponsor remains the Party role\nassignee and the PartyGroup is identified by entity_type=group/entity_id.\nOnly one active sponsor is allowed per tenant/group context; duplicate\nactive sponsor attempts return SPONSOR_CARDINALITY_VIOLATED (HTTP 409).\n\nA party can hold multiple roles simultaneously, and the same party can hold\ndifferent roles on different entities.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "role_type",
                  "entity_type",
                  "entity_id",
                  "assigned_by"
                ],
                "properties": {
                  "role_type": {
                    "type": "string",
                    "enum": [
                      "policyholder",
                      "beneficiary",
                      "dependent",
                      "insured",
                      "claimant",
                      "third_party_claimant",
                      "assessor",
                      "broker",
                      "agent",
                      "underwriter",
                      "administrator",
                      "compliance_officer",
                      "interested_party",
                      "driver",
                      "registered_owner",
                      "uma",
                      "sponsor",
                      "accepted_provider_network"
                    ],
                    "description": "The role to assign"
                  },
                  "entity_type": {
                    "type": "string",
                    "enum": [
                      "policy",
                      "claim",
                      "organization",
                      "product",
                      "policy_item",
                      "group"
                    ],
                    "description": "The type of entity this role is scoped to"
                  },
                  "entity_id": {
                    "type": "string",
                    "format": "typed-prefix-id",
                    "description": "The identifier of the entity this role is scoped to",
                    "x-axiom-identifier-shape": "typed-prefix"
                  },
                  "assigned_by": {
                    "type": "string",
                    "description": "Identifier of the user or service assigning this role"
                  },
                  "attributes": {
                    "type": "object",
                    "additionalProperties": true,
                    "nullable": true,
                    "description": "Optional attributes for the role assignment"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Role assigned successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyRoleResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/parties/{id}/contacts": {
      "get": {
        "operationId": "listPartyContacts",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "List contacts for a party",
        "description": "Retrieve all contact records associated with a party. A party may have multiple\ncontacts (e.g. personal email, work email, mobile, landline).\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          }
        ],
        "responses": {
          "200": {
            "description": "Contacts retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyContactListResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "bounded-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "bounded-list",
          "request_parameters": [],
          "consumer_posture": "explicit-bounded-list",
          "exception": "This list is intentionally published as an API 0.1.1 bounded-list exception with no page traversal contract. Consumers must not infer cursor, offset, or full-history traversal semantics from this operation.",
          "response_metadata": [
            "meta.total"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      },
      "post": {
        "operationId": "createPartyContact",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Add a contact to a party",
        "description": "Create a new contact record for a party. Each contact includes an email address,\nphone number, and/or preferred contact method. Parties in opted_out status reject\nnew contact capture with a 409 while historical contact reads remain available.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactInfo"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Contact created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyContactResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/parties/{id}/contacts/{contactId}": {
      "put": {
        "operationId": "updatePartyContact",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Update a party contact",
        "description": "Update an existing contact record for a party.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          },
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id"
            },
            "description": "Unique contact identifier"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactInfo"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Contact updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyContactResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      },
      "delete": {
        "operationId": "deletePartyContact",
        "summary": "Delete a party contact",
        "description": "Remove a contact record from a party.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          },
          {
            "name": "contactId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id"
            },
            "description": "Unique contact identifier"
          }
        ],
        "responses": {
          "204": {
            "description": "Contact deleted successfully"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "bare",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "bare",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/parties/{id}/identities": {
      "get": {
        "operationId": "listPartyIdentities",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "List identity documents for a party",
        "description": "Retrieve all identity documents associated with a party (e.g. passport, national ID,\ntax number, company registration). Each identity has a verification status.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          }
        ],
        "responses": {
          "200": {
            "description": "Identities retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyIdentityListResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "bounded-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "bounded-list",
          "request_parameters": [],
          "consumer_posture": "explicit-bounded-list",
          "exception": "This list is intentionally published as an API 0.1.1 bounded-list exception with no page traversal contract. Consumers must not infer cursor, offset, or full-history traversal semantics from this operation.",
          "response_metadata": [
            "meta.total"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      },
      "post": {
        "operationId": "createPartyIdentity",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Add an identity document to a party",
        "description": "Register a new identity document for a party. The identity is created in\n\"unverified\" status and must be verified separately via the verify endpoint.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "identity_type",
                  "identity_value"
                ],
                "properties": {
                  "identity_type": {
                    "type": "string",
                    "description": "Type of identity document"
                  },
                  "identity_value": {
                    "type": "string",
                    "description": "The identity document number or value"
                  },
                  "issuing_country": {
                    "type": "string",
                    "pattern": "^[A-Z]{2}$",
                    "description": "ISO 3166-1 alpha-2 country code of issuing authority"
                  },
                  "expiry_date": {
                    "type": "string",
                    "format": "date",
                    "nullable": true,
                    "description": "Expiry date of the identity document"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Identity document created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyIdentityResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/parties/{id}/identities/{identityId}/verify": {
      "post": {
        "operationId": "verifyPartyIdentity",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Verify a party identity document",
        "description": "Mark an identity document as verified. This records the verification timestamp\nand transitions the identity status from \"unverified\" to \"verified\".\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          },
          {
            "name": "identityId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id"
            },
            "description": "Unique identity document identifier"
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "verification_method": {
                    "type": "string",
                    "description": "Method used for verification (e.g. manual, electronic, biometric)"
                  },
                  "verified_by": {
                    "type": "string",
                    "description": "Identifier of the user or service performing verification"
                  },
                  "notes": {
                    "type": "string",
                    "nullable": true,
                    "description": "Optional notes about the verification"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Identity verified successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyIdentityResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/parties/{id}/relationships": {
      "get": {
        "operationId": "getPartyRelationships",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "List relationships for a party",
        "description": "Retrieve relationships for a party. The view parameter selects the response shape:\n\n- list (default): returns all active relationships as a flat array of relationship objects.\n- distribution_chain: traverses the distribution chain from this party, returning\n  participants and an explanation tree (governed contract).\n\nAn unrecognised view value returns 400 INVALID_REQUEST under the governed contract.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "list",
                "distribution_chain"
              ],
              "default": "list"
            },
            "description": "Response view type. Unknown values return 400 INVALID_REQUEST under the governed contract."
          },
          {
            "name": "as_of",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "Point-in-time filter for relationships (ISO 8601). Defaults to current time."
          },
          {
            "name": "relationship_type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated relationship type filter (e.g. broker,agent)."
          },
          {
            "name": "max_depth",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 16
            },
            "description": "Maximum traversal depth for view=distribution_chain (1-16). Ignored for view=list."
          }
        ],
        "responses": {
          "200": {
            "description": "Relationships retrieved successfully. Shape depends on the view parameter.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/PartyRelationshipListResponse"
                    },
                    {
                      "$ref": "#/components/schemas/PartyDistributionChainResponse"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "explicit-filters"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "explicit-filters",
          "filter_parameters": [
            "relationship_type",
            "max_depth"
          ]
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      },
      "post": {
        "operationId": "createPartyRelationship",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Create a relationship between two parties",
        "description": "Creates a directed relationship from the identified party (from_party_id) to another\nparty (to_party_id). On success, returns 201 Created with the new relationship resource.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "to_party_id",
                  "relationship_type"
                ],
                "properties": {
                  "to_party_id": {
                    "type": "string",
                    "format": "typed-prefix-id",
                    "description": "Target party for the relationship",
                    "x-axiom-identifier-shape": "typed-prefix"
                  },
                  "relationship_type": {
                    "type": "string",
                    "description": "Relationship type token (e.g. broker, underwriter, agent)"
                  },
                  "effective_from": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true,
                    "description": "Relationship valid-from timestamp (ISO 8601). Defaults to now."
                  },
                  "effective_to": {
                    "type": "string",
                    "format": "date-time",
                    "nullable": true,
                    "description": "Relationship expiry timestamp. Null means open-ended."
                  },
                  "metadata": {
                    "type": "object",
                    "additionalProperties": true,
                    "nullable": true,
                    "description": "Optional key-value metadata for the relationship"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Relationship created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyRelationshipResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/parties/{id}/relationships/{relId}": {
      "delete": {
        "operationId": "deletePartyRelationship",
        "summary": "Delete (deactivate) a party relationship",
        "description": "Temporally deactivates a relationship by setting its effective_to to now.\nIdempotent \u2014 deactivating an already inactive relationship returns 204.\n\nBody `{\"reason\": \"...\"}` is required (non-blank after trim) per .\nBlank reason returns 400 PARTY_DEACTIVATION_REASON_REQUIRED.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          },
          {
            "name": "relId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id"
            },
            "description": "Unique relationship identifier"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "reason"
                ],
                "properties": {
                  "reason": {
                    "type": "string",
                    "description": "Non-blank rationale for the deactivation. Recorded on the audit record under the governed contract."
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Relationship deleted (deactivated) successfully"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "bare",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "bare",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/parties/{id}/party-groups": {
      "parameters": [
        {
          "$ref": "#/components/parameters/TenantIdHeader"
        },
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "pty_01arz3ndektsv4rrffq69g5fav",
            "x-axiom-identifier-shape": "typed-prefix"
          }
        }
      ],
      "get": {
        "operationId": "listGroupsForParty",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "List party groups containing this party",
        "description": "Inverse projection \u2014 returns the groups the given party is a member\nof as of `as_of`. Distinct from `/v1/parties/:id/groups` which\nreturns Policy Group (governed contract) memberships.\n",
        "tags": [
          "Party",
          "Party Group"
        ],
        "parameters": [
          {
            "name": "as_of",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Groups the party belongs to",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyGroupListResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "bounded-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "bounded-list",
          "request_parameters": [],
          "consumer_posture": "explicit-bounded-list",
          "exception": "This list is intentionally published as an API 0.1.1 bounded-list exception with no page traversal contract. Consumers must not infer cursor, offset, or full-history traversal semantics from this operation.",
          "response_metadata": [
            "meta.total"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/parties/{id}/groups": {
      "get": {
        "operationId": "listPartyPolicyGroups",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "List the policy-driven groups a party belongs to",
        "description": "Returns the **transitive** policy-group membership view for a party: the\ngroups the party belongs to by virtue of a policy binding, each annotated\nwith the `via_policy_id` that confers the membership. This is distinct\nfrom `/v1/parties/{id}/party-groups` (first-class, directly-assigned\nparty-group memberships) \u2014 here membership is derived from policy\nparticipation, not a direct grouping assignment.\n\nPoint-in-time: pass `as_of` (RFC3339) to resolve membership as it stood at\nthat instant; defaults to now.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            }
          },
          {
            "name": "as_of",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "Resolve membership as-of this instant (RFC3339). Defaults to now."
          }
        ],
        "responses": {
          "200": {
            "description": "Policy-driven group memberships for the party",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyPolicyGroupListResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "bounded-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "bounded-list",
          "request_parameters": [],
          "consumer_posture": "explicit-bounded-list",
          "exception": "This list is intentionally published as an API 0.1.1 bounded-list exception with no page traversal contract. Consumers must not infer cursor, offset, or full-history traversal semantics from this operation.",
          "response_metadata": [
            "meta.total"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/parties/{id}/payments": {
      "get": {
        "operationId": "getPartyPayments",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "List payments for a party",
        "description": "Retrieves a paginated list of payments associated with a specific party.\nReturns only payments explicitly linked to the party via `party_id`.\nPayments without party linkage (null `party_id`) are excluded.\n\nResults are sorted by created_at descending with id as a stable\ntie-breaker. Use `page[size]` and `page[after]` for pagination. Legacy\n`limit` and `offset` query parameters are rejected.\n",
        "tags": [
          "Party",
          "Payment"
        ],
        "parameters": [
          {
            "name": "X-Tenant-Context",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tenant-context token (TCT) from POST /v1/me/tenant-context (governed contract)"
          },
          {
            "name": "X-Correlation-ID",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string",
              "x-axiom-identifier-classification": "opaque-resource-id",
              "x-axiom-identifier-shape": "alpha-exception",
              "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
            },
            "description": "Request correlation ID for tracing"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "typed-prefix-id",
              "x-axiom-identifier-shape": "typed-prefix"
            },
            "description": "Unique party identifier"
          },
          {
            "name": "page[size]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            },
            "description": "Maximum number of payments to return"
          },
          {
            "name": "page[after]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Opaque cursor returned as `meta.next_cursor` by the previous page."
          }
        ],
        "responses": {
          "200": {
            "description": "Party payments retrieved successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyPaymentListResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "cursor",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "cursor",
          "request_parameters": [
            "page[size]",
            "page[after]"
          ],
          "consumer_posture": "cursor-page",
          "response_metadata": [
            "meta.next_cursor",
            "meta.page_size"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/parties/{id}/audit": {
      "parameters": [
        {
          "$ref": "#/components/parameters/TenantIdHeader"
        },
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "typed-prefix-id",
            "x-axiom-identifier-shape": "typed-prefix"
          }
        }
      ],
      "get": {
        "operationId": "listPartyAudit",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Chronological audit feed for a party",
        "description": "Returns the per-party audit feed in chronological order\n(`performed_at DESC`). Each event carries governed contract actor attribution\n(`actor_id` / `actor_type` / `actor_original_id`) regardless of\nwriter path. The reader merges persistence-managed records and application writes\nso the consumer sees a single shape.\n\nExplanation enrichment fields (`decision_id`, `rule_versions`,\n`inputs`) are populated for rules-evaluation records only and\nempty otherwise (preview placeholder).\n\nUse `page[size]` and `page[after]` for cursor pagination. Legacy\n`limit` and `offset` query parameters are rejected by the runtime.\n",
        "tags": [
          "Party"
        ],
        "parameters": [
          {
            "name": "page[size]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 200
            },
            "description": "Maximum number of audit entries to return in this cursor page."
          },
          {
            "name": "page[after]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Opaque cursor returned as `meta.next_cursor` by the previous page."
          }
        ],
        "responses": {
          "200": {
            "description": "Audit feed for this party",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyAuditListResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "cursor",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "cursor",
          "request_parameters": [
            "page[size]",
            "page[after]"
          ],
          "consumer_posture": "cursor-page",
          "response_metadata": [
            "meta.next_cursor",
            "meta.page_size"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/party-groups/{id}/audit": {
      "parameters": [
        {
          "$ref": "#/components/parameters/TenantIdHeader"
        },
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "plg_01arz3ndektsv4rrffq69g5fav",
            "x-axiom-identifier-shape": "typed-prefix"
          }
        }
      ],
      "get": {
        "operationId": "listPartyGroupAudit",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Chronological audit feed for a party group",
        "description": "Returns the per-group audit feed in chronological order\n(`performed_at DESC`). party_groups + party_group_memberships have\nno persistence-managed records, so every row is generated by the\napplication's `NewAuditRecord` path with a `party.group_*`\noperation code.\n\nResponse shape mirrors `/v1/parties/{id}/audit` \u2014 see that endpoint\nfor the full `AuditEntry` field list.\n\nUse `page[size]` and `page[after]` for cursor pagination. Legacy\n`limit` and `offset` query parameters are rejected by the runtime.\n",
        "tags": [
          "Party Group"
        ],
        "parameters": [
          {
            "name": "page[size]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 50,
              "minimum": 1,
              "maximum": 200
            },
            "description": "Maximum number of audit entries to return in this cursor page."
          },
          {
            "name": "page[after]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Opaque cursor returned as `meta.next_cursor` by the previous page."
          }
        ],
        "responses": {
          "200": {
            "description": "Audit feed for this party group",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyGroupAuditListResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "cursor",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "cursor",
          "request_parameters": [
            "page[size]",
            "page[after]"
          ],
          "consumer_posture": "cursor-page",
          "response_metadata": [
            "meta.next_cursor",
            "meta.page_size"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/party-groups": {
      "get": {
        "operationId": "listPartyGroups",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "List party groups",
        "description": "Returns party groups for the tenant with cursor pagination. Results are\nordered by created_at descending with id as a stable tiebreaker. Supports\na free-text search via `q` (3-character minimum under the governed contract).\n",
        "tags": [
          "Party Group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/TenantIdHeader"
          },
          {
            "name": "page[size]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            },
            "description": "Maximum number of party groups to return in this cursor page."
          },
          {
            "name": "page[after]",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Opaque cursor returned as `meta.next_cursor` by the previous page."
          },
          {
            "name": "q",
            "in": "query",
            "description": "Search across display_name, id, external_id (min 3 chars, governed contract)",
            "schema": {
              "type": "string",
              "minLength": 3
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Party group list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyGroupListResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "cursor",
          "filter_profile": "explicit-filters"
        },
        "x-axiom-pagination-contract": {
          "profile": "cursor",
          "request_parameters": [
            "page[size]",
            "page[after]"
          ],
          "consumer_posture": "cursor-page",
          "response_metadata": [
            "meta.next_cursor",
            "meta.page_size"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "explicit-filters",
          "filter_parameters": [
            "q"
          ]
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      },
      "post": {
        "operationId": "createPartyGroup",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Create a party group",
        "description": "Creates a static or dynamic party group. For dynamic groups,\n`membership_rule_id` is required and must reference a rule of type\n`party_grouping` in the shared rules catalog (fail-loud; 400 on\ninvalid reference). Idempotent via standard Idempotency-Key header.\n",
        "tags": [
          "Party Group"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/TenantIdHeader"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePartyGroupRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyGroupResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/party-groups/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/TenantIdHeader"
        },
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "plg_01arz3ndektsv4rrffq69g5fav",
            "x-axiom-identifier-shape": "typed-prefix"
          }
        }
      ],
      "get": {
        "operationId": "getPartyGroup",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Get a party group with its active members",
        "description": "Returns the group and its active memberships as of `as_of` (defaults\nto now). Members include both party-type and group-type (developer preview\npolymorphic DAG) \u2014 callers must discriminate on `member_type`.\n",
        "tags": [
          "Party Group"
        ],
        "parameters": [
          {
            "name": "as_of",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Group + members",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyGroupDetailResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      },
      "put": {
        "operationId": "updatePartyGroup",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Update display_name / description / status",
        "description": "Partial update \u2014 only supplied fields are changed. Soft-delete is\nachieved via setting status to `inactive` here OR calling DELETE.\n",
        "tags": [
          "Party Group"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePartyGroupRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyGroupResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      },
      "delete": {
        "operationId": "deletePartyGroup",
        "summary": "Soft delete (status \u2192 inactive)",
        "description": "Soft-delete \u2014 flips status to `inactive`. The group row and its\nmemberships are preserved for audit under the governed contract. There is no hard\ndelete.\n",
        "tags": [
          "Party Group"
        ],
        "responses": {
          "204": {
            "description": "Deleted (soft)"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "bare",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "bare",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/party-groups/{id}/members": {
      "parameters": [
        {
          "$ref": "#/components/parameters/TenantIdHeader"
        },
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "plg_01arz3ndektsv4rrffq69g5fav",
            "x-axiom-identifier-shape": "typed-prefix"
          }
        }
      ],
      "post": {
        "operationId": "addPartyGroupMember",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Add a party or group as a member",
        "description": "Body must supply exactly one of `party_id` or `group_id`. Neither or\nboth \u2192 400. Cycle detection happens at read time (bounded traversal, governed contract) \u2014 writes do not block cyclic membership.\nIdempotent on (group, member_type, member_id) when a membership is\nalready open.\n",
        "tags": [
          "Party Group"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddPartyGroupMemberRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Member added",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyGroupMembershipResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/party-groups/{id}/members/{partyId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/TenantIdHeader"
        },
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "plg_01arz3ndektsv4rrffq69g5fav",
            "x-axiom-identifier-shape": "typed-prefix"
          }
        },
        {
          "name": "partyId",
          "in": "path",
          "required": true,
          "description": "Member id. The path parameter is named `partyId` for legacy reasons;\nthe endpoint accepts both party-member-ids and group-member-ids\n(developer preview \u2014 any member_id regardless of type).\n",
          "schema": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "pty_01arz3ndektsv4rrffq69g5fav"
          }
        }
      ],
      "delete": {
        "operationId": "removePartyGroupMember",
        "summary": "Close a member's open window (sets valid_to = now)",
        "description": "Idempotent \u2014 if no open membership exists, returns 204 without error.\nDoes not hard-delete the membership row; the closed window is\npreserved for audit (governed contract).\n",
        "tags": [
          "Party Group"
        ],
        "responses": {
          "204": {
            "description": "Membership closed (or no-op if already closed)"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "bare",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "bare",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/party-groups/{id}/flat-members": {
      "parameters": [
        {
          "$ref": "#/components/parameters/TenantIdHeader"
        },
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "plg_01arz3ndektsv4rrffq69g5fav",
            "x-axiom-identifier-shape": "typed-prefix"
          }
        }
      ],
      "get": {
        "operationId": "listPartyGroupFlatMembers",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "List all party members reachable via recursive expansion",
        "description": "Recursively walks the membership DAG and returns every party that is\nreachable \u2014 de-duplicated by party_id. Uses bounded traversal with a\ncycle guard (governed contract): diamonds are de-duped, cycles are\nshort-circuited.\n",
        "tags": [
          "Party Group"
        ],
        "parameters": [
          {
            "name": "as_of",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "max_depth",
            "in": "query",
            "description": "BFS depth cap [1, 16]. Server returns 400 for out-of-range. 0 or omitted \u2192 default (4).",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 16
            }
          }
        ],
        "responses": {
          "200": {
            "description": "De-duplicated flat member list with paths",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyGroupFlatMemberListResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "bounded-list",
          "filter_profile": "explicit-filters"
        },
        "x-axiom-pagination-contract": {
          "profile": "bounded-list",
          "request_parameters": [],
          "consumer_posture": "explicit-bounded-list",
          "exception": "This list is intentionally published as an API 0.1.1 bounded-list exception with no page traversal contract. Consumers must not infer cursor, offset, or full-history traversal semantics from this operation.",
          "response_metadata": [
            "meta.total"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "explicit-filters",
          "filter_parameters": [
            "max_depth"
          ]
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/party-groups/{id}/ancestors": {
      "parameters": [
        {
          "$ref": "#/components/parameters/TenantIdHeader"
        },
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "plg_01arz3ndektsv4rrffq69g5fav",
            "x-axiom-identifier-shape": "typed-prefix"
          }
        }
      ],
      "get": {
        "operationId": "listPartyGroupAncestors",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "List groups that transitively contain this group",
        "description": "BFS upward through the membership DAG up to `max_depth`.",
        "tags": [
          "Party Group"
        ],
        "parameters": [
          {
            "name": "as_of",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "max_depth",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 16
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Ancestor groups",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyGroupListResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "bounded-list",
          "filter_profile": "explicit-filters"
        },
        "x-axiom-pagination-contract": {
          "profile": "bounded-list",
          "request_parameters": [],
          "consumer_posture": "explicit-bounded-list",
          "exception": "This list is intentionally published as an API 0.1.1 bounded-list exception with no page traversal contract. Consumers must not infer cursor, offset, or full-history traversal semantics from this operation.",
          "response_metadata": [
            "meta.total"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "explicit-filters",
          "filter_parameters": [
            "max_depth"
          ]
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/party-groups/{id}/descendants": {
      "parameters": [
        {
          "$ref": "#/components/parameters/TenantIdHeader"
        },
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "plg_01arz3ndektsv4rrffq69g5fav",
            "x-axiom-identifier-shape": "typed-prefix"
          }
        }
      ],
      "get": {
        "operationId": "listPartyGroupDescendants",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "List groups transitively contained by this group",
        "description": "BFS downward through the membership DAG up to `max_depth`.",
        "tags": [
          "Party Group"
        ],
        "parameters": [
          {
            "name": "as_of",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "max_depth",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 16
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Descendant groups",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyGroupListResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "bounded-list",
          "filter_profile": "explicit-filters"
        },
        "x-axiom-pagination-contract": {
          "profile": "bounded-list",
          "request_parameters": [],
          "consumer_posture": "explicit-bounded-list",
          "exception": "This list is intentionally published as an API 0.1.1 bounded-list exception with no page traversal contract. Consumers must not infer cursor, offset, or full-history traversal semantics from this operation.",
          "response_metadata": [
            "meta.total"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "explicit-filters",
          "filter_parameters": [
            "max_depth"
          ]
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/party-groups/{id}/evaluate": {
      "parameters": [
        {
          "$ref": "#/components/parameters/TenantIdHeader"
        },
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "plg_01arz3ndektsv4rrffq69g5fav",
            "x-axiom-identifier-shape": "typed-prefix"
          }
        }
      ],
      "post": {
        "operationId": "evaluatePartyGroupMembership",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Dry-run evaluate a party against a dynamic group's rule",
        "description": "Read-only evaluation \u2014 calls the membership-rule evaluator and\nreturns `is_member` plus an explanation summary. Does NOT persist\nmembership. Only valid for `group_type = dynamic`; static groups\nreturn 400. Classification: `intentional_exception` in the\npost-route manifest (POST that doesn't mutate).\n",
        "tags": [
          "Party Group"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EvaluatePartyGroupRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Evaluation result",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyGroupEvaluationResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/party-groups/{id}/roles": {
      "parameters": [
        {
          "$ref": "#/components/parameters/TenantIdHeader"
        },
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "plg_01arz3ndektsv4rrffq69g5fav",
            "x-axiom-identifier-shape": "typed-prefix"
          }
        }
      ],
      "get": {
        "operationId": "listPartyGroupRoles",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "List roles held directly by this group",
        "description": "Returns roles where this group is the assignee (`assignee_type =\ngroup`). under the governed contract there is NO automatic inheritance \u2014\nthese roles do not flow to member parties.\n",
        "tags": [
          "Party Group"
        ],
        "responses": {
          "200": {
            "description": "Roles held by the group",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyGroupRoleListResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "bounded-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "bounded-list",
          "request_parameters": [],
          "consumer_posture": "explicit-bounded-list",
          "exception": "This list is intentionally published as an API 0.1.1 bounded-list exception with no page traversal contract. Consumers must not infer cursor, offset, or full-history traversal semantics from this operation.",
          "response_metadata": [
            "meta.total"
          ]
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": false,
          "read_allowed": true,
          "write_allowed": false,
          "agent_invocation": "safe-read",
          "tenant_context": "required",
          "idempotency_required": false,
          "retry_automation": "safe-read-policy-required",
          "source": "generated-public-openapi-profile"
        }
      },
      "post": {
        "operationId": "assignPartyGroupRole",
        "x-axiom-wire-success-profile": "json-api",
        "summary": "Assign a role to the group",
        "description": "Assigns a role with the group as assignee. Idempotent via\nIdempotency-Key.\n\nFor role_type=accepted_provider_network:\n- Assignee group must have composition_type=provider_network \u2192 422 INVALID_ASSIGNMENT otherwise.\n- Context entity_type must be product \u2192 context entity_id must reference an\n  existing product in the tenant \u2192 404 PRODUCT_CONTEXT_NOT_FOUND if missing.\n- Overlapping active windows on the same (group, role_type, product) tuple\n  return 409 NETWORK_ROLE_ALREADY_ACTIVE.\n",
        "tags": [
          "Party Group"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignGroupRoleRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Role assigned",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartyGroupRoleResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "json-api",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "json-api",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    },
    "/v1/party-groups/{id}/roles/{roleId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/TenantIdHeader"
        },
        {
          "name": "id",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "plg_01arz3ndektsv4rrffq69g5fav",
            "x-axiom-identifier-shape": "typed-prefix"
          }
        },
        {
          "name": "roleId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "plg_01arz3ndektsv4rrffq69g5fav"
          }
        }
      ],
      "delete": {
        "operationId": "revokePartyGroupRole",
        "summary": "Revoke a role held by the group",
        "description": "Closes the role assignment with an optional reason supplied as a\nJSON body `{reason: \"...\"}`.\n",
        "tags": [
          "Party Group"
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reason": {
                    "type": "string"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Role revoked"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "x-axiom-public-maturity": {
          "availability": "developer-preview",
          "stability": "evolving",
          "response_profile": "bare",
          "usage": "available",
          "published": true,
          "authorisation": "requires-issued-alpha-access-pack",
          "alpha_access_required": true,
          "production_ready": false,
          "note": "Available to admitted alpha consumers when their issued access pack grants authority; breaking changes remain possible before 1.0.0."
        },
        "x-axiom-contract-consistency": {
          "response_profile": "bare",
          "error_profile": "json-api",
          "pagination_profile": "not-list",
          "filter_profile": "none"
        },
        "x-axiom-pagination-contract": {
          "profile": "not-list",
          "request_parameters": [],
          "consumer_posture": "not-list"
        },
        "x-axiom-filter-contract": {
          "profile": "none",
          "filter_parameters": []
        },
        "x-axiom-auth-contract": {
          "bearer": "required",
          "scope_profile": "none",
          "scopes": [],
          "required_permissions": [],
          "permission_runtime_posture": "alpha-posture",
          "tenant_context": "required",
          "tenant_context_authority": "server-minted-X-Tenant-Context",
          "client_supplied_tenant_id_authority": "forbidden",
          "failure_order": [
            "bearer-authentication",
            "tenant-context-validation"
          ]
        },
        "x-axiom-operational-limits": {
          "upload": {
            "mode": "not-upload"
          },
          "rate_limit": {
            "posture": "not-published",
            "exception": "API 0.1.1 does not publish a per-operation rate-limit commitment."
          }
        },
        "x-axiom-operation-safety": {
          "mutation": true,
          "read_allowed": false,
          "write_allowed": false,
          "agent_invocation": "restricted-mutation",
          "tenant_context": "required",
          "idempotency_required": true,
          "retry_automation": "forbidden-for-mutation",
          "source": "generated-public-openapi-profile"
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "JWT token obtained from authentication service"
      }
    },
    "parameters": {
      "TenantIdHeader": {
        "name": "X-Tenant-Context",
        "in": "header",
        "required": true,
        "description": "Server-minted tenant-context token (TCT) in request header.\n\n**Required** for all tenant-scoped requests. Obtain it from\n`POST /v1/me/tenant-context` after discovering accessible tenants via\n`GET /v1/me/tenants`. The TCT is a short-lived HMAC-signed token that\ncarries the selected tenant and the authenticated account subject; the\nclient-supplied tenant selectors are not accepted.\n\nThe API verifies the token, confirms it belongs to the authenticated actor, re-checks the live grant, and applies tenant isolation for the request.\n",
        "schema": {
          "type": "string"
        },
        "example": "<tenant-context token from POST /v1/me/tenant-context>"
      }
    },
    "schemas": {
      "AddPartyGroupMemberRequest": {
        "type": "object",
        "description": "Exactly one of party_id or group_id must be supplied. Passing neither\nor both is rejected with 400. fail-loud.\n",
        "properties": {
          "party_id": {
            "type": "string",
            "format": "uuid",
            "x-axiom-identifier-shape": "uuid"
          },
          "group_id": {
            "type": "string",
            "format": "uuid",
            "x-axiom-identifier-shape": "uuid"
          },
          "valid_from": {
            "type": "string",
            "format": "date-time",
            "description": "Defaults to now() server-side when omitted"
          }
        },
        "additionalProperties": false
      },
      "AssignGroupRoleRequest": {
        "type": "object",
        "required": [
          "role_type",
          "context"
        ],
        "properties": {
          "role_type": {
            "type": "string",
            "enum": [
              "sponsor",
              "provider",
              "beneficiary",
              "accepted_provider_network"
            ],
            "example": "accepted_provider_network"
          },
          "context": {
            "type": "object",
            "required": [
              "entity_type",
              "entity_id"
            ],
            "properties": {
              "entity_type": {
                "type": "string",
                "enum": [
                  "policy",
                  "claim",
                  "organization",
                  "product",
                  "policy_item"
                ],
                "example": "product"
              },
              "entity_id": {
                "type": "string",
                "example": "CM-MED-01",
                "x-axiom-identifier-classification": "opaque-resource-id",
                "x-axiom-identifier-shape": "alpha-exception",
                "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
              }
            },
            "additionalProperties": false
          },
          "effective_from": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "ContactInfo": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "description": "Email address"
          },
          "phone": {
            "type": "string",
            "pattern": "^\\+?[1-9]\\d{1,14}$",
            "description": "Phone number in E.164 format"
          },
          "preferred_contact_method": {
            "type": "string",
            "enum": [
              "email",
              "phone",
              "mail"
            ],
            "description": "Preferred contact method"
          }
        },
        "additionalProperties": false
      },
      "CreatePartyGroupRequest": {
        "type": "object",
        "required": [
          "display_name"
        ],
        "properties": {
          "group_type": {
            "type": "string",
            "enum": [
              "static",
              "dynamic"
            ],
            "description": "Defaults to static when omitted"
          },
          "display_name": {
            "type": "string",
            "minLength": 1
          },
          "description": {
            "type": "string"
          },
          "external_id": {
            "type": "string",
            "x-axiom-identifier-classification": "tenant-external-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "id_namespace": {
            "type": "string",
            "default": "tenant"
          },
          "membership_rule_id": {
            "type": "string",
            "description": "Required when group_type = dynamic",
            "example": "rule-party-age-over-18",
            "x-axiom-identifier-classification": "rule-reference",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          }
        },
        "additionalProperties": false
      },
      "CreatePartyRequest": {
        "type": "object",
        "required": [
          "party_type",
          "attributes"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "typed-prefix-id",
            "description": "Optional client-provided identifier. If omitted, the server generates one.",
            "example": "pty_01j9zxkp8wqrm2n4v6t5s3d7f1",
            "x-axiom-identifier-shape": "typed-prefix"
          },
          "party_type": {
            "type": "string",
            "enum": [
              "individual",
              "organization",
              "agent",
              "provider",
              "broker"
            ],
            "description": "Classification of the party",
            "example": "individual"
          },
          "external_id": {
            "type": "string",
            "description": "External identifier from source_system. If supplied, source_system is required.",
            "example": "BRK-000123",
            "x-axiom-identifier-classification": "tenant-external-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "source_system": {
            "$ref": "#/components/schemas/PartyExternalIDSourceSystem"
          },
          "attributes": {
            "type": "object",
            "additionalProperties": true,
            "description": "Party-specific data (name, contact details, identifiers, etc.)",
            "example": {
              "first_name": "Takeshi",
              "last_name": "Yamamoto",
              "email": "t.yamamoto@example.jp",
              "phone": "+81312345678"
            }
          },
          "created_by": {
            "type": "string",
            "description": "Identifier of the user or service creating this party",
            "example": "admin-user-001"
          },
          "status": {
            "$ref": "#/components/schemas/PartyLifecycleStatus"
          },
          "merged_into_party_id": {
            "type": "string",
            "format": "typed-prefix-id",
            "description": "Required when status is merged; rejected for non-merged statuses.",
            "example": "pty_01j9zxkp8wqrm2n4v6t5s3d7f2",
            "x-axiom-identifier-shape": "typed-prefix"
          }
        },
        "additionalProperties": false
      },
      "Error": {
        "type": "object",
        "required": [
          "status",
          "title"
        ],
        "properties": {
          "status": {
            "type": "string",
            "description": "HTTP status code as a string",
            "example": "422",
            "x-axiom-coded-value-classification": "platform-http-status-code"
          },
          "code": {
            "type": "string",
            "description": "Application-specific error code",
            "example": "VALIDATION_ERROR",
            "pattern": "^[A-Z][A-Z0-9_]*$"
          },
          "title": {
            "type": "string",
            "description": "Short, human-readable summary of the error",
            "example": "Validation Error"
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation of the error",
            "example": "Field 'policy_number' is required"
          },
          "help_url": {
            "type": "string",
            "format": "uri",
            "description": "Documentation URL for this error code",
            "example": "https://developers.afr-dev.axiom.express/api/reference/0.1.1/errors/VALIDATION_ERROR/"
          },
          "source": {
            "$ref": "#/components/schemas/ErrorSource"
          },
          "meta": {
            "type": "object",
            "additionalProperties": true,
            "description": "Additional error metadata"
          }
        },
        "additionalProperties": false
      },
      "ErrorMeta": {
        "type": "object",
        "properties": {
          "correlation_id": {
            "type": "string",
            "description": "Request correlation ID for support reference",
            "example": "req-abc-123-def-456",
            "x-axiom-identifier-classification": "correlation-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "When the error occurred",
            "example": "2026-02-07T12:00:00Z"
          },
          "request_id": {
            "type": "string",
            "description": "Unique request identifier",
            "example": "req-789-ghi",
            "x-axiom-identifier-classification": "request-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          }
        },
        "additionalProperties": false
      },
      "ErrorResponse": {
        "type": "object",
        "required": [
          "errors"
        ],
        "properties": {
          "errors": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/Error"
            },
            "description": "Array of error objects"
          },
          "meta": {
            "$ref": "#/components/schemas/ErrorMeta"
          }
        },
        "additionalProperties": false
      },
      "ErrorSource": {
        "type": "object",
        "properties": {
          "pointer": {
            "type": "string",
            "description": "JSON Pointer to the field that caused the error",
            "example": "/data/attributes/policy_number"
          },
          "parameter": {
            "type": "string",
            "description": "Query parameter that caused the error",
            "example": "filter[status]"
          },
          "header": {
            "type": "string",
            "description": "Header that caused the error",
            "example": "X-Tenant-Context"
          }
        },
        "additionalProperties": false
      },
      "EvaluatePartyGroupRequest": {
        "type": "object",
        "required": [
          "party_id"
        ],
        "properties": {
          "party_id": {
            "type": "string",
            "format": "uuid",
            "x-axiom-identifier-shape": "uuid"
          },
          "as_of": {
            "type": "string",
            "format": "date-time",
            "description": "Defaults to now() server-side"
          }
        },
        "additionalProperties": false
      },
      "Money": {
        "type": "object",
        "required": [
          "amount_minor",
          "currency_code"
        ],
        "properties": {
          "amount_minor": {
            "type": "integer",
            "format": "int64",
            "description": "Monetary amount in exact integer minor units (e.g. cents for ZAR/USD/EUR). Never float. The minor-unit exponent derives from currency_code \u2014 never hardcoded.",
            "example": 123456
          },
          "currency_code": {
            "type": "string",
            "pattern": "^[a-z]{3}$",
            "description": "Lowercase ISO-4217 currency code (e.g. \"zar\"). Must be non-empty; absent currency is a caller error.",
            "example": "zar"
          }
        },
        "additionalProperties": false
      },
      "OffsetPaginationMeta": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer",
            "description": "Total number of items matching the query",
            "example": 87
          },
          "limit": {
            "type": "integer",
            "description": "Maximum items per page",
            "example": 20
          },
          "offset": {
            "type": "integer",
            "description": "Number of items skipped",
            "example": 40
          }
        },
        "additionalProperties": false
      },
      "PaginationMeta": {
        "type": "object",
        "properties": {
          "cursor": {
            "type": "string",
            "description": "Current cursor position (can be used for bookmarking)",
            "example": "eyJpZCI6MTAwfQ=="
          },
          "next_cursor": {
            "type": "string",
            "nullable": true,
            "description": "Cursor for the next page (null if no more pages)",
            "example": "eyJpZCI6MTIwfQ=="
          },
          "has_more": {
            "type": "boolean",
            "description": "Whether more pages exist after this one",
            "example": true
          },
          "page_size": {
            "type": "integer",
            "description": "Number of items in this page",
            "example": 20
          },
          "total_count": {
            "type": "integer",
            "description": "Total number of items matching the query.\nMay be omitted for performance on large datasets.\nWhen omitted, use `has_more` to determine if more pages exist.\n",
            "example": 150
          }
        },
        "additionalProperties": false
      },
      "Party": {
        "type": "object",
        "required": [
          "id",
          "party_type",
          "status",
          "source_system",
          "attributes",
          "created_at",
          "updated_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "typed-prefix-id",
            "readOnly": true,
            "description": "Unique party identifier",
            "example": "pty_01j9zxkp8wqrm2n4v6t5s3d7f1",
            "x-axiom-identifier-shape": "typed-prefix"
          },
          "party_type": {
            "type": "string",
            "enum": [
              "individual",
              "organization",
              "agent",
              "provider",
              "broker"
            ],
            "description": "Classification of the party.\n- individual: A natural person (policyholder, claimant, beneficiary)\n- organization: A legal entity (corporate client, reinsurer)\n- agent: An insurance agent who sells policies\n- provider: A service provider (hospital, repair shop)\n- broker: An insurance broker acting as intermediary\n",
            "example": "individual"
          },
          "status": {
            "$ref": "#/components/schemas/PartyLifecycleStatus"
          },
          "merged_into_party_id": {
            "type": "string",
            "format": "typed-prefix-id",
            "nullable": true,
            "description": "Surviving Party identifier when status is merged. Required for status=merged; absent for every other status.",
            "example": "pty_01j9zxkp8wqrm2n4v6t5s3d7f2",
            "x-axiom-identifier-shape": "typed-prefix"
          },
          "external_id": {
            "type": "string",
            "nullable": true,
            "description": "Tenant-scoped identifier from the declared source system. Treat as PII-like; do not log raw request bodies containing it.",
            "example": "BRK-000123",
            "x-axiom-identifier-classification": "tenant-external-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "source_system": {
            "$ref": "#/components/schemas/PartyExternalIDSourceSystem"
          },
          "attributes": {
            "type": "object",
            "additionalProperties": true,
            "description": "Extensible key-value pairs for party-specific data (name, date of birth, tax ID, etc.)",
            "example": {
              "first_name": "Maria",
              "last_name": "Eriksson",
              "date_of_birth": "1985-03-14",
              "email": "maria.eriksson@example.com"
            }
          },
          "roles": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/PartyRole"
            },
            "description": "Roles assigned to this party across policies and claims"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "ISO 8601 timestamp when the party was created",
            "example": "2026-01-15T09:30:00Z"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "ISO 8601 timestamp when the party was last updated",
            "example": "2026-02-20T14:45:00Z"
          }
        },
        "additionalProperties": false
      },
      "PartyAuditEventItem": {
        "type": "object",
        "required": [
          "id",
          "table_name",
          "operation",
          "performed_at",
          "actor_type",
          "actor_id",
          "actor_original_id",
          "rule_versions",
          "summary"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "x-axiom-identifier-shape": "uuid"
          },
          "table_name": {
            "type": "string"
          },
          "operation": {
            "type": "string"
          },
          "old_values": {
            "type": "object",
            "additionalProperties": true
          },
          "new_values": {
            "type": "object",
            "additionalProperties": true
          },
          "user_id": {
            "type": "string",
            "nullable": true,
            "x-axiom-identifier-classification": "actor-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "performed_at": {
            "type": "string",
            "format": "date-time"
          },
          "correlation_id": {
            "type": "string",
            "nullable": true,
            "x-axiom-identifier-classification": "correlation-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "actor_type": {
            "type": "string",
            "enum": [
              "human",
              "service",
              "agent"
            ]
          },
          "actor_id": {
            "type": "string",
            "x-axiom-identifier-classification": "actor-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "actor_original_id": {
            "type": "string",
            "x-axiom-identifier-classification": "actor-original-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "outcome": {
            "type": "string"
          },
          "decision_id": {
            "type": "string",
            "nullable": true,
            "x-axiom-identifier-classification": "decision-reference",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "operation_code": {
            "type": "string"
          },
          "rule_versions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "inputs": {
            "type": "object",
            "additionalProperties": true
          },
          "summary": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "PartyAuditListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PartyAuditEventItem"
                }
              },
              "meta": {
                "$ref": "#/components/schemas/PaginationMeta"
              }
            },
            "required": [
              "data",
              "meta"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyContactListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ContactInfo"
                }
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyContactResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/ContactInfo"
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyDistributionChainResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "description": "Distribution chain traversal result",
                "required": [
                  "participants"
                ],
                "properties": {
                  "participants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "party_id",
                        "depth",
                        "path"
                      ],
                      "properties": {
                        "party_id": {
                          "type": "string",
                          "x-axiom-identifier-classification": "opaque-resource-id",
                          "x-axiom-identifier-shape": "alpha-exception",
                          "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
                        },
                        "depth": {
                          "type": "integer"
                        },
                        "relationship_id": {
                          "type": "string",
                          "x-axiom-identifier-classification": "opaque-resource-id",
                          "x-axiom-identifier-shape": "alpha-exception",
                          "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
                        },
                        "relationship_type": {
                          "type": "string"
                        },
                        "path": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "metadata": {
                          "type": "object",
                          "additionalProperties": true,
                          "nullable": true
                        },
                        "selected_path_rank": {
                          "type": "integer"
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "explanation": {
                    "type": "object",
                    "nullable": true,
                    "description": "Traversal reasoning under the governed contract.",
                    "properties": {
                      "as_of": {
                        "type": "string",
                        "format": "date-time"
                      },
                      "start_party_id": {
                        "type": "string",
                        "x-axiom-identifier-classification": "opaque-resource-id",
                        "x-axiom-identifier-shape": "alpha-exception",
                        "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
                      },
                      "filters": {
                        "type": "object",
                        "properties": {
                          "as_of": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "types": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "max_depth": {
                            "type": "integer"
                          }
                        },
                        "additionalProperties": false
                      },
                      "candidate_paths": {
                        "type": "array",
                        "items": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "winning_path": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyExternalIDSourceSystem": {
        "type": "string",
        "enum": [
          "unmapped",
          "kelevra_native",
          "broker_crm",
          "underwriter_pas"
        ],
        "description": "Authoritative alpha registry for Party external identifier provenance.\n`external_id` and `source_system` form an exact lookup pair: callers must supply both or neither on list filters, and create/update must include source_system whenever external_id is supplied.\n",
        "example": "broker_crm"
      },
      "PartyGroup": {
        "type": "object",
        "required": [
          "id",
          "group_type",
          "status",
          "id_namespace",
          "display_name",
          "created_at",
          "updated_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "readOnly": true,
            "description": "Unique party-group identifier",
            "example": "d9af24ca-ffcb-5bed-b8ef-ae867ef80388",
            "x-axiom-identifier-shape": "uuid"
          },
          "group_type": {
            "type": "string",
            "enum": [
              "static",
              "dynamic"
            ],
            "description": "Membership resolution strategy.\n- static: members are managed manually via the /members endpoints\n- dynamic: members resolve via a CEL rule referenced by membership_rule;\n  on-demand evaluation via POST /evaluate\n",
            "example": "static"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "inactive"
            ],
            "description": "Lifecycle status. Soft delete flips to inactive \u2014 the group and its\nmemberships are preserved for audit (governed contract).\n",
            "example": "active"
          },
          "id_namespace": {
            "type": "string",
            "description": "Namespace for external_id (DEFAULT tenant)",
            "example": "tenant"
          },
          "external_id": {
            "type": "string",
            "nullable": true,
            "description": "Optional tenant-supplied identifier, unique per (tenant, id_namespace, group_type)",
            "example": "acme-employees",
            "x-axiom-identifier-classification": "tenant-external-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "display_name": {
            "type": "string",
            "description": "Human-readable group name",
            "example": "ACME Employees"
          },
          "description": {
            "type": "string",
            "nullable": true,
            "description": "Free-form purpose / semantics",
            "example": "All employees of ACME Corp as of the current payroll run"
          },
          "membership_rule": {
            "type": "object",
            "nullable": true,
            "description": "CEL rule reference for dynamic groups. Shape is `{\"rule_id\": \"...\"}`\nreferencing a rule in the shared rules catalog. MUST be null when\ngroup_type = static; MUST be non-null when group_type = dynamic.\n",
            "additionalProperties": true,
            "example": {
              "rule_id": "rule-party-age-over-18"
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "example": "2026-04-18T09:30:00Z"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "example": "2026-04-18T09:30:00Z"
          },
          "created_by_actor_type": {
            "type": "string",
            "readOnly": true,
            "description": "Actor attribution under the governed contract",
            "example": "human"
          },
          "created_by_actor_id": {
            "type": "string",
            "readOnly": true,
            "example": "user-marcus@acme.example",
            "x-axiom-identifier-classification": "actor-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          }
        },
        "additionalProperties": false
      },
      "PartyGroupAuditEntry": {
        "type": "object",
        "required": [
          "id",
          "table_name",
          "operation",
          "performed_at",
          "actor_type",
          "actor_id",
          "actor_original_id",
          "rule_versions",
          "summary"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "x-axiom-identifier-shape": "uuid"
          },
          "table_name": {
            "type": "string"
          },
          "operation": {
            "type": "string"
          },
          "old_values": {
            "type": "object",
            "additionalProperties": true
          },
          "new_values": {
            "type": "object",
            "additionalProperties": true
          },
          "user_id": {
            "type": "string",
            "nullable": true,
            "x-axiom-identifier-classification": "actor-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "performed_at": {
            "type": "string",
            "format": "date-time"
          },
          "correlation_id": {
            "type": "string",
            "nullable": true,
            "x-axiom-identifier-classification": "correlation-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "actor_type": {
            "type": "string",
            "enum": [
              "human",
              "service",
              "agent"
            ]
          },
          "actor_id": {
            "type": "string",
            "x-axiom-identifier-classification": "actor-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "actor_original_id": {
            "type": "string",
            "x-axiom-identifier-classification": "actor-original-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "outcome": {
            "type": "string"
          },
          "decision_id": {
            "type": "string",
            "nullable": true,
            "x-axiom-identifier-classification": "decision-reference",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "operation_code": {
            "type": "string"
          },
          "rule_versions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "inputs": {
            "type": "object",
            "additionalProperties": true
          },
          "summary": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "PartyGroupAuditListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PartyGroupAuditEntry"
                }
              },
              "meta": {
                "$ref": "#/components/schemas/PaginationMeta"
              }
            },
            "required": [
              "data",
              "meta"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyGroupDetail": {
        "type": "object",
        "required": [
          "party_group",
          "members"
        ],
        "properties": {
          "party_group": {
            "$ref": "#/components/schemas/PartyGroup"
          },
          "members": {
            "type": "array",
            "description": "Active memberships as of the query time (or ?as_of=)",
            "items": {
              "$ref": "#/components/schemas/PartyGroupMembership"
            }
          }
        },
        "additionalProperties": false
      },
      "PartyGroupDetailResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/PartyGroupDetail"
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyGroupEvaluationResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/PartyGroupEvaluationResult"
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyGroupEvaluationResult": {
        "type": "object",
        "required": [
          "group_id",
          "party_id",
          "is_member",
          "evaluated_at"
        ],
        "description": "Read-only dry-run result of evaluating a dynamic group's membership rule\nagainst a candidate party. Does NOT mutate state.\n",
        "properties": {
          "group_id": {
            "type": "string",
            "format": "uuid",
            "x-axiom-identifier-shape": "uuid"
          },
          "party_id": {
            "type": "string",
            "format": "uuid",
            "x-axiom-identifier-shape": "uuid"
          },
          "is_member": {
            "type": "boolean",
            "description": "Whether the rule accepts this party for this group"
          },
          "rule_id": {
            "type": "string",
            "nullable": true,
            "description": "The rule that was evaluated",
            "x-axiom-identifier-classification": "rule-reference",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "rule_type": {
            "type": "string",
            "nullable": true,
            "example": "party_grouping"
          },
          "evaluated_at": {
            "type": "string",
            "format": "date-time"
          },
          "explanation_summary": {
            "type": "string",
            "description": "under the governed contract \u2014 concise trace of which clauses matched or failed",
            "example": "party_type == individual: matched; attributes.age >= 18: matched"
          }
        },
        "additionalProperties": false
      },
      "PartyGroupFlatMember": {
        "type": "object",
        "required": [
          "party_id",
          "found_at_depth"
        ],
        "description": "One party reachable from a group via recursive membership expansion",
        "properties": {
          "party_id": {
            "type": "string",
            "format": "uuid",
            "x-axiom-identifier-shape": "uuid"
          },
          "found_at_depth": {
            "type": "integer",
            "minimum": 1,
            "description": "BFS depth at which this party was first reached (1 = direct member)"
          },
          "via_path": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Chain of group ids from the start group to this party"
          },
          "membership_id": {
            "type": "string",
            "format": "uuid",
            "description": "The membership row that connected this party at the first depth found",
            "x-axiom-identifier-shape": "uuid"
          },
          "valid_from": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "PartyGroupFlatMemberListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PartyGroupFlatMember"
                }
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyGroupListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PartyGroup"
                }
              },
              "meta": {
                "$ref": "#/components/schemas/PaginationMeta"
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyGroupMembership": {
        "type": "object",
        "required": [
          "id",
          "group_id",
          "member_type",
          "member_id",
          "valid_from",
          "created_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "readOnly": true,
            "x-axiom-identifier-shape": "uuid"
          },
          "group_id": {
            "type": "string",
            "format": "uuid",
            "description": "FK to party_groups.id",
            "x-axiom-identifier-shape": "uuid"
          },
          "member_type": {
            "type": "string",
            "enum": [
              "party",
              "group"
            ],
            "description": "Polymorphic member kind. `party` means member_id references parties.id;\n`group` means member_id references party_groups.id (nested membership).\n",
            "example": "party"
          },
          "member_id": {
            "type": "string",
            "format": "uuid",
            "description": "FK to parties.id OR party_groups.id per member_type",
            "x-axiom-identifier-shape": "uuid"
          },
          "valid_from": {
            "type": "string",
            "format": "date-time",
            "description": "Membership start (inclusive)",
            "example": "2026-04-18T09:30:00Z"
          },
          "valid_to": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Membership end (exclusive); null = currently active"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "created_by_actor_type": {
            "type": "string",
            "readOnly": true
          },
          "created_by_actor_id": {
            "type": "string",
            "readOnly": true,
            "x-axiom-identifier-classification": "actor-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          }
        },
        "additionalProperties": false
      },
      "PartyGroupMembershipResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/PartyGroupMembership"
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyGroupMembershipView": {
        "type": "object",
        "required": [
          "group_id",
          "name",
          "grouping_rule_id",
          "effective_from",
          "via_policy_id"
        ],
        "properties": {
          "group_id": {
            "type": "string",
            "x-axiom-identifier-classification": "opaque-resource-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "name": {
            "type": "string"
          },
          "grouping_rule_id": {
            "type": "string",
            "x-axiom-identifier-classification": "rule-reference",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "effective_from": {
            "type": "string",
            "format": "date-time"
          },
          "effective_to": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "metadata": {
            "type": "object",
            "additionalProperties": true
          },
          "via_policy_id": {
            "type": "string",
            "x-axiom-identifier-classification": "opaque-resource-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          }
        },
        "additionalProperties": false
      },
      "PartyGroupResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/PartyGroup"
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyGroupRole": {
        "type": "object",
        "required": [
          "id",
          "role_type",
          "context",
          "effective_from"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "readOnly": true,
            "x-axiom-identifier-shape": "uuid"
          },
          "role_type": {
            "type": "string",
            "enum": [
              "sponsor",
              "provider",
              "beneficiary",
              "accepted_provider_network"
            ],
            "description": "Role played by the group.\n- sponsor: Group sponsoring a scheme (e.g. employer on a group health policy)\n- provider: Group acting as a service provider\n- beneficiary: Group entitled to benefits\n- accepted_provider_network: Provider-network group accepted on a Product context. Requires composition_type=provider_network on the assignee group and\n  entity_type=product on the role context.\n",
            "example": "sponsor"
          },
          "context": {
            "type": "object",
            "required": [
              "entity_type",
              "entity_id"
            ],
            "description": "Entity the role is held against (policy, claim, party, etc.)",
            "properties": {
              "entity_type": {
                "type": "string",
                "example": "policy"
              },
              "entity_id": {
                "type": "string",
                "example": "policy-12345",
                "x-axiom-identifier-classification": "opaque-resource-id",
                "x-axiom-identifier-shape": "alpha-exception",
                "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
              }
            },
            "additionalProperties": false
          },
          "effective_from": {
            "type": "string",
            "format": "date-time",
            "example": "2026-04-18T09:30:00Z"
          },
          "effective_to": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "revoked_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "revocation_reason": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PartyGroupRoleListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PartyGroupRole"
                }
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyGroupRoleResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/PartyGroupRole"
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyIdentityItem": {
        "type": "object",
        "required": [
          "id",
          "identity_type",
          "identity_value",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "pti_01J9ZXKP8WQRM2N4V6T5S3D7F5",
            "x-axiom-identifier-shape": "typed-prefix"
          },
          "identity_type": {
            "type": "string",
            "description": "Type of identity document (e.g. passport, national_id, tax_number, company_registration)",
            "example": "passport"
          },
          "identity_value": {
            "type": "string",
            "description": "The identity document number or value",
            "example": "AB1234567"
          },
          "issuing_country": {
            "type": "string",
            "pattern": "^[A-Z]{2}$",
            "description": "ISO 3166-1 alpha-2 country code of issuing authority",
            "example": "GB"
          },
          "expiry_date": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "description": "Expiry date of the identity document",
            "example": "2032-06-15"
          },
          "status": {
            "type": "string",
            "enum": [
              "unverified",
              "verified",
              "expired",
              "revoked"
            ],
            "example": "unverified"
          },
          "verified_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "PartyIdentityListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PartyIdentityItem"
                }
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyIdentityResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/PartyIdentityItem"
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyLifecycleStatus": {
        "type": "string",
        "enum": [
          "active",
          "inactive",
          "suspended",
          "deceased",
          "merged",
          "opted_out"
        ],
        "description": "Current Party lifecycle status.\n- active: Party can participate in transactions.\n- inactive: Party is no longer active.\n- suspended: Party is temporarily suspended pending review.\n- deceased: Natural-person Party is terminally deceased.\n- merged: Duplicate Party has been merged into merged_into_party_id and rejects later Party-scoped mutations.\n- opted_out: Party has opted out of new contact capture; historical contact reads remain available.\n",
        "example": "active"
      },
      "PartyListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Party"
                }
              },
              "meta": {
                "$ref": "#/components/schemas/PaginationMeta"
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyPaymentListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Payment"
                }
              },
              "meta": {
                "$ref": "#/components/schemas/PaginationMeta"
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyPolicyGroupListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PartyGroupMembershipView"
                }
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyRelationshipItem": {
        "type": "object",
        "description": "Relationship resource per parties.RelationshipResponse",
        "required": [
          "id",
          "from_party_id",
          "to_party_id",
          "relationship_type",
          "effective_from",
          "created_by"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "ptr_01J9ZXKP8WQRM2N4V6T5S3D7F6",
            "x-axiom-identifier-shape": "typed-prefix"
          },
          "from_party_id": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "pty_01j9zxkp8wqrm2n4v6t5s3d7f1",
            "x-axiom-identifier-shape": "typed-prefix"
          },
          "to_party_id": {
            "type": "string",
            "format": "typed-prefix-id",
            "example": "pty_01j9zxkp8wqrm2n4v6t5s3d7f2",
            "x-axiom-identifier-shape": "typed-prefix"
          },
          "relationship_type": {
            "type": "string"
          },
          "effective_from": {
            "type": "string",
            "format": "date-time"
          },
          "effective_to": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "metadata": {
            "type": "object",
            "additionalProperties": true,
            "nullable": true
          },
          "created_by": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "PartyRelationshipListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PartyRelationshipItem"
                }
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyRelationshipResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/PartyRelationshipItem"
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/Party"
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyRole": {
        "type": "object",
        "required": [
          "id",
          "role_type",
          "context",
          "status",
          "assigned_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "typed-prefix-id",
            "readOnly": true,
            "description": "Unique role assignment identifier",
            "example": "rol_01j9zxkp8wqrm2n4v6t5s3d7f3",
            "x-axiom-identifier-shape": "typed-prefix"
          },
          "role_type": {
            "type": "string",
            "enum": [
              "policyholder",
              "dependent",
              "insured",
              "beneficiary",
              "claimant",
              "broker",
              "agent",
              "underwriter",
              "adjuster",
              "sponsor",
              "accepted_provider_network"
            ],
            "description": "The type of role assigned to the party.\n- policyholder: The party who owns/holds the insurance policy\n- dependent: The covered party linked through another policy role, typically a family policyholder\n- insured: The party whose risk is covered by the policy\n- beneficiary: The party entitled to receive benefits under a claim\n- claimant: The party who submits a claim\n- broker: An intermediary who arranged the policy\n- agent: An insurance agent involved in the policy lifecycle\n- underwriter: The party responsible for risk assessment and acceptance\n- adjuster: The party responsible for investigating and settling claims\n- sponsor: The party (typically employer/trustee) sponsoring a group scheme\n- accepted_provider_network: Group-only role identifying a provider network accepted on a Product\n",
            "example": "policyholder"
          },
          "context": {
            "$ref": "#/components/schemas/RoleContext"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "inactive"
            ],
            "description": "Whether this role assignment is currently active",
            "example": "active"
          },
          "assigned_at": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "ISO 8601 timestamp when the role was assigned",
            "example": "2026-01-15T09:30:00Z"
          }
        },
        "additionalProperties": false
      },
      "PartyRoleListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PartyRole"
                }
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "PartyRoleResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/PartyRole"
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "Payment": {
        "type": "object",
        "required": [
          "id",
          "amount",
          "status",
          "payment_method",
          "created_at",
          "updated_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Unique payment identifier",
            "readOnly": true,
            "example": "fc07471c-677f-5d54-b3b0-4172aacb0fcd",
            "x-axiom-identifier-shape": "uuid"
          },
          "amount": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Money"
              }
            ],
            "description": "Payment amount (exact integer minor units + lowercase ISO-4217 currency code)."
          },
          "status": {
            "$ref": "#/components/schemas/PaymentStatus"
          },
          "payment_method": {
            "$ref": "#/components/schemas/PaymentMethod"
          },
          "description": {
            "type": "string",
            "nullable": true,
            "description": "Human-readable description of the payment purpose",
            "example": "Monthly premium \u2014 motor comprehensive policy POL-2026-00123"
          },
          "reference_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "Reference to the associated resource (premium, claim, etc.)",
            "example": "2f7ecef8-dae9-53ff-bf60-c05a7c4b2e7d",
            "x-axiom-identifier-shape": "uuid"
          },
          "reference_type": {
            "type": "string",
            "nullable": true,
            "description": "Type of the referenced resource (e.g. premium, claim, refund)",
            "example": "premium"
          },
          "metadata": {
            "type": "object",
            "additionalProperties": true,
            "nullable": true,
            "description": "Extensible key-value metadata for integration and operational data",
            "example": {
              "bank_reference": "ABSA-EFT-20260401-0042",
              "batch_id": "BATCH-2026-04-01",
              "reconciliation_status": "matched"
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the payment record was created",
            "readOnly": true,
            "example": "2026-04-01T06:00:00Z"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the payment record was last updated",
            "readOnly": true,
            "example": "2026-04-01T08:30:00Z"
          },
          "processed_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "Timestamp when the payment was successfully processed (null if not yet processed)",
            "readOnly": true,
            "example": "2026-04-01T08:30:00Z"
          },
          "party_id": {
            "type": "string",
            "format": "uuid",
            "nullable": true,
            "description": "Reference to the party (policyholder, beneficiary, etc.) associated with this payment. Nullable for backward compatibility with payments created before party linkage.",
            "example": "07805e66-69d7-5b42-a978-32729404b560",
            "x-axiom-identifier-shape": "uuid"
          }
        },
        "additionalProperties": false
      },
      "PaymentMethod": {
        "type": "string",
        "enum": [
          "bank_transfer",
          "credit_card",
          "debit_order",
          "cash",
          "cheque"
        ],
        "description": "Supported payment methods:\n- `bank_transfer` \u2014 Electronic funds transfer (EFT) or wire transfer\n- `credit_card` \u2014 Credit card payment via payment gateway\n- `debit_order` \u2014 Recurring debit order (direct debit) from bank account\n- `cash` \u2014 Cash payment (recorded manually, typically at branch)\n- `cheque` \u2014 Cheque payment (subject to clearing period)\n",
        "example": "debit_order"
      },
      "PaymentStatus": {
        "type": "string",
        "enum": [
          "pending",
          "processing",
          "completed",
          "failed",
          "cancelled"
        ],
        "description": "Payment lifecycle status:\n- `pending` \u2014 Payment has been created but not yet submitted for processing\n- `processing` \u2014 Payment has been submitted and is being processed by the payment provider\n- `completed` \u2014 Payment has been successfully processed and confirmed\n- `failed` \u2014 Payment processing failed (insufficient funds, declined, technical error)\n- `cancelled` \u2014 Payment was cancelled before processing completed\n",
        "example": "pending"
      },
      "RoleContext": {
        "type": "object",
        "required": [
          "entity_type",
          "entity_id"
        ],
        "properties": {
          "entity_type": {
            "type": "string",
            "enum": [
              "policy",
              "claim",
              "organization",
              "product",
              "policy_item",
              "group"
            ],
            "description": "The type of entity this role is scoped to. `group` identifies a PartyGroup context while the assignee remains the Party.",
            "example": "group"
          },
          "entity_id": {
            "type": "string",
            "format": "typed-prefix-id",
            "description": "The identifier of the entity this role is scoped to",
            "example": "pol_01j9zxkp8wqrm2n4v6t5s3d7f4",
            "x-axiom-identifier-shape": "typed-prefix"
          }
        },
        "additionalProperties": false
      },
      "RoleTypeListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "example": [
                  "beneficiary",
                  "broker",
                  "insured",
                  "policyholder"
                ]
              },
              "meta": {
                "type": "object",
                "properties": {
                  "total": {
                    "type": "integer",
                    "example": 4
                  }
                },
                "additionalProperties": false
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "RoleTypeUsageItem": {
        "type": "object",
        "required": [
          "code",
          "count"
        ],
        "properties": {
          "code": {
            "type": "string",
            "x-axiom-coded-value-classification": "tenant-catalogue-code"
          },
          "count": {
            "type": "integer"
          }
        },
        "additionalProperties": false
      },
      "RoleTypeUsageListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SuccessEnvelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/RoleTypeUsageItem"
                }
              },
              "meta": {
                "$ref": "#/components/schemas/OffsetPaginationMeta"
              }
            },
            "required": [
              "data"
            ],
            "additionalProperties": true
          }
        ]
      },
      "SuccessEnvelope": {
        "type": "object",
        "required": [
          "data",
          "status"
        ],
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "success"
            ],
            "description": "Always the literal string 'success' for successful responses. This invariant is established here and must not be overridden by any operation's response schema."
          },
          "data": {
            "description": "Operation-specific payload. Overridden per-endpoint via allOf composition (e.g. PartyResponse = allOf:[SuccessEnvelope, {data: Party}]). A caller holding a bare SuccessEnvelope-typed reference sees data as unknown/Any \u2014 hold the op-specific composed type (e.g. PartyResponse) to get the typed data."
          },
          "message": {
            "type": "string",
            "description": "Optional human-readable message. Present when supplied by the API."
          },
          "meta": {
            "type": "object",
            "description": "Optional response metadata (pagination, request echo). Present when supplied by the API.",
            "additionalProperties": true
          },
          "links": {
            "type": "object",
            "description": "Optional hypermedia links. Present when supplied by the API.",
            "additionalProperties": true
          },
          "telemetry": {
            "type": "object",
            "description": "Response telemetry block under the governed contract. Present on every wrapped success response. Contains timing and trace fields (total_ms, handler_ms, idempotency_replayed, trace_id).",
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "UpdatePartyGroupRequest": {
        "type": "object",
        "description": "All fields optional; server updates only those supplied.",
        "properties": {
          "display_name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "inactive"
            ]
          }
        },
        "additionalProperties": false
      },
      "UpdatePartyRequest": {
        "type": "object",
        "properties": {
          "external_id": {
            "type": "string",
            "description": "Replacement external identifier. If supplied, the effective source_system must be known and valid.",
            "example": "BRK-000124",
            "x-axiom-identifier-classification": "tenant-external-id",
            "x-axiom-identifier-shape": "alpha-exception",
            "x-axiom-identifier-alpha-exception": "API 0.1.1 preserves this identifier as a named alpha/operational exception until the owning runtime contract migrates to a canonical typed-prefix or UUID wire shape."
          },
          "source_system": {
            "$ref": "#/components/schemas/PartyExternalIDSourceSystem"
          },
          "attributes": {
            "type": "object",
            "additionalProperties": true,
            "nullable": true,
            "description": "Updated party-specific data. Merged with existing attributes.",
            "example": {
              "email": "maria.new-email@example.com",
              "phone": "+46701234567"
            }
          },
          "status": {
            "$ref": "#/components/schemas/PartyLifecycleStatus"
          },
          "merged_into_party_id": {
            "type": "string",
            "format": "typed-prefix-id",
            "description": "Required when transitioning to status=merged; rejected for non-merged statuses.",
            "example": "pty_01j9zxkp8wqrm2n4v6t5s3d7f2",
            "x-axiom-identifier-shape": "typed-prefix"
          },
          "updated_by": {
            "type": "string",
            "description": "Identifier of the user or service performing the update",
            "example": "admin-user-002"
          }
        },
        "additionalProperties": false
      }
    },
    "responses": {
      "BadRequest": {
        "description": "**400 Bad Request**\n\nThe request was malformed or contained invalid parameters.\n\nCommon causes:\n- Missing required parameter\n- Invalid parameter format\n- Invalid JSON syntax\n- Unsupported content type\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "examples": {
              "missing_parameter": {
                "summary": "Missing required parameter",
                "value": {
                  "errors": [
                    {
                      "status": "400",
                      "code": "MISSING_PARAMETER",
                      "title": "Bad Request",
                      "detail": "Required parameter 'tenant context' is missing",
                      "source": {
                        "parameter": "tenant context"
                      }
                    }
                  ]
                }
              },
              "invalid_uuid": {
                "summary": "Invalid UUID format",
                "value": {
                  "errors": [
                    {
                      "status": "400",
                      "code": "INVALID_PARAMETER",
                      "title": "Bad Request",
                      "detail": "Parameter 'id' must be a valid UUID",
                      "source": {
                        "parameter": "id"
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "Conflict": {
        "description": "**409 Conflict**\n\nThe request conflicts with the current state of the resource.\n\nCommon causes:\n- Attempting to create a duplicate resource\n- Optimistic locking failure (stale version)\n- Invalid state transition\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "examples": {
              "duplicate": {
                "summary": "Duplicate resource",
                "value": {
                  "errors": [
                    {
                      "status": "409",
                      "code": "DUPLICATE_RESOURCE",
                      "title": "Conflict",
                      "detail": "A policy with this number already exists"
                    }
                  ]
                }
              },
              "version_conflict": {
                "summary": "Version conflict",
                "value": {
                  "errors": [
                    {
                      "status": "409",
                      "code": "OPTIMISTIC_LOCK_FAILURE",
                      "title": "Conflict",
                      "detail": "Resource was modified by another request. Please refresh and try again.",
                      "meta": {
                        "current_version": 5,
                        "provided_version": 3
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "Forbidden": {
        "description": "**403 Forbidden**\n\nThe authenticated user does not have permission to perform this action.\n\nCommon causes:\n- Insufficient role permissions\n- Accessing another tenant's resource\n- Resource-level access control denial\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "examples": {
              "insufficient_permissions": {
                "summary": "Insufficient permissions",
                "value": {
                  "errors": [
                    {
                      "status": "403",
                      "code": "INSUFFICIENT_PERMISSIONS",
                      "title": "Forbidden",
                      "detail": "You do not have permission to perform this action"
                    }
                  ]
                }
              },
              "tenant_access": {
                "summary": "Tenant access denied",
                "value": {
                  "errors": [
                    {
                      "status": "403",
                      "code": "TENANT_ACCESS_DENIED",
                      "title": "Forbidden",
                      "detail": "You are not authorized to access this tenant's resources"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "InternalError": {
        "description": "**500 Server Error**\n\nAn unexpected error occurred. The correlation ID can be used\nfor support inquiries.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "errors": [
                {
                  "status": "500",
                  "code": "SERVER_ERROR",
                  "title": "Server Error",
                  "detail": "An unexpected error occurred. Please try again later.",
                  "meta": {
                    "correlation_id": "req-abc-123-def-456"
                  }
                }
              ]
            }
          }
        }
      },
      "NotFound": {
        "description": "**404 Not Found**\n\nThe requested resource was not found.\n\nNote: For security, we return 404 instead of 403 when the user\nis not authorized to know whether the resource exists.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "examples": {
              "resource_not_found": {
                "summary": "Resource not found",
                "value": {
                  "errors": [
                    {
                      "status": "404",
                      "code": "RESOURCE_NOT_FOUND",
                      "title": "Not Found",
                      "detail": "The requested policy was not found"
                    }
                  ]
                }
              },
              "endpoint_not_found": {
                "summary": "Endpoint not found",
                "value": {
                  "errors": [
                    {
                      "status": "404",
                      "code": "ENDPOINT_NOT_FOUND",
                      "title": "Not Found",
                      "detail": "The requested endpoint does not exist"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "Unauthorized": {
        "description": "**401 Unauthorized**\n\nAuthentication is required but was not provided or is invalid.\n\nCommon causes:\n- Missing Authorization header\n- Invalid or expired token\n- Malformed credentials\n",
        "headers": {
          "WWW-Authenticate": {
            "description": "Authentication challenge",
            "schema": {
              "type": "string",
              "example": "Bearer realm=\"axiom\", error=\"invalid_token\""
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "examples": {
              "missing_auth": {
                "summary": "Missing authentication",
                "value": {
                  "errors": [
                    {
                      "status": "401",
                      "code": "AUTHENTICATION_REQUIRED",
                      "title": "Unauthorized",
                      "detail": "Authentication is required to access this resource"
                    }
                  ]
                }
              },
              "expired_token": {
                "summary": "Expired token",
                "value": {
                  "errors": [
                    {
                      "status": "401",
                      "code": "TOKEN_EXPIRED",
                      "title": "Unauthorized",
                      "detail": "The provided authentication token has expired"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "ValidationError": {
        "description": "**422 Unprocessable Entity**\n\nThe request was well-formed but contained semantic errors.\n\nCommon causes:\n- Field validation failures\n- Business rule violations\n- Invalid state transitions\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "examples": {
              "single_field": {
                "summary": "Single field validation",
                "value": {
                  "errors": [
                    {
                      "status": "422",
                      "code": "VALIDATION_ERROR",
                      "title": "Validation Error",
                      "detail": "Field 'email' must be a valid email address",
                      "source": {
                        "pointer": "/data/attributes/email"
                      }
                    }
                  ]
                }
              },
              "multiple_fields": {
                "summary": "Multiple validation errors",
                "value": {
                  "errors": [
                    {
                      "status": "422",
                      "code": "VALIDATION_ERROR",
                      "title": "Validation Error",
                      "detail": "Field 'start_date' is required",
                      "source": {
                        "pointer": "/data/attributes/start_date"
                      }
                    },
                    {
                      "status": "422",
                      "code": "VALIDATION_ERROR",
                      "title": "Validation Error",
                      "detail": "Field 'premium' must be greater than 0",
                      "source": {
                        "pointer": "/data/attributes/premium"
                      }
                    }
                  ]
                }
              },
              "business_rule": {
                "summary": "Business rule violation",
                "value": {
                  "errors": [
                    {
                      "status": "422",
                      "code": "BUSINESS_RULE_VIOLATION",
                      "title": "Validation Error",
                      "detail": "Policy end date must be after start date"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    }
  },
  "x-axiom-schema-contract": {
    "schema_version": "axiom.public-schema-contract.v1",
    "posture": "classified-alpha-baseline",
    "component_schema_count": 61,
    "object_shape": {
      "closed_object_count": 38,
      "open_extension_object_count": 44,
      "open_object_gap_count": 0,
      "posture": "closed-or-intentional-open"
    },
    "identifier_shape": {
      "typed_id_reference_count": 0,
      "format_constrained_id_count": 28,
      "classified_id_string_count": 29,
      "untyped_id_string_count": 0,
      "posture": "classified-or-constrained"
    },
    "money_shape": {
      "shared_money_reference_count": 1,
      "classified_money_like_count": 0,
      "inline_money_like_count": 0,
      "posture": "shared-money-or-classified"
    },
    "coded_values": {
      "enum_string_count": 22,
      "classified_code_string_count": 2,
      "unconstrained_code_string_count": 0,
      "posture": "enum-or-classified-catalogue"
    }
  }
}
